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

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

            if (payload.CallMonitor.Min == 0 && payload.CallMonitor.Max == 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 total = await _storage.GetCallCountAsync(new CallCountTaskFilter
            {
                Service   = job.Service,
                Instance  = job.Instance,
                StartTime = start,
                EndTime   = end
            });

            if (total < payload.CallMonitor.Min || total > payload.CallMonitor.Max)
            {
                return(new AlarmOption()
                {
                    IsHtml = true,
                    Alarm = new MonitorAlarm
                    {
                        JobId = job.Id,
                        Body = $"【{job.Title}】 {_lang.Monitor_Type_RequestCount} --- {_lang.Warning_Threshold}:{_lang.Min} {payload.CallMonitor.Min} {_lang.Max} {payload.CallMonitor.Max}  {_lang.Warning_Current}:{total} ",
                        CreateTime = DateTime.Now
                    },
                    Content = $@"
                          <br>
                          <b>{_lang.Monitor_Type_RequestCount} </b>
                          <p>{_lang.Monitor_Title}:{job.Title} </p>
                          <p>{_lang.Warning_Threshold}:{_lang.Min}:{payload.CallMonitor.Min} {_lang.Max}:{payload.CallMonitor.Max}  {_lang.Warning_Current}:{total} </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);
        }