Esempio n. 1
0
        public void ModuleKeepsIntervalSteadyWhenMetricsAreLongToCollect()
        {
            var sentItems = new List <ITelemetry>();
            var channel   = new StubTelemetryChannel()
            {
                OnSend = (item) => { sentItems.Add(item); }
            };
            var config = new TelemetryConfiguration();

            config.TelemetryChannel   = channel;
            config.InstrumentationKey = "dummy";
            var startTime = DateTimeOffset.Now;

            AggregateMetricsTelemetryModule module = new AggregateMetricsTelemetryModule();

            module.FlushInterval = TimeSpan.FromSeconds(6);

            module.Initialize(config);

            var client = new TelemetryClient(config);

            client.Gauge("test", () => { Thread.Sleep(TimeSpan.FromSeconds(1)); return(10); });

            Thread.Sleep(TimeSpan.FromSeconds(15));

            Assert.AreEqual(2, sentItems.Count);
            var metric0 = (MetricTelemetry)sentItems[0];
            var metric1 = (MetricTelemetry)sentItems[1];

            var timeDelta = metric1.Timestamp - metric0.Timestamp - TimeSpan.FromSeconds(6);

            Assert.IsTrue(timeDelta.TotalMilliseconds < 50, "Actual: " + timeDelta);
        }
Esempio n. 2
0
        public void SimpleModuleUsage()
        {
            var sentItems = new List <ITelemetry>();
            var channel   = new StubTelemetryChannel()
            {
                OnSend = (item) => { sentItems.Add(item); }
            };
            var config = new TelemetryConfiguration();

            config.TelemetryChannel   = channel;
            config.InstrumentationKey = "dummy";

            AggregateMetricsTelemetryModule module = new AggregateMetricsTelemetryModule();

            module.FlushInterval = TimeSpan.FromSeconds(6);

            module.Initialize(config);

            var client = new TelemetryClient(config);

            client.Gauge("test", () => { return(10); });

            Thread.Sleep(TimeSpan.FromSeconds(7));

            Assert.AreEqual(1, sentItems.Count);
            var metric = (MetricTelemetry)sentItems[0];

            Assert.AreEqual("test", metric.Name);
            Assert.AreEqual(10, metric.Value);
        }
        static void Main(string[] args)
        {
            var telemetryClient = new TelemetryClient();


            //API one:

            //telemetryClient.RegisterAggregateMetric("MetricsGenerator", "City", percentileCalculation: PercentileCalculation.OrderByLargest);

            //for (double i = -50; i < 10000000; i += new Random().NextDouble())
            //{
            //    telemetryClient.TrackAggregateMetric("MetricsGenerator", i, "Seattle");
            //    telemetryClient.TrackAggregateMetric("MetricsGenerator", i, "New York");
            //}


            //API two:

            Random rand = new Random();

            telemetryClient.Gauge("active processes", () => { return(rand.Next(10, 15)); });

            var counter = telemetryClient.Counter("# of items");

            var meter  = telemetryClient.Meter("rate of items");
            var aMeter = telemetryClient.Meter("rate of char a");

            while (true)
            {
                var queue = new ConcurrentQueue <char>();
                var a     = Console.ReadKey().KeyChar;
                queue.Enqueue(a);
                counter.Increment();
                meter.Mark();
                if (a == 'a')
                {
                    aMeter.Mark();
                }
                else
                {
                    aMeter.Mark(0);
                }

                new Task(() =>
                {
                    Thread.Sleep(100);
                    char ch;
                    if (queue.TryDequeue(out ch))
                    {
                        counter.Decrement();
                        Console.Write(ch);
                    }
                }).Start();
            }
        }
Esempio n. 4
0
        public void ModuleWillKeepIntervalWithThreadsStarvation()
        {
            var sentItems = new List <ITelemetry>();
            var channel   = new StubTelemetryChannel()
            {
                OnSend = (item) => { sentItems.Add(item); }
            };
            var config = new TelemetryConfiguration();

            config.TelemetryChannel   = channel;
            config.InstrumentationKey = "dummy";

            AggregateMetricsTelemetryModule module = new AggregateMetricsTelemetryModule();

            module.FlushInterval = TimeSpan.FromSeconds(6);

            module.Initialize(config);

            var startTime = DateTime.Now;

            var client = new TelemetryClient(config);

            client.Gauge("test", () => { return(10); });

            int workerThread;
            int ioCompletionThread;

            ThreadPool.GetMaxThreads(out workerThread, out ioCompletionThread);
            try
            {
                ThreadPool.SetMaxThreads(10, 10);
                for (int i = 0; i < 50; i++)
                {
                    new Task(() => {
                        Debug.WriteLine("task started");
                        Thread.Sleep(TimeSpan.FromSeconds(10));
                        Debug.WriteLine("task finihed");
                    }).Start();
                }

                Thread.Sleep(TimeSpan.FromSeconds(7));

                Assert.AreEqual(1, sentItems.Count);
                var metric = (MetricTelemetry)sentItems[0];
                Assert.AreEqual("test", metric.Name);
                Assert.AreEqual(10, metric.Value);
                Assert.IsTrue(metric.Timestamp.Subtract(startTime).Seconds <= 6, "Actual: " + metric.Timestamp.Subtract(startTime).Seconds);
                Assert.IsTrue(metric.Timestamp.Subtract(startTime).Seconds >= 5, "Actual: " + metric.Timestamp.Subtract(startTime).Seconds);
            }
            finally
            {
                ThreadPool.SetMaxThreads(workerThread, ioCompletionThread);
            }
        }
Esempio n. 5
0
        public void SimpleGaugeUsageExample()
        {
            TelemetryConfiguration configuraiton = new TelemetryConfiguration();

            TelemetryClient client = new TelemetryClient(configuraiton);

            client.Context.Properties["a"] = "b";

            client.Gauge("test", () => { return(10); });
            var counters = configuraiton.GetCounters();

            Assert.AreEqual(1, counters.Count);

            MetricTelemetry metric = counters[0].GetValueAndReset();

            Assert.AreEqual(10, metric.Value);
            Assert.AreEqual(null, metric.Count);
            Assert.AreEqual("test", metric.Name);
            Assert.AreEqual("b", metric.Context.Properties["a"]);
        }