Exemplo n.º 1
0
        /// <summary>
        /// 检查超时监控
        /// </summary>
        /// <returns></returns>
        private async Task <AlarmOption> CheckResponseTimeOutMonitor(IMonitorJob job, MonitorJobPayload payload)
        {
            if (payload.ResponseTimeOutMonitor == null)
            {
                return(null);
            }

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

            _logger.LogInformation("检查超时监控开始 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            var timeoutCount = await _storage.GetTimeoutResponeCountAsync(new RequestCountFilterOption()
            {
                Nodes     = job.Nodes.Split(','),
                StartTime = start,
                EndTime   = end,
            }, payload.ResponseTimeOutMonitor.TimeOutMs).ConfigureAwait(false);

            var count = await _storage.GetRequestCountAsync(new RequestCountFilterOption()
            {
                Nodes     = job.Nodes.Split(','),
                StartTime = start,
                EndTime   = end,
            }).ConfigureAwait(false);

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

            var percent = timeoutCount * 100.0 / count;

            _logger.LogInformation("检查超时监控结束  " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $"  检查结果 {(percent > payload.ResponseTimeOutMonitor.Percentage ? "预警":"正常")}");

            if (percent > payload.ResponseTimeOutMonitor.Percentage)
            {
                return(new AlarmOption()
                {
                    IsHtml = true,
                    Content = $@"

                          <br>
                          <b>【响应超时】触发预警 </b>

                          <p>超时率预警值:{payload.ResponseTimeOutMonitor.Percentage.ToString("F2")}%  当前值:{percent.ToString("F2")}% </p>

                          <p>任务标题:{job.Title}</p>

                          <p>监控节点:{job.Nodes}</p>

                          <p>监控频率:{_monitorService.ParseJobCron(job.CronLike)} 分钟</p>

                          <p>时间段:{start.ToStandardTime()}-{end.ToStandardTime()} </p>"
                });
            }

            return(null);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 检查超时监控
        /// </summary>
        /// <returns></returns>
        private async Task <AlarmOption> CheckResponseTimeOutMonitor(IMonitorJob job, MonitorJobPayload payload)
        {
            if (payload.ResponseTimeOutMonitor == null)
            {
                return(null);
            }

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

            _logger.LogInformation("CheckResponseTimeOutMonitor Start " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            var timeoutCount = await _storage.GetTimeoutResponeCountAsync(new RequestCountFilterOption()
            {
                Nodes     = job.Nodes.Split(','),
                StartTime = start,
                EndTime   = end,
            }, payload.ResponseTimeOutMonitor.TimeOutMs);

            var count = await _storage.GetRequestCountAsync(new RequestCountFilterOption()
            {
                Nodes     = job.Nodes.Split(','),
                StartTime = start,
                EndTime   = end,
            });

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

            var percent = timeoutCount * 100.0 / count;

            _logger.LogInformation("CheckResponseTimeOutMonitor End  " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $"  Result {(percent > payload.ResponseTimeOutMonitor.Percentage ? "预警":"正常")}");

            if (percent > payload.ResponseTimeOutMonitor.Percentage)
            {
                return(new AlarmOption()
                {
                    IsHtml = true,
                    Content = $@"

                          <br>
                          <b>【{_lang.Monitor_Type_Timeout}】 </b>

                          <p> {_lang.Warning_Threshold}:{payload.ResponseTimeOutMonitor.Percentage.ToString("F2")}%  {_lang.Warning_Current}:{percent.ToString("F2")}% </p>

                          <p>{_lang.Monitor_Title}:{job.Title}</p>

                          <p>{_lang.Monitor_ServiceNode}:{job.Nodes}</p>

                          <p>{_lang.Monitor_Frequency}:{_monitorService.ParseJobCronString(job.CronLike)} </p>

                          <p>{_lang.Warning_TimeRange}:{start.ToStandardTime()}-{end.ToStandardTime()} </p>"
                });
            }

            return(null);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 检查超时监控
        /// </summary>
        /// <returns></returns>
        private async Task <AlarmOption> CheckResponseTimeOutMonitor(MonitorJob job, MonitorJobPayload payload)
        {
            if (payload.ResponseTimeOutMonitor == null)
            {
                return(null);
            }

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

            _logger.LogInformation("CheckResponseTimeOutMonitor Start " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));


            #region BuildService

            string LocalIP   = "";
            int    LocalPort = 0;

            if (job.Instance.IsEmpty() || job.Instance == "ALL")
            {
                LocalIP   = "";
                LocalPort = 0;
            }
            else
            {
                LocalIP   = job.Instance.Substring(0, job.Instance.LastIndexOf(':'));
                LocalPort = job.Instance.Substring(job.Instance.LastIndexOf(':') + 1).ToInt();
            }

            #endregion


            var timeoutCount = await _storage.GetTimeoutResponeCountAsync(new RequestCountFilterOption()
            {
                Service   = job.Service,
                LocalIP   = LocalIP,
                LocalPort = LocalPort,
                StartTime = start,
                EndTime   = end,
            }, payload.ResponseTimeOutMonitor.TimeOutMs);

            var count = await _storage.GetRequestCountAsync(new RequestCountFilterOption()
            {
                Service   = job.Service,
                LocalIP   = LocalIP,
                LocalPort = LocalPort,
                StartTime = start,
                EndTime   = end,
            });

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

            var percent = timeoutCount * 100.0 / count;

            _logger.LogInformation("CheckResponseTimeOutMonitor End  " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $"   {(percent > payload.ResponseTimeOutMonitor.Percentage ? "Alert notification trigger" : "Pass")}");

            if (percent > payload.ResponseTimeOutMonitor.Percentage)
            {
                return(new AlarmOption()
                {
                    IsHtml = true,
                    Content = $@"

                          <br>
                          <b>【{_lang.Monitor_Type_Timeout}】 </b>

                          <p> {_lang.Warning_Threshold}:{payload.ResponseTimeOutMonitor.Percentage.ToString("F2")}%  {_lang.Warning_Current}:{percent.ToString("F2")}% </p>

                          <p>{_lang.Monitor_Title}:{job.Title}</p>

                          <p>{_lang.Monitor_ServiceNode}:{job.Service}</p>

                          <p>{_lang.Monitor_InstanceName}:{(job.Instance.IsEmpty() ? BasicConfig.ALLTag : job.Instance)}</p>

                          <p>{_lang.Monitor_Frequency}:{_monitorService.ParseJobCronString(job.CronLike)} </p>

                          <p>{_lang.Warning_TimeRange}:{start.ToStandardTime()}-{end.ToStandardTime()} </p>"
                });
            }

            return(null);
        }