示例#1
0
		private async Task SendMail(ReportRowList list)
		{
			string subject = "PingWin: Regular failure report!";

			string body = GetBody(list);

			await Mailer.SendMailAsync(subject, body);
		}
示例#2
0
        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);
            }
        }
示例#3
0
		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;
			}

		} 
示例#4
0
		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();
		}