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); }