private async Task SendMail(ReportRowList list) { string subject = "PingWin: Regular failure report!"; string body = GetBody(list); await Mailer.SendMailAsync(subject, body); }
public ReportRowList GetIntervalReport(DateTime begin, DateTime end) { const int success = (int)StatusEnum.Success; using (var context = ContextFactory.Create()) { var list = new ReportRowList(); list.Begin = begin; list.End = end; var query = context.Logs.Where(l => l.Status != success && begin < l.DateTime && l.DateTime <= end); list.LogTotalCount = query.Count(); if (list.LogTotalCount == 0) { return(list); } List <int> jobIds = query.Select(l => l.JobRecordId).Distinct().ToList(); list.JobTotalCount = jobIds.Count; var jobs = JobRepository.GetJobRecords(); foreach (int jobId in jobIds) { var row = new ReportRow(); var queryPerJob = query.Where(l => l.JobRecordId == jobId); row.First = queryPerJob.OrderBy(l => l.DateTime).First(); row.Last = queryPerJob.OrderByDescending(l => l.DateTime).First(); row.Count = queryPerJob.Count(); row.JobId = jobId; row.JobName = jobs.First(job => job.Id == jobId).Name; list.Rows.Add(row); } return(list); } }
public ReportRowList GetIntervalReport(DateTime begin, DateTime end) { const int success = (int)StatusEnum.Success; using (var context = ContextFactory.Create()) { var list = new ReportRowList(); list.Begin = begin; list.End = end; var query = context.Logs.Where(l => l.Status != success && begin < l.DateTime && l.DateTime <= end); list.LogTotalCount = query.Count(); if (list.LogTotalCount == 0) return list; List<int> jobIds = query.Select(l => l.JobRecordId).Distinct().ToList(); list.JobTotalCount = jobIds.Count; var jobs = JobRepository.GetJobRecords(); foreach (int jobId in jobIds) { var row = new ReportRow(); var queryPerJob = query.Where(l => l.JobRecordId == jobId); row.First = queryPerJob.OrderBy(l => l.DateTime).First(); row.Last = queryPerJob.OrderByDescending(l => l.DateTime).First(); row.Count = queryPerJob.Count(); row.JobId = jobId; row.JobName = jobs.First(job => job.Id == jobId).Name; list.Rows.Add(row); } return list; } }
private string GetBody(ReportRowList list) { var builder = new StringBuilder(); builder.AppendLine($"PingWin has recorded {list.LogTotalCount} failures at confugured interval."); builder.AppendLine($"Interval begin: {list.Begin}"); builder.AppendLine($"Interval end: {list.End}"); builder.AppendLine(); builder.AppendLine("Technical information below in the following format:"); builder.AppendLine("<JOB_NAME>: <FAILURE_COUNT> <FIRST_FAILURE_TIME> <LAST_FAILURE_TIME>"); builder.AppendLine(); foreach (var row in list.Rows.OrderBy(row => row.JobName)) { builder.AppendLine( $"{row.JobName}: {row.Count} {row.First.DateTime.ToShortTimeString()} {row.Last.DateTime.ToShortTimeString()}"); } return builder.ToString(); }