Example #1
0
        public ServiceParityResult Process(IEnumerable <ResourceModel> resources, IEnumerable <RuleModel> rules, string targetRegion)
        {
            var ruleEngine = new RuleEngine(rules);

            var details = new Dictionary <string, ServiceParityResourceResult>();

            Constants.TargetRegions.TryGetValue(targetRegion, out var targetRegionName);
            targetRegionName = string.IsNullOrWhiteSpace(targetRegionName) ? Constants.DefaultTargetRegionName : targetRegionName;

            foreach (var resource in resources.Where(r => r.Details != null))
            {
                try
                {
                    var originalLocation = resource.Details["location"];
                    resource.Details["location"] = targetRegion;

                    var outputs = ruleEngine.Analyze(resource.Details, targetRegionName);
                    resource.Details["location"] = originalLocation;

                    details.Add(
                        resource.Id,
                        new ServiceParityResourceResult
                    {
                        Details = outputs.Select(o => this.Convert(o))
                    });
                }
                catch (Exception ex)
                {
                    details.Add(
                        resource.Id,
                        new ServiceParityResourceResult
                    {
                        Exception = ex
                    });
                }
            }

            return(new ServiceParityResult {
                Details = details
            });
        }