Ejemplo n.º 1
0
        public async Task <AlarmOption> ResponseErrorTask(MonitorJob job, MonitorJobPayload payload)
        {
            if (payload.ErrorMonitor == null)
            {
                return(null);
            }

            var(now, start, end) = GetNowTimes(ParseJobCron(job.CronLike));

            if (payload.ErrorMonitor.Percentage == 0)
            {
                return(null);
            }

            if (!job.StartTime.IsEmpty() && !job.EndTime.IsEmpty())
            {
                var startTime = new DateTime(now.Year, now.Month, now.Day, job.StartTime.Split(':')[0].ToInt(), job.StartTime.Split(':')[1].ToInt(), 0, DateTimeKind.Local);
                var endTime   = new DateTime(now.Year, now.Month, now.Day, job.EndTime.Split(':')[0].ToInt(), job.EndTime.Split(':')[1].ToInt(), 0, DateTimeKind.Local);

                if (now < startTime || now > endTime)
                {
                    return(null);
                }
            }

            var(error, total) = await _storage.GetErrorResponeCountAsync(new ResponseErrorTaskFilter
            {
                Service    = job.Service,
                Instance   = job.Instance,
                StartTime  = start,
                EndTime    = end,
                Percentage = payload.ErrorMonitor.Percentage
            });


            if (total == 0)
            {
                return(null);
            }

            var percent = error * 1.00 / total * 1.00;

            if (percent > payload.ErrorMonitor.Percentage * 0.01)
            {
                return(new AlarmOption()
                {
                    IsHtml = true,
                    Alarm = new MonitorAlarm
                    {
                        JobId = job.Id,
                        Body = $"【{job.Title}】 {_lang.Monitor_Type_RequestError} --- {_lang.Warning_Threshold}:{(payload.ErrorMonitor.Percentage).ToString("F2")}%  {_lang.Warning_Current}:{(percent * 100.00) .ToString("F2")}% ",
                        CreateTime = DateTime.Now
                    },
                    Content = $@"
                          <br>
                          <b>{_lang.Monitor_Type_RequestError} </b>
                          <p>{_lang.Monitor_Title}:{job.Title} </p>
                          <p>{_lang.Warning_Threshold}:{(payload.ErrorMonitor.Percentage).ToString("F2")}%  {_lang.Warning_Current}:{(percent * 100.00) .ToString("F2")}% </p>
                          <p>{_lang.Warning_Title}:{job.Title}</p>
                          <p>{_lang.Monitor_ServiceNode}:{job.Service}</p>
                          <p>{_lang.Monitor_InstanceName}:{(job.Instance.IsEmpty() ? "ALL" : job.Instance)} </p>
                          <p>{_lang.Monitor_Frequency}:{ParseJobCronString(job.CronLike)} </p>
                          <p>{_lang.Warning_TimeRange}:{start.ToStandardTime()} {_lang.To} {end.ToStandardTime()} </p>"
                });
            }
            return(null);
        }