Exemple #1
0
        public async Task Run(Check check, CheckSchedule schedule, ICheckLogger logger)
        {
            _check    = check;
            _schedule = schedule;
            _logger   = logger;

            var result = new CheckResult
            {
                CheckID = check.ID
            };

            try
            {
                await _helper.LoadResultStatuses();

                _settings = await _helper.GetSettings();

                if (_schedule?.SkipPublicHolidays ?? false)
                {
                    if (!Enum.TryParse <CountryCode>(_settings.Global.CountryCode, out var countryCode))
                    {
                        throw new Exception($"Please configure country code in global settings to use {nameof(schedule.SkipPublicHolidays)}");
                    }
                    if (DateSystem.IsPublicHoliday(DateTime.Now, countryCode))
                    {
                        logger.Info("Check cancelled as it is a public holiday");
                        return;
                    }
                }
                result.Status = _helper.GetResultStatus(ResultStatusEnum.Success);
                logger.Info($"Starting check using {GetType().Name}");
                result = await PerformCheck(result);
            }
            catch (SubCheckException e)
            {
                result.Status = _helper.GetResultStatus(ResultStatusEnum.SubCheckFailed);
                logger.Error("Failed to run check - sub-check failed");
                logger.Error(e.ToString());
            }
            catch (Exception e)
            {
                result.Status = _helper.GetResultStatus(ResultStatusEnum.Failed);
                logger.Error("Failed to run check");
                logger.Error(e.ToString());
            }
            Action <string> log = logger.Error;

            switch (result.Status?.Type.Identifier)
            {
            case nameof(ResultTypeEnum.Success):
                log = logger.Info;
                break;

            case nameof(ResultTypeEnum.Warning):
                log = logger.Warn;
                break;

            case nameof(ResultTypeEnum.Failed):
                log = logger.Error;
                break;
            }
            log($"Result: {result.Status?.Name ?? "Unknown"} (Type: {result.Status?.Type.Name ?? "Unknown"})");
            if (result.TimeMS > 0)
            {
                log($"TimeMS: {result.TimeMS}");
            }
            result.DTS = DateTime.UtcNow;

            try
            {
                await _helper.SaveResult(result);
            }
            catch (Exception e)
            {
                logger.Error("Failed to save check result");
                logger.Error(e.ToString());
            }

            try
            {
                await _helper.RunNotifiers(check, result, _settings, logger);
            }
            catch (Exception e)
            {
                logger.Error("Failed to run notifiers");
                logger.Error(e.ToString());
            }

            logger.Done("Check completed");
        }
Exemple #2
0
        public async Task Run(Check check, ICheckLogger logger)
        {
            _check  = check;
            _logger = logger;

            CheckResult result = new CheckResult
            {
                CheckID = check.ID,
                Status  = CheckResultStatus.Success
            };

            try
            {
                _settings = await _helper.GetSettings();

                logger.Info($"Starting check using {GetType().Name}");
                result = await PerformCheck(result);
            }
            catch (SubCheckException e)
            {
                result.Status = CheckResultStatus.SubCheckFailed;
                logger.Error("Failed to run check - sub-check failed");
                logger.Error(e.ToString());
            }
            catch (Exception e)
            {
                result.Status = CheckResultStatus.Failed;
                logger.Error("Failed to run check");
                logger.Error(e.ToString());
            }
            finally
            {
                Action <string> log;
                if (result.Status == CheckResultStatus.Success)
                {
                    log = logger.Info;
                }
                else if ((int)result.Status > (int)CheckResultStatus.Success)
                {
                    log = logger.Warn;
                }
                else
                {
                    log = logger.Error;
                }
                log($"Result: {result.Status.ToString()}");
                if (result.TimeMS > 0)
                {
                    log($"TimeMS: {result.TimeMS}");
                }
                result.DTS = DateTime.UtcNow;

                try
                {
                    await _helper.SaveResult(result);
                }
                catch (Exception e)
                {
                    logger.Error("Failed to save check result");
                    logger.Error(e.ToString());
                }

                try
                {
                    await _helper.RunNotifiers(check, result, _settings, logger);
                }
                catch (Exception e)
                {
                    logger.Error("Failed to run notifiers");
                    logger.Error(e.ToString());
                }

                logger.Done("Check completed");
            }
        }