Exemple #1
0
        private RuleVersionDto EnsureVersion(int versionNumber, bool createIfMissing)
        {
            var rules = _rules;

            lock (rules)
            {
                var ruleVersion = rules.FirstOrDefault(r => r.Version == versionNumber);
                if (ruleVersion == null)
                {
                    var ruleList = _persister.GetAllRules(versionNumber);
                    if (ruleList == null)
                    {
                        if (createIfMissing)
                        {
                            ruleVersion = CreateRuleVersion(versionNumber);
                        }
                    }
                    else
                    {
                        var versionName = _persister.GetVersionName(versionNumber);
                        ruleVersion = new RuleVersionDto
                        {
                            Version = versionNumber,
                            Rules   = ruleList.ToList(),
                            Name    = versionName ?? "Version " + versionNumber
                        };
                        SetEvaluationOrder(ruleVersion);
                        rules.Add(ruleVersion);
                    }
                }
                return(ruleVersion);
            }
        }
Exemple #2
0
        private RuleVersionDto GetVersion(int version, bool createIfMissing)
        {
            RuleVersionDto ruleVersion = null;

            if (createIfMissing)
            {
                if (_ruleVersions == null)
                {
                    _ruleVersions = new List <RuleVersionDto>();
                }

                ruleVersion = _ruleVersions.FirstOrDefault(r => r.Version == version);
                if (ruleVersion == null)
                {
                    ruleVersion = new RuleVersionDto
                    {
                        Name    = "Version " + version,
                        Version = version,
                        Rules   = new List <RuleDto>()
                    };
                    _ruleVersions.Add(ruleVersion);
                }
            }
            else
            {
                if (_ruleVersions != null)
                {
                    ruleVersion = _ruleVersions.FirstOrDefault(r => r.Version == version);
                }
            }
            return(ruleVersion);
        }
Exemple #3
0
        private void DeleteRule(RuleVersionDto ruleVersion, string name)
        {
            _persister.DeleteRule(ruleVersion.Version, name);

            var rules = ruleVersion.Rules;

            lock (rules)
            {
                rules.RemoveAll(r => string.Compare(r.RuleName, name, StringComparison.InvariantCultureIgnoreCase) == 0);
            }
        }
Exemple #4
0
        private List <RuleDto> GetApplicableRules(
            RuleVersionDto ruleVersion,
            EnvironmentDto environment,
            string datacenter,
            string machine,
            string application,
            string instance)
        {
            if (ruleVersion == null || ruleVersion.Rules == null || ruleVersion.Rules.Count == 0)
            {
                return(new List <RuleDto>());
            }

            return(ruleVersion.Rules.Where(r => RuleApplies(r, environment, datacenter, machine, application, instance)).ToList());
        }
Exemple #5
0
        private RuleVersionDto CreateRuleVersion(int versionNumber)
        {
            var ruleVersion = new RuleVersionDto
            {
                Version = versionNumber,
                Name    = "Version " + versionNumber,
                Rules   = new List <RuleDto>()
            };

            var rules = _rules ?? new List <RuleVersionDto>();

            lock (rules) rules.Add(ruleVersion);
            _rules = rules;

            return(ruleVersion);
        }
Exemple #6
0
        public RuleVersionDto GetRuleVersion(IClientCredentials clientCredentials, int?version = null)
        {
            if (!version.HasValue)
            {
                version = GetDraftVersion();
            }
            var ruleVersion = EnsureVersion(version.Value, false);

            if (ruleVersion == null)
            {
                return(null);
            }

            var blockedEnvironments     = GetBlockedEnvironments(clientCredentials) ?? new List <EnvironmentDto>();
            var blockedMachineNemes     = GetBlockedMachines(blockedEnvironments);
            var blockedEnvironmentNames = blockedEnvironments.Select(e => e.EnvironmentName.ToLower()).ToList();

            Func <RuleDto, int, bool> isAllowed = (r, i) =>
            {
                if (!string.IsNullOrEmpty(r.Environment))
                {
                    if (blockedEnvironmentNames.Contains(r.Environment.ToLower()))
                    {
                        return(false);
                    }
                }

                if (!string.IsNullOrEmpty(r.Machine))
                {
                    if (blockedMachineNemes.Contains(r.Machine.ToLower()))
                    {
                        return(false);
                    }
                }

                return(true);
            };

            var filteredVersion = new RuleVersionDto
            {
                Version = ruleVersion.Version,
                Name    = ruleVersion.Name,
                Rules   = _mapper.Map <IEnumerable <RuleDto>, List <RuleDto> >(ruleVersion.Rules.Where(isAllowed))
            };

            return(filteredVersion);
        }
Exemple #7
0
 private void SetEvaluationOrder(RuleVersionDto ruleVersion)
 {
     SetEvaluationOrder(ruleVersion.Rules);
 }