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); }
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); }
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); } }