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); } }
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); // 주목할 만한 것이 없는 상태이므로 메시지를 만들지 않는다. }