public void Poll_GeneratesExpectedEvents() { var source = new CLRRuntimeSource(); var listener = source.Source as DiagnosticListener; var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new TestObserver(options, stats, tags, null); listener.Subscribe(observer); source.Poll(); Assert.Equal(2, observer.Events.Count); Assert.Equal(2, observer.Args.Count); Assert.Equal(CLRRuntimeSource.HEAP_EVENT, observer.Events[0]); Assert.Equal(CLRRuntimeSource.THREADS_EVENT, observer.Events[1]); var heapMetrics = (CLRRuntimeSource.HeapMetrics)observer.Args[0]; Assert.NotEqual(0, heapMetrics.TotalMemory); Assert.NotNull(heapMetrics.CollectionCounts); Assert.NotEqual(0, heapMetrics.CollectionCounts.Count); var threadMetrics = (CLRRuntimeSource.ThreadMetrics)observer.Args[1]; Assert.NotEqual(0, threadMetrics.AvailableThreadCompletionPort); Assert.NotEqual(0, threadMetrics.AvailableThreadPoolWorkers); Assert.NotEqual(0, threadMetrics.MaxThreadCompletionPort); Assert.NotEqual(0, threadMetrics.MaxThreadPoolWorkers); }
public void HandleStopEvent_RecordsStats() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); var req = GetHttpRequestMessage(); Activity act = new Activity("Test"); act.Start(); Thread.Sleep(1000); act.SetEndTime(DateTime.UtcNow); observer.HandleStopEvent(act, req, HttpStatusCode.InternalServerError); observer.HandleStopEvent(act, req, HttpStatusCode.OK); var reqData = stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.time")); var aggData1 = MetricsHelpers.SumWithTags(reqData) as IDistributionData; Assert.InRange(aggData1.Mean, 990.0, 1025.0); Assert.InRange(aggData1.Max, 990.0, 1025.0); reqData = stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.count")); var aggData2 = MetricsHelpers.SumWithTags(reqData) as ISumDataLong; Assert.Equal(2, aggData2.Sum); act.Stop(); }
public void HandleExceptionEvent_RecordsStats() { var options = new MetricsOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientCoreObserver(options, stats, tags, null); var req = GetHttpRequestMessage(); var resp = GetHttpResponseMessage(HttpStatusCode.InternalServerError); Activity act = new Activity("Test"); act.Start(); Thread.Sleep(1000); act.SetEndTime(DateTime.UtcNow); observer.HandleExceptionEvent(act, req); observer.HandleExceptionEvent(act, req); var reqData = stats.ViewManager.GetView(ViewName.Create("http.client.requests")); var aggData1 = reqData.SumWithTags() as IDistributionData; Assert.InRange(aggData1.Mean, 995.0, 1005.0); Assert.InRange(aggData1.Max, 995.0, 1005.0); reqData = stats.ViewManager.GetView(ViewName.Create("http.client.requests.count")); var aggData2 = reqData.SumWithTags() as ISumDataLong; Assert.Equal(2, aggData2.Sum); act.Stop(); }
public void HandleStopEvent_RecordsStats() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new AspNetCoreHostingObserver(options, stats, tags, null); var context = GetHttpRequestMessage(); var exceptionHandlerFeature = new ExceptionHandlerFeature() { Error = new ArgumentNullException() }; context.Features.Set <IExceptionHandlerFeature>(exceptionHandlerFeature); context.Response.StatusCode = 500; Activity act = new Activity("Test"); act.Start(); Thread.Sleep(1000); act.SetEndTime(DateTime.UtcNow); observer.HandleStopEvent(act, context); observer.HandleStopEvent(act, context); var reqData = stats.ViewManager.GetView(ViewName.Create("http.server.request.time")); var aggData1 = reqData.SumWithTags() as IDistributionData; Assert.Equal(2, aggData1.Count); Assert.True(aggData1.Mean > 1000.00); Assert.True(aggData1.Max > 1000.00); act.Stop(); }
public void Constructor_RegistersExpectedViews() { var options = new MetricsOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new AspNetCoreHostingObserver(options, stats, tags, null); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("http.server.requests"))); }
public void HandleThreadsEvent_RecordsValues() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new CLRRuntimeObserver(options, stats, tags, null); CLRRuntimeSource.ThreadMetrics metrics = new CLRRuntimeSource.ThreadMetrics(100, 100, 200, 200); observer.HandleThreadsEvent(metrics); var live = stats.ViewManager.GetView(ViewName.Create("clr.threadpool.active")); var aggData = MetricsHelpers.SumWithTags(live) as IMeanData; Assert.Equal(100, aggData.Mean); Assert.Equal(100, aggData.Min); Assert.Equal(100, aggData.Max); aggData = MetricsHelpers.SumWithTags(live, new List <ITagValue>() { TagValue.Create("worker") }) as IMeanData; Assert.Equal(100, aggData.Mean); Assert.Equal(100, aggData.Min); Assert.Equal(100, aggData.Max); aggData = MetricsHelpers.SumWithTags(live, new List <ITagValue>() { TagValue.Create("completionPort") }) as IMeanData; Assert.Equal(100, aggData.Mean); Assert.Equal(100, aggData.Min); Assert.Equal(100, aggData.Max); var avail = stats.ViewManager.GetView(ViewName.Create("clr.threadpool.avail")); aggData = MetricsHelpers.SumWithTags(avail) as IMeanData; Assert.Equal(100, aggData.Mean); Assert.Equal(100, aggData.Min); Assert.Equal(100, aggData.Max); aggData = MetricsHelpers.SumWithTags(avail, new List <ITagValue>() { TagValue.Create("worker") }) as IMeanData; Assert.Equal(100, aggData.Mean); Assert.Equal(100, aggData.Min); Assert.Equal(100, aggData.Max); aggData = MetricsHelpers.SumWithTags(avail, new List <ITagValue>() { TagValue.Create("completionPort") }) as IMeanData; Assert.Equal(100, aggData.Mean); Assert.Equal(100, aggData.Min); Assert.Equal(100, aggData.Max); }
public void Constructor_RegistersExpectedViews() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.time"))); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("http.desktop.client.request.count"))); }
public void ProcessEvent_IgnoresNulls() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new CLRRuntimeObserver(options, stats, tags, null); observer.ProcessEvent("foobar", null); observer.ProcessEvent(CLRRuntimeObserver.HEAP_EVENT, null); observer.ProcessEvent(CLRRuntimeObserver.THREADS_EVENT, null); }
public void Constructor_RegistersExpectedViews() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new CLRRuntimeObserver(options, stats, tags, null); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("clr.memory.used"))); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("clr.gc.collections"))); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("clr.threadpool.active"))); Assert.NotNull(stats.ViewManager.GetView(ViewName.Create("clr.threadpool.avail"))); }
public void ShouldIgnore_ReturnsExpected() { var options = new MetricsOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var obs = new HttpClientCoreObserver(options, stats, tags, null); Assert.True(obs.ShouldIgnoreRequest("/api/v2/spans")); Assert.True(obs.ShouldIgnoreRequest("/v2/apps/foobar/permissions")); Assert.True(obs.ShouldIgnoreRequest("/v2/apps/barfoo/permissions")); Assert.False(obs.ShouldIgnoreRequest("/api/test")); Assert.False(obs.ShouldIgnoreRequest("/v2/apps")); }
public void ProcessEvent_IgnoresNulls() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new AspNetCoreHostingObserver(options, stats, tags, null); observer.ProcessEvent("foobar", null); observer.ProcessEvent(AspNetCoreHostingObserver.STOP_EVENT, null); Activity act = new Activity("Test"); act.Start(); observer.ProcessEvent(AspNetCoreHostingObserver.STOP_EVENT, null); act.Stop(); }
public void GetTagContext_ReturnsExpected() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientDesktopObserver(options, stats, tags, null); var req = GetHttpRequestMessage(); var tagContext = observer.GetTagContext(req, HttpStatusCode.InternalServerError); var tagValues = tagContext.ToList(); tagValues.Contains(Tag.Create(TagKey.Create("clientName"), TagValue.Create("localhost:5555"))); tagValues.Contains(Tag.Create(TagKey.Create("uri"), TagValue.Create("/foo/bar"))); tagValues.Contains(Tag.Create(TagKey.Create("status"), TagValue.Create("500"))); tagValues.Contains(Tag.Create(TagKey.Create("method"), TagValue.Create("GET"))); }
public void ProcessEvent_IgnoresNulls() { var options = new MetricsOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientCoreObserver(options, stats, tags, null); observer.ProcessEvent("foobar", null); observer.ProcessEvent(HttpClientCoreObserver.STOP_EVENT, null); Activity act = new Activity("Test"); act.Start(); observer.ProcessEvent(HttpClientCoreObserver.STOP_EVENT, null); observer.ProcessEvent(HttpClientCoreObserver.EXCEPTION_EVENT, null); act.Stop(); }
public void GetStatusCode_ReturnsExpected() { var options = new MetricsOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new HttpClientCoreObserver(options, stats, tags, null); var message = GetHttpResponseMessage(HttpStatusCode.OK); string status = observer.GetStatusCode(message, default(TaskStatus)); Assert.Equal("200", status); status = observer.GetStatusCode(null, TaskStatus.Canceled); Assert.Equal("CLIENT_CANCELED", status); status = observer.GetStatusCode(null, TaskStatus.Faulted); Assert.Equal("CLIENT_FAULT", status); status = observer.GetStatusCode(null, TaskStatus.RanToCompletion); Assert.Equal("CLIENT_ERROR", status); }
public void ShouldIgnore_ReturnsExpected() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var obs = new AspNetCoreHostingObserver(options, stats, tags, null); Assert.True(obs.ShouldIgnoreRequest("/cloudfoundryapplication/info")); Assert.True(obs.ShouldIgnoreRequest("/cloudfoundryapplication/health")); Assert.True(obs.ShouldIgnoreRequest("/foo/bar/image.png")); Assert.True(obs.ShouldIgnoreRequest("/foo/bar/image.gif")); Assert.True(obs.ShouldIgnoreRequest("/favicon.ico")); Assert.True(obs.ShouldIgnoreRequest("/foo.js")); Assert.True(obs.ShouldIgnoreRequest("/foo.css")); Assert.True(obs.ShouldIgnoreRequest("/javascript/foo.js")); Assert.True(obs.ShouldIgnoreRequest("/css/foo.css")); Assert.True(obs.ShouldIgnoreRequest("/foo.html")); Assert.True(obs.ShouldIgnoreRequest("/html/foo.html")); Assert.False(obs.ShouldIgnoreRequest("/api/test")); Assert.False(obs.ShouldIgnoreRequest("/v2/apps")); }
public void GetException_ReturnsExpected() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new AspNetCoreHostingObserver(options, stats, tags, null); var context = GetHttpRequestMessage(); string exception = observer.GetException(context); Assert.Equal("None", exception); context = GetHttpRequestMessage(); var exceptionHandlerFeature = new ExceptionHandlerFeature() { Error = new ArgumentNullException() }; context.Features.Set <IExceptionHandlerFeature>(exceptionHandlerFeature); exception = observer.GetException(context); Assert.Equal("ArgumentNullException", exception); }
public void GetTagContext_ReturnsExpected() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new AspNetCoreHostingObserver(options, stats, tags, null); var context = GetHttpRequestMessage(); var exceptionHandlerFeature = new ExceptionHandlerFeature() { Error = new ArgumentNullException() }; context.Features.Set <IExceptionHandlerFeature>(exceptionHandlerFeature); context.Response.StatusCode = 404; var tagContext = observer.GetTagContext(context); var tagValues = tagContext.ToList(); tagValues.Contains(Tag.Create(TagKey.Create("exception"), TagValue.Create("ArgumentNullException"))); tagValues.Contains(Tag.Create(TagKey.Create("uri"), TagValue.Create("/foobar"))); tagValues.Contains(Tag.Create(TagKey.Create("status"), TagValue.Create("404"))); tagValues.Contains(Tag.Create(TagKey.Create("method"), TagValue.Create("GET"))); }
public void HandleHeapEvent_RecordsValues() { var options = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var tags = new OpenCensusTags(); var observer = new CLRRuntimeObserver(options, stats, tags, null); CLRRuntimeSource.HeapMetrics metrics = new CLRRuntimeSource.HeapMetrics(1000, new List <long>() { 10, 20, 30 }); observer.HandleHeapEvent(metrics); var memUsedViewData = stats.ViewManager.GetView(ViewName.Create("clr.memory.used")); var aggData = MetricsHelpers.SumWithTags(memUsedViewData) as IMeanData; Assert.Equal(1000, aggData.Mean); Assert.Equal(1000, aggData.Max); Assert.Equal(1000, aggData.Min); var gcViewData = stats.ViewManager.GetView(ViewName.Create("clr.gc.collections")); var aggData2 = MetricsHelpers.SumWithTags(gcViewData) as ISumDataLong; Assert.Equal(60, aggData2.Sum); aggData2 = MetricsHelpers.SumWithTags(gcViewData, new List <ITagValue>() { TagValue.Create("gen0") }) as ISumDataLong; Assert.Equal(10, aggData2.Sum); aggData2 = MetricsHelpers.SumWithTags(gcViewData, new List <ITagValue>() { TagValue.Create("gen1") }) as ISumDataLong; Assert.Equal(20, aggData2.Sum); aggData2 = MetricsHelpers.SumWithTags(gcViewData, new List <ITagValue>() { TagValue.Create("gen2") }) as ISumDataLong; Assert.Equal(30, aggData2.Sum); metrics = new CLRRuntimeSource.HeapMetrics(5000, new List <long>() { 15, 25, 30 }); observer.HandleHeapEvent(metrics); memUsedViewData = stats.ViewManager.GetView(ViewName.Create("clr.memory.used")); aggData = MetricsHelpers.SumWithTags(memUsedViewData) as IMeanData; Assert.Equal((5000 + 1000) / 2, aggData.Mean); Assert.Equal(5000, aggData.Max); Assert.Equal(1000, aggData.Min); gcViewData = stats.ViewManager.GetView(ViewName.Create("clr.gc.collections")); aggData2 = MetricsHelpers.SumWithTags(gcViewData) as ISumDataLong; Assert.Equal(70, aggData2.Sum); aggData2 = MetricsHelpers.SumWithTags(gcViewData, new List <ITagValue>() { TagValue.Create("gen0") }) as ISumDataLong; Assert.Equal(15, aggData2.Sum); aggData2 = MetricsHelpers.SumWithTags(gcViewData, new List <ITagValue>() { TagValue.Create("gen1") }) as ISumDataLong; Assert.Equal(25, aggData2.Sum); aggData2 = MetricsHelpers.SumWithTags(gcViewData, new List <ITagValue>() { TagValue.Create("gen2") }) as ISumDataLong; Assert.Equal(30, aggData2.Sum); }