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);
 }
Example #3
0
 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);
        }
Example #5
0
        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;
        }
Example #6
0
 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);
 }
Example #7
0
        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));
            }
        }
Example #8
0
 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);
        }
Example #11
0
        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>");
        }
Example #12
0
 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;
 }
Example #13
0
 public SummaryPage(LogStatistics stats, ITheme theme) : base("Summary", true, theme)
 {
     this.stats = stats;
 }