コード例 #1
0
        static void Main(string[] args)
        {
            string ruleId = string.Empty, containerId = string.Empty, environmentId = string.Empty, environmentName = string.Empty;

            if (args == null)
            {
                Console.WriteLine("Parameters are needed");
                return;
            }

            if (args.Length != 8)
            {
                Console.WriteLine("All parameters need to be provided");
                return;
            }

            for (int i = 0; i < args.Length; i++)
            {
                string arg = args[i].ToLower();
                switch (arg)
                {
                case "--ruleid":
                    ruleId = args[i + 1];
                    break;

                case "--containerid":
                    containerId = args[i + 1];
                    break;

                case "--environmentid":
                    environmentId = args[i + 1];
                    break;

                case "--environmentname":
                    environmentName = args[i + 1];
                    break;
                }
            }

            Guid environmentGUID;

            if (!Guid.TryParse(environmentId, out environmentGUID))
            {
                Console.WriteLine("Please provide a valid environmentId");
                return;
            }

            // IoC
            var serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection);
            var serviceProvider    = serviceCollection.BuildServiceProvider();
            var environmentService = serviceProvider.GetService <IDatabaseEnvironmentService>();
            var ruleService        = serviceProvider.GetService <IRuleService>();
            var dataChecker        = serviceProvider.GetService <IRuleExecutionService>();

            var getEnvironment = environmentService.GetAsync(environmentGUID).GetAwaiter().GetResult();

            if (getEnvironment == null || string.IsNullOrEmpty(getEnvironment.GetConnectionString()))
            {
                Console.WriteLine("Please provide a valid environmentId");
                return;
            }

            if (getEnvironment.Name.ToLower() != environmentName)
            {
                Console.WriteLine("environmentName does not match, review it");
                return;
            }

            Console.WriteLine($"Running Data Checker V{getEnvironment.Version} Session ({Guid.NewGuid()})");
            Console.WriteLine("");

            List <RuleBO> rules = new List <RuleBO>();

            // Get all rules to execute
            Console.Write("Loading rules ...");
            var sw = System.Diagnostics.Stopwatch.StartNew();

            if (!string.IsNullOrEmpty(containerId))
            {
                string[] listContainers = containerId.Split(",");
                foreach (string currentContainer in listContainers)
                {
                    Guid containerGUID;
                    if (!Guid.TryParse(currentContainer, out containerGUID))
                    {
                        Console.WriteLine("Please provide a valid containerId");
                        return;
                    }
                    Console.WriteLine($"Getting rules from containerId:{currentContainer}");
                    rules.AddRange(ruleService.GetWithLogsByContainerIdAsync(containerGUID).GetAwaiter().GetResult());
                }
                rules = rules.Distinct().ToList();
            }

            if (!string.IsNullOrEmpty(ruleId))
            {
                if (rules.Count == 0)
                {
                    rules = ruleService.GetAsync().GetAwaiter().GetResult();
                }

                Guid ruleGUID;
                if (!Guid.TryParse(ruleId, out ruleGUID))
                {
                    Console.WriteLine("Please provide a valid ruleId");
                    return;
                }
                rules = rules.Where(p => p.Id == ruleGUID).ToList();

                if (rules.Count == 0)
                {
                    Console.WriteLine($"Rule with Id {ruleId} not found");
                    return;
                }
            }

            sw.Stop();
            Console.WriteLine($" Loaded {rules.Count()} in {sw.ElapsedMilliseconds}ms");
            Console.WriteLine("");

            // Execute the rules
            var testReuslts = dataChecker.ExecuteRulesByEnvironmentIdAsync(rules, getEnvironment).GetAwaiter().GetResult();

            foreach (var result in testReuslts)
            {
                if (result.Evaluation)
                {
                    ConsoleX.WriteLineSuccess($"Test {result.Rule.Id} \"{result.Rule.Name}\" executed SUCCESSFULLY! Found {result.Result} records in {result.ExecutionTimeMs} ms.");
                }
                else
                {
                    ConsoleX.WriteLineError($"Test {result.Rule.Id} \"{result.Rule.Name}\" FAILED! {result.Rule.ErrorMessage.Replace("{TestResult.Result}", result.Result.ToString())}");

                    if (!string.IsNullOrEmpty(result.Rule.DiagnosticSql))
                    {
                        ConsoleX.WriteLineInfo($"For diagnostics data run: {result.Rule.DiagnosticSql}");
                    }
                }
            }

            // TODO: Use a logging framework like the one in .net core or Log4net
            WriteErrorsToFile(testReuslts);

            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();

            Console.SetOut(Console.Out);
        }