private static AlertingRules LoadAlertingRules() { using (StreamReader reader = new StreamReader(AlertingRulesFile, Encoding.UTF8)) { XmlSerializer serializer = new XmlSerializer(typeof(AlertingRules)); AlertingRules rules = (AlertingRules)serializer.Deserialize(reader); return(rules); } }
private static void GenerateExampleAlertingRules() { string exampleFile = "example." + AlertingRulesFile; using (StreamWriter writer = new StreamWriter(exampleFile, false, Encoding.UTF8)) { var exampleAlertingRules = AlertingRules.GenerateSample(); XmlSerializer serializer = new XmlSerializer(typeof(AlertingRules)); serializer.Serialize(writer, exampleAlertingRules); } }
static void Main(string[] args) { if (args.Where(arg => string.Compare(arg, "-h", true, System.Globalization.CultureInfo.InvariantCulture) == 0).Count() > 0) { ShowHelpMessage(); return; } if (args.Where(arg => string.Compare(arg, "-g", true, System.Globalization.CultureInfo.InvariantCulture) == 0).Count() > 0) { GenerateExampleAlertingRules(); return; } int exitCode = 0; try { CosmosJobMonitor.Share.CosmosJobMonitorUtility.SetDataDirectory(Properties.Settings.Default.DataDirectory); AlertingRules rules = LoadAlertingRules(); RuleEngine engine = new RuleEngine(Properties.Settings.Default.JobStatisticsConnectionString, Properties.Settings.Default.CommandTimeout, GetPassword); List <Exception> exceptions; engine.Execute(rules, out exceptions); if (exceptions != null && exceptions.Any()) { Console.Error.WriteLine("There are exceptions when rule engine was executing rules:"); foreach (var exception in exceptions) { Console.Error.WriteLine("Exception: {0}", exception); } exitCode = -1; } } catch (Exception ex) { Console.Error.WriteLine("Exception: {0}", ex); exitCode = -1; } #if DEBUG Console.WriteLine("Press any key to continue..."); Console.ReadKey(); #endif Environment.Exit(exitCode); }
public void Execute(AlertingRules rules, out List <Exception> exceptions) { List <Tuple <AlertingRule, List <Guid> > > allJobIds = new List <Tuple <AlertingRule, List <Guid> > >(); exceptions = new List <Exception>(); foreach (var rule in rules.Rules) { try { var jobIds = ExecuteRule(rule); if (jobIds.Any()) { allJobIds.Add(Tuple.Create(rule, jobIds)); } } catch (Exception ex) { exceptions.Add(ex); } } // get all user aliases we are tracking var userAliases = GetUserAliasesForTracking().ToDictionary(a => a); // get all job statistics for all rules var allJobStatistics = allJobIds .Select(t => Tuple.Create(t.Item1, GetJobStatistics(t.Item1, t.Item2, rules.JobNameFilters, userAliases, rules.LookbackDays))) .Where(t => t.Item2.Any()) .ToList(); if (allJobStatistics.Any()) { SendEmail(rules.MailSettings, allJobStatistics); } }