Beispiel #1
0
        private void WatchingImpl(TimeSpan timeSpan)
        {
            if (timeSpan.Seconds <= 0)
            {
                return;
            }

            TemporalCounter t = _temporalCounter;

            Double logCountPerSec = t.LogCount / timeSpan.TotalSeconds;
            Double bytesPerSec    = t.SendBytes / timeSpan.TotalSeconds;
            Double elapsedMSMean  = t.UpdateCount <= 0 ? 0 : t.ElapsedMSTotal / t.UpdateCount;

            Statistics.MVS queueMVS = Statistics.CalculateMVS(t.QueueCounts);

            String attention = BuildSendSlackAttention(t.LogCount, t.ElapsedMSTotal, queueMVS);

            if (String.IsNullOrEmpty(attention) == false)
            {
                String message = String.Format("```{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18}{19}{20}{21}{22}{23}{24}===========================================```",
                                               $"Attention: {attention}\n",
                                               $"Build: {_logger.BuildType}({_logger.Config.AssemblyVersion})\n",
                                               $"InstanceID: {_logger.InstanceID}\n",
                                               $"ID: {_logger.Config.ID}\n",
                                               $"StartTimeUTC(Elapsed): {_logger.StartTime:yyyy-MM-dd HH:mm:ss}({(DateTime.UtcNow - _logger.StartTime):dd\\.hh\\:mm\\:ss})\n",
                                               $"ReporterType(Level): {_logger.Config.ReporterType}({_logger.Reporter.ReportLevel})\n",
                                               $"ThreadCount: {_logger.ThreadCount.ToString("N0")}\n",
                                               $"PushLogCount: {_pushLogCount.ToString("N0")}\n",
                                               $"RequestPutLogCount: {_requestPutLogCount.ToString("N0")}\n",
                                               $"SuccessPutLogCount: {_successLogCount.ToString("N0")}\n",
                                               $"PendingPutLogCount: {_pendingLogCount.ToString("N0")}\n",
                                               $"FailLogCount: {_failLogCount.ToString("N0")}\n",
                                               $"SerialErrorCount: {_logger.ErrorCounter.SerialErrorCount.ToString("N0")}\n",
                                               $"TotalErrorCount: {_logger.ErrorCounter.TotalErrorCount.ToString("N0")}\n",
                                               $"UseIgnoreLogType: {_logger.UseIgnoreLogType.ToString()}\n",
                                               $"============ last {timeSpan.TotalSeconds.ToString("N2")} seconds =============\n",
                                               $"ElapsedPeak: {t.ElapsedMSPeak.ToString("N2")} ms\n",
                                               $"ElapsedMean: {elapsedMSMean.ToString("N2")} ms\n",
                                               $"WorkingCount: {t.UpdateCount.ToString("N0")}\n",
                                               $"PutLogCount: {t.LogCount.ToString("N0")}\n",
                                               $"SendBytes: {t.SendBytes.ToString("N0")}\n",
                                               $"QueueSizePeak: {t.QueueCountPeak.ToString("N0")}\n",
                                               $"QueueSizeMean(SD): {queueMVS.Mean.ToString("N2")}({queueMVS.SD.ToString("N2")})\n",
                                               $"{logCountPerSec.ToString("N2")} LogCount/s\n",
                                               $"{bytesPerSec.ToString("N2")} Bytes/s\n");

                _logger.Reporter.Info(message);
            }
        }
Beispiel #2
0
        private String BuildSendSlackAttention(Int32 logCount, Double elapsedMeanMS, Statistics.MVS queueMVS)
        {
            if (_temporalCounter.ForceReportFlag)
            {
                return("ForceReportFlag");
            }

            Config.Watcher config = _logger.Config.Watchers;

            if (config.ReportLogCount < logCount)
            {
                return($"LogCount({config.ReportLogCount.ToString()}) < LogCount({logCount.ToString()})");
            }

            if (config.ReportElapsedMeanMS < elapsedMeanMS)
            {
                return($"ElapsedMeanMS({config.ReportElapsedMeanMS.ToString()}) < ElapsedMS({elapsedMeanMS.ToString()})");
            }

            if (config.ReportQueueMeanSize < queueMVS.Mean)
            {
                return($"QueueSizeMean({config.ReportQueueMeanSize.ToString()}) < Mean({queueMVS.Mean.ToString()})");
            }

            if (config.ReportQueueStdDev < queueMVS.SD)
            {
                return($"QueueSizeMean({config.ReportQueueStdDev.ToString()}) < SD({queueMVS.SD.ToString()})");
            }

            if (_logger.BuildType == BuildType.Debug)
            {
                return("DEBUG");
            }

            return(String.Empty); // 주목할 만한 것이 없는 상태이므로 메시지를 만들지 않는다.
        }