Example #1
0
        public static void SetOptions(int interval, int errorCountLimit, int errorGrowthLimit, string emailReceivers)
        {
            List <Options> opts = new List <Options>();

            opts.Add(new Options {
                Key = OptionKeys.ALERTING_APPERROR_INTERVAL.ToString(), Value = interval.ToString(), UpdateTime = Utils.GetUnixTime(DateTime.Now)
            });
            opts.Add(new Options {
                Key = OptionKeys.ALERTING_APPERROR_ERRORCOUNTLIMIT.ToString(), Value = errorCountLimit.ToString(), UpdateTime = Utils.GetUnixTime(DateTime.Now)
            });
            opts.Add(new Options {
                Key = OptionKeys.ALERTING_APPERROR_ERRORGROWTHLIMIT.ToString(), Value = errorGrowthLimit.ToString(), UpdateTime = Utils.GetUnixTime(DateTime.Now)
            });
            opts.Add(new Options {
                Key = OptionKeys.ALERTING_APPERROR_EMAILRECEIVERS.ToString(), Value = emailReceivers, UpdateTime = Utils.GetUnixTime(DateTime.Now)
            });
            LogWriterManager.GetLogWriter().SetOptions(opts);
        }
Example #2
0
 /// <summary>
 /// 设置指定开关
 /// </summary>
 /// <param name="on_off"></param>
 public static void SetLogOnOff(LogOnOff on_off)
 {
     LogWriterManager.GetLogWriter().SetLogOnOff(on_off);
     RefreshLogOnOff();
 }
Example #3
0
        public override void Alert()
        {
            if (this.EmailReceivers == null || this.EmailReceivers.Length == 0)
            {
                return;
            }

            long start1 = Utils.GetUnixTime(DateTime.Now.AddMinutes(-1)) * 10000000;
            long end1   = Utils.GetUnixTime(DateTime.Now) * 10000000;

            long start2 = Utils.GetUnixTime(DateTime.Now.AddMinutes(-2)) * 10000000;
            long end2   = start1;

            var data1 = LogViewerManager.GetLogViewer().GetStatistics(start1, end1, 0);

            var data2 = LogViewerManager.GetLogViewer().GetStatistics(start2, end2, 0);

            var data_grp1 = data1.GroupBy(x => x.AppId);

            foreach (var item in data_grp1)
            {
                var appId = item.Key;


                var lastAH = LogViewerManager.GetLogViewer().GetLastAlertingHistory(appId, AlertingType.AppError);
                if (lastAH != null)
                {
                    if ((Utils.GetDateTimeFromUnix(lastAH.Time) - DateTime.Now).TotalMinutes < this.Interval)
                    {
                        continue;
                    }
                }

                int error_count1 = item.Sum(x => x.Error);
                int error_count2 = data2.Where(x => x.AppId == appId).Sum(x => x.Error);
                int error_count  = error_count1 + error_count2;

                string msg_body_fmt = string.Empty;
                if ((error_count) > ErrorCountLimit)
                {
                    //报警
                    msg_body_fmt = "应用{0}程序异常过多,请及时处理";
                }
                else if (error_count2 > 0 && error_count1 > 10 * this.Interval && ((error_count1 - error_count2) / error_count2) * 100 > ErrorGrowthLimit)
                {
                    //报警
                    msg_body_fmt = "应用{0}程序异常增长很快,请及时处理";
                }
                else
                {
                    continue;
                }

                string appName = appId.ToString();
                var    loo     = LogViewerManager.GetLogViewer().GetLogOnOff(appId);
                if (loo != null)
                {
                    appName = $"{appId}({ loo.AppName})";
                }

                string msg_subject = "【报警】应用" + appName + "程序异常";

                for (int i = 0; i < EmailReceivers.Length; i++)
                {
                    MailHelper.SendMail(msg_subject, EmailReceivers[i], string.Format(msg_body_fmt, appName), true);
                }

                AlertingHistory ah = new AlertingHistory();
                ah.AlertingType = AlertingType.AppError;
                ah.Time         = Utils.GetUnixTime(DateTime.Now);
                ah.ObjId        = appId;
                ILogWriter w = LogWriterManager.GetLogWriter();
                w.RecordAlerting(ah);
            }
        }
        public void Process(IList <LogEntity> logs)
        {
            var logWriter = LogWriterManager.GetLogWriter();

            logWriter.Write(logs);
        }