private async Task ExecuteTriggersAsync(Job job, SilenceTime silence, Log log) { try { if (silence.IsSilenceNow(log.DateTime)) { Trace.WriteLine("Start triggers for a job: " + job.Name); silence.SetUntil(log.DateTime + job.FailureSilenceInterval); var tasks = new List <Task>(); foreach (var trigger in job.GetTriggers()) { tasks.Add(trigger.ExecuteAsync(log, silence)); } await Task.WhenAll(tasks); silence.ResetCounter(); } else { Trace.WriteLine("Mute triggers for a job: " + job.Name); silence.IncreaseCounter(); } } catch (Exception exception) { await SystemLogRepository.SaveAsync(exception, $"Unhandled trigger error. Job = [{job.Name}]."); } }
public async Task RunAllAsync(List <Job> jobs) { try { var tasks = jobs.Select(job => Task.Run(async() => await RunCycleAsync(job))).ToList(); await Task.WhenAll(tasks); } catch (Exception exception) { await SystemLogRepository.SaveAsync(exception, $"Fatal job runner error. Jobs will not be runned until restart."); } }
public async Task RunCycleAsync(Job job) { var silence = new SilenceTime(); while (true) { try { var elapsed = await RunJobAsync(job, silence); await CoreEx.DelayIfNeeded(job.CheckInterval, elapsed); } catch (Exception exception) { var minutes = TimeSpan.FromMinutes(10); await SystemLogRepository.SaveAsync(exception, $"Unhandled job error. Job = [{job.Name}]. Job will be recycled in {minutes}. "); await Task.Delay(minutes); //TODO to config } } }
public SystemLogService() { _systemLogRepository = new SystemLogRepository(); }
public SystemLogController() { ControllerName = "SystemLog"; Repository = new SystemLogRepository(); }