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