예제 #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);
        }
예제 #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);
        }
예제 #3
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);
            }
        }