예제 #1
0
        public void Run(IConfigurationRoot configuration)
        {
            var sink = ChooseSink();

            var metricsWriterSettings    = configuration.GetSection("MetricsWriter").Get <MetricsWriterSettings>();
            var metricsCollectorSettings = configuration.GetSection("MetricsCollector").Get <MetricsCollectorSettings>();

            if (sink is IDatabasePlugin databasePlugin)
            {
                var databaseConnectionSettings = configuration.GetSection("Database:Connection").Get <DatabaseConnectionSettings>();
                var databaseTablesSettings     = configuration.GetSection("Database:Tables").Get <DatabaseTablesSettings>();
                databasePlugin.Initialize(databaseConnectionSettings, databaseTablesSettings, metricsWriterSettings);
            }

            using (var metrics = new MetricsCollector(sink, metricsCollectorSettings))
            {
                Console.WriteLine("Press some keys; enter to exit");

                metrics.RegisterThresholds("latency", new int[] { 0, 50, 75, 100, 1000, 2000, 10000 });
                var stopwatch = new Stopwatch();

                char key;
                do
                {
                    stopwatch.Start();
                    key = Console.ReadKey(true).KeyChar;
                    stopwatch.Stop();

                    metrics.IncrementCounter(key.ToString());
                    metrics.IncrementBucket("latency", stopwatch.ElapsedMilliseconds);
                    metrics.Event(key.ToString());

                    // letters a-z: lowercase is start of interval, uppercase is end.
                    if (key >= 'a' && key <= 'z')
                    {
                        metrics.StartInterval("session", key.ToString());
                    }
                    else if (key >= 'A' && key <= 'Z')
                    {
                        metrics.EndInterval("session", key.ToString().ToLower());
                    }

                    stopwatch.Reset();
                } while (key != '\r' && key != '\n');
            }

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
예제 #2
0
 void Run(string sessionId)
 {
     using (metrics.Profile(sessionId, "block1"))
     {
         Thread.Sleep(23);
         for (int i = 0; i < 50; i++)
         {
             metrics.StartInterval(sessionId, "block2");
             Thread.Sleep(21);
             DoSomeStuff(i, sessionId);
             metrics.EndInterval(sessionId, "block2");
             Thread.Sleep(11);
         }
     }
 }
예제 #3
0
        public void Tests()
        {
            var sink          = new DictionarySink();
            var clock         = new DummyClock("12:00:00");
            var windowSize    = TimeSpan.FromSeconds(1);
            var flushInterval = TimeSpan.FromSeconds(5);

            var metrics = new MetricsCollector(sink, clock, windowSize, flushInterval, false);

            using (metrics.Profile("session1", "block1"))
            {
                Thread.Sleep(20);
            }

            for (int i = 0; i < 100; i++)
            {
                metrics.StartInterval("session1", "block2");
                metrics.EndInterval("session1", "block2");
            }
        }