예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
            }
        }