public Result() { this.Action = new ActionStatistics(); this.Time = new TimeStatistics(); this.Log = new LogStatistics(); this.ScreenShot = null; }
internal SiloStatisticsManager(GlobalConfiguration globalConfig, NodeConfiguration nodeConfig) { MessagingStatisticsGroup.Init(true); MessagingProcessingStatisticsGroup.Init(); NetworkingStatisticsGroup.Init(true); ApplicationRequestsStatisticsGroup.Init(globalConfig.ResponseTimeout); SchedulerStatisticsGroup.Init(); StorageStatisticsGroup.Init(); runtimeStats = new RuntimeStatisticsGroup(); logStatistics = new LogStatistics(nodeConfig.StatisticsLogWriteInterval, true); MetricsTable = new SiloPerformanceMetrics(runtimeStats, nodeConfig); perfCountersPublisher = new PerfCountersStatistics(nodeConfig.StatisticsPerfCountersWriteInterval); }
internal void Stop() { if (MetricsTable != null) { MetricsTable.Dispose(); } MetricsTable = null; if (countersPublisher != null) { countersPublisher.Stop(); } countersPublisher = null; if (logStatistics != null) { logStatistics.Stop(); logStatistics.DumpCounters().Wait(); } logStatistics = null; }
public SiloStatisticsManager(SiloInitializationParameters initializationParams, SerializationManager serializationManager) { MessagingStatisticsGroup.Init(true); MessagingProcessingStatisticsGroup.Init(); NetworkingStatisticsGroup.Init(true); ApplicationRequestsStatisticsGroup.Init(initializationParams.GlobalConfig.ResponseTimeout); SchedulerStatisticsGroup.Init(); StorageStatisticsGroup.Init(); TransactionsStatisticsGroup.Init(); runtimeStats = new RuntimeStatisticsGroup(); this.logStatistics = new LogStatistics(initializationParams.NodeConfig.StatisticsLogWriteInterval, true, serializationManager); this.MetricsTable = new SiloPerformanceMetrics(this.runtimeStats, initializationParams.NodeConfig); this.countersPublisher = new CountersStatistics(initializationParams.NodeConfig.StatisticsPerfCountersWriteInterval); initializationParams.ClusterConfig.OnConfigChange( "Defaults/LoadShedding", () => this.MetricsTable.NodeConfig = initializationParams.NodeConfig, false); }
public SiloStatisticsManager(SiloInitializationParameters initializationParams, SerializationManager serializationManager, ITelemetryProducer telemetryProducer, ILoggerFactory loggerFactory, IOptions <SiloOptions> siloOptions) { MessagingStatisticsGroup.Init(true); MessagingProcessingStatisticsGroup.Init(); NetworkingStatisticsGroup.Init(true); ApplicationRequestsStatisticsGroup.Init(initializationParams.ClusterConfig.Globals.ResponseTimeout); SchedulerStatisticsGroup.Init(loggerFactory); StorageStatisticsGroup.Init(); TransactionsStatisticsGroup.Init(); this.logger = new LoggerWrapper <SiloStatisticsManager>(loggerFactory); runtimeStats = new RuntimeStatisticsGroup(loggerFactory); this.logStatistics = new LogStatistics(initializationParams.NodeConfig.StatisticsLogWriteInterval, true, serializationManager, loggerFactory); this.MetricsTable = new SiloPerformanceMetrics(this.runtimeStats, loggerFactory, initializationParams.NodeConfig); this.countersPublisher = new CountersStatistics(initializationParams.NodeConfig.StatisticsPerfCountersWriteInterval, telemetryProducer, loggerFactory); initializationParams.ClusterConfig.OnConfigChange( "Defaults/LoadShedding", () => this.MetricsTable.NodeConfig = initializationParams.NodeConfig, false); this.siloOptions = siloOptions.Value; }
public SiloStatisticsManager( IOptions <SiloStatisticsOptions> statisticsOptions, IOptions <MonitoringStorageOptions> azureStorageOptions, ILocalSiloDetails siloDetails, SerializationManager serializationManager, ITelemetryProducer telemetryProducer, ILoggerFactory loggerFactory) { this.siloDetails = siloDetails; this.storageOptions = azureStorageOptions.Value; MessagingStatisticsGroup.Init(true); MessagingProcessingStatisticsGroup.Init(); NetworkingStatisticsGroup.Init(true); ApplicationRequestsStatisticsGroup.Init(); SchedulerStatisticsGroup.Init(loggerFactory); StorageStatisticsGroup.Init(); TransactionsStatisticsGroup.Init(); this.logger = loggerFactory.CreateLogger <SiloStatisticsManager>(); this.logStatistics = new LogStatistics(statisticsOptions.Value.LogWriteInterval, true, serializationManager, loggerFactory); this.countersPublisher = new CountersStatistics(statisticsOptions.Value.PerfCountersWriteInterval, telemetryProducer, loggerFactory); }
public void Logger_Stats_MessageSizeLimit() { const string testName = "Logger_Stats_MessageSizeLimit"; TestLogConsumer logConsumer = new TestLogConsumer(output); TraceLogger.LogConsumers.Add(logConsumer); TraceLogger logger1 = TraceLogger.GetLogger(testName); const string StatsCounterBaseName = "LoggerTest.Stats.Size"; var createdCounters = new List <string>(); try { for (int i = 1; i <= 1000; i++) { string name = StatsCounterBaseName + "." + i; StatisticName counterName = new StatisticName(name); CounterStatistic ctr = CounterStatistic.FindOrCreate(counterName); ctr.IncrementBy(i); createdCounters.Add(name); } LogStatistics statsLogger = new LogStatistics(TimeSpan.Zero, true); statsLogger.DumpCounters().Wait(); int count = logConsumer.GetEntryCount((int)ErrorCode.PerfCounterDumpAll); output.WriteLine(count + " stats log message entries written"); Assert.IsTrue(count > 1, "Should be some stats log message entries - saw " + count); Assert.AreEqual(0, logConsumer.GetEntryCount((int)ErrorCode.Logger_LogMessageTruncated), "Should not see any 'Message truncated' message"); } finally { createdCounters.ForEach(name => CounterStatistic.Delete(name)); } }
internal void Stop() { if (runtimeStats != null) { runtimeStats.Stop(); } runtimeStats = null; if (MetricsTable != null) { MetricsTable.Dispose(); } MetricsTable = null; if (perfCountersPublisher != null) { perfCountersPublisher.Stop(); } perfCountersPublisher = null; if (logStatistics != null) { logStatistics.Stop(); logStatistics.DumpCounters().Wait(); } logStatistics = null; }
public SiloStatisticsManager( NodeConfiguration nodeConfiguration, ILocalSiloDetails siloDetails, SerializationManager serializationManager, ITelemetryProducer telemetryProducer, IHostEnvironmentStatistics hostEnvironmentStatistics, IAppEnvironmentStatistics appEnvironmentStatistics, ILoggerFactory loggerFactory, IOptions <MessagingOptions> messagingOptions) { this.siloDetails = siloDetails; MessagingStatisticsGroup.Init(true); MessagingProcessingStatisticsGroup.Init(); NetworkingStatisticsGroup.Init(true); ApplicationRequestsStatisticsGroup.Init(messagingOptions.Value.ResponseTimeout); SchedulerStatisticsGroup.Init(loggerFactory); StorageStatisticsGroup.Init(); TransactionsStatisticsGroup.Init(); this.logger = loggerFactory.CreateLogger <SiloStatisticsManager>(); this.hostEnvironmentStatistics = hostEnvironmentStatistics; this.logStatistics = new LogStatistics(nodeConfiguration.StatisticsLogWriteInterval, true, serializationManager, loggerFactory); this.MetricsTable = new SiloPerformanceMetrics(this.hostEnvironmentStatistics, appEnvironmentStatistics, loggerFactory, nodeConfiguration); this.countersPublisher = new CountersStatistics(nodeConfiguration.StatisticsPerfCountersWriteInterval, telemetryProducer, loggerFactory); }
public void Write(IList <LogEntity> logs) { #region 写日志主体 var log_collection = MongoDataBase.GetCollection <LogEntity>(); log_collection.InsertManyAsync(logs); #endregion #region 写Tag List <LogTag> tags = new List <LogTag>(); foreach (var log in logs) { if (log.Tags != null) { foreach (var tag in log.Tags) { tags.Add(new LogTag { LogId = log._id, Tag = Utils.BKDRHash(tag), Time = log.Time }); } } } if (tags.Count > 0) { var tag_collection = MongoDataBase.GetCollection <LogTag>(); tag_collection.InsertManyAsync(tags); //foreach (var item in tags) //{ // var result = tag_collection.InsertOneAsync(item); //} } #endregion List <LogStatistics> lss = new List <LogStatistics>(); var app_grp = from a in logs group a by a.AppId into g select g; long statisticsTime = Utils.GetTimeStamp(DateTime.Now); foreach (var grp in app_grp) { int debug = grp.Count(x => x.Level == LogLevel.Debug); int info = grp.Count(x => x.Level == LogLevel.Info); int warn = grp.Count(x => x.Level == LogLevel.Warn); int error = grp.Count(x => x.Level == LogLevel.Error); LogStatistics ls = new LogStatistics(); ls.AppId = grp.Key; ls.Debug = debug; ls.Info = info; ls.Warn = warn; ls.Error = error; ls.Time = statisticsTime; lss.Add(ls); } var log_ls_collection = MongoDataBase.GetCollection <LogStatistics>(); log_ls_collection.InsertManyAsync(lss); }
public void WriteHtml(TextWriter writer, LogStatistics stats) { var summaryPage = new SummaryPage(stats, Theme); var playerPage = new PlayerDetailPage(stats.PlayerData, gw2ApiData, Theme); var rotationPage = new SquadRotationPage(stats.PlayerData, gw2ApiData, Theme); var defaultPage = summaryPage; // Has be a top-level page, not a subpage IEnumerable <Page> bossPages = stats.FullFightBossDamageData.Select(x => new BossPage(x, Theme)); var sections = new[] { new Section("General", summaryPage, playerPage, rotationPage), new Section("Bosses", bossPages.ToArray()), new Section("Scratch data", //new BuffDataPage(stats.BuffData, Theme), new EventDataPage(stats.EventCounts, Theme), //new AgentListPage(stats.Agents, Theme), new SkillListPage(stats.Skills, Theme)), }; string result = (stats.EncounterResult == EncounterResult.Success ? "Success" : stats.EncounterResult == EncounterResult.Failure ? "Failure" : "Result unknown"); writer.WriteLine($@"<!DOCTYPE html> <html> <head> <title>{stats.EncounterName}</title> <meta charset='utf-8'> <meta name='viewport' content='width=device-width, initial-scale=1'> <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css'> <!-- <link rel='stylesheet' href='https://jenil.github.io/bulmaswatch/darkly/bulmaswatch.min.css'> --> <script defer src='https://use.fontawesome.com/releases/v5.1.0/js/all.js'></script> <script defer src='https://cdn.plot.ly/plotly-latest.min.js'></script> <script> function openTab(tabLink) {{ var tabs = document.getElementsByClassName('scratch-tab'); for (var i = 0; i < tabs.length; i++) {{ tabs[i].classList.add('is-hidden'); }} var tabLinks = document.getElementsByClassName('scratch-tablink'); for (var i = 0; i < tabLinks.length; i++) {{ tabLinks[i].classList.remove('is-active'); }} tabLink.classList.add('is-active'); var tabName = 'tab-' + tabLink.id.substring('tablink-'.length); document.getElementById(tabName).classList.remove('is-hidden'); }} </script>" ); foreach (var section in sections) { foreach (var page in section.Pages) { WritePageHead(writer, page); } } writer.WriteLine($@" <style>" ); foreach (var section in sections) { foreach (var page in section.Pages) { WritePageStyle(writer, page); } } writer.WriteLine($@" </style> </head> <body> <section class='section'> <div class='container'> <h1 class='title'>{stats.EncounterName}</h1> <div class='subtitle'>{result} in {MillisecondsToReadableFormat(stats.FightTimeMs)}</div> <div class='columns'>"); var pageNames = AssignPageNames(sections); WriteMenu(writer, pageNames, sections, defaultPage); foreach (var section in sections) { foreach (var page in section.Pages) { WritePage(writer, pageNames, page, page == defaultPage); } } writer.WriteLine($@" </div> </div> </section> <footer class='footer'> <div class='container'> <div class='content has-text-centered'> <p> Generated by the Scratch EVTC Parser. </p> <p> Time of recording {stats.FightStart.ToUniversalTime():yyyy-MM-dd HH:mm UTC} <br> Recorded by {stats.LogAuthor.Name} <br> EVTC version {stats.LogVersion} </p> </div> </div> </footer> </body> </html>"); }
internal void Stop() { if (runtimeStats != null) runtimeStats.Stop(); runtimeStats = null; if (MetricsTable != null) MetricsTable.Dispose(); MetricsTable = null; if (perfCountersPublisher != null) perfCountersPublisher.Stop(); perfCountersPublisher = null; if (logStatistics != null) { logStatistics.Stop(); logStatistics.DumpCounters().Wait(); } logStatistics = null; }
public SummaryPage(LogStatistics stats, ITheme theme) : base("Summary", true, theme) { this.stats = stats; }