public void ParseTags_ReturnsExpected()
        {
            var opts  = new MetricsOptions();
            var stats = new OpenCensusStats();

            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointOwinMiddleware(null, ep);

            var context1 = CreateRequest("GET", "/metrics/Foo.Bar.Class", "foo=key:value");
            var result   = middle.ParseTags(context1.Request.Query);

            Assert.NotNull(result);
            Assert.Empty(result);

            var context2 = CreateRequest("GET", "/metrics/Foo.Bar.Class", "tag=key:value");

            result = middle.ParseTags(context2.Request.Query);
            Assert.NotNull(result);
            Assert.Contains(new KeyValuePair <string, string>("key", "value"), result);

            var context3 = CreateRequest("GET", "/metrics/Foo.Bar.Class", "tag=key:value&foo=key:value&tag=key1:value1");

            result = middle.ParseTags(context3.Request.Query);
            Assert.NotNull(result);
            Assert.Contains(new KeyValuePair <string, string>("key", "value"), result);
            Assert.Contains(new KeyValuePair <string, string>("key1", "value1"), result);
            Assert.Equal(2, result.Count);

            var context4 = CreateRequest("GET", "/metrics/Foo.Bar.Class", "tag=key:value&foo=key:value&tag=key:value");

            result = middle.ParseTags(context4.Request.Query);
            Assert.NotNull(result);
            Assert.Contains(new KeyValuePair <string, string>("key", "value"), result);
            Assert.Single(result);
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }
Пример #4
0
        public void Invoke_WithNullMetricsRequest_ReturnsExpected()
        {
            var opts  = new MetricsEndpointOptions();
            var stats = new OpenCensusStats();

            SetupStats(stats);

            var ep     = new MetricsEndpoint(opts, stats);
            var result = ep.Invoke(null);

            Assert.NotNull(result);
            Assert.IsType <MetricsListNamesResponse>(result);
            var resp = result as MetricsListNamesResponse;

            Assert.NotEmpty(resp.Names);
            Assert.Contains("http.server.requests", resp.Names);
            Assert.Contains("jvm.memory.used", resp.Names);
            Assert.Equal(2, resp.Names.Count);

            opts  = new MetricsEndpointOptions();
            stats = new OpenCensusStats();

            ep     = new MetricsEndpoint(opts, stats);
            result = ep.Invoke(null);
            Assert.NotNull(result);

            Assert.IsType <MetricsListNamesResponse>(result);
            resp = result as MetricsListNamesResponse;
            Assert.Empty(resp.Names);
        }
Пример #5
0
        public async void HandleMetricsRequestAsync_GetSpecificExistingMetric_ReturnsExpected()
        {
            var opts          = new MetricsEndpointOptions();
            var mopts         = TestHelpers.GetManagementOptions(opts);
            var stats         = new OpenCensusStats();
            var tagsComponent = new TagsComponent();
            var tagger        = tagsComponent.Tagger;
            var ep            = new MetricsEndpoint(opts, stats);

            SetupTestView(stats);

            var middle = new MetricsEndpointMiddleware(null, ep, mopts);

            var context = CreateRequest("GET", "/cloudfoundryapplication/metrics/test.test", "?tag=a:v1");

            await middle.HandleMetricsRequestAsync(context);

            Assert.Equal(200, context.Response.StatusCode);

            context.Response.Body.Seek(0, SeekOrigin.Begin);
            StreamReader rdr  = new StreamReader(context.Response.Body);
            string       json = await rdr.ReadToEndAsync();

            Assert.Equal("{\"name\":\"test.test\",\"measurements\":[{\"statistic\":\"TOTAL\",\"value\":45.0}],\"availableTags\":[{\"tag\":\"a\",\"values\":[\"v1\"]},{\"tag\":\"b\",\"values\":[\"v1\"]},{\"tag\":\"c\",\"values\":[\"v1\"]}]}", json);
        }
Пример #6
0
        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();
        }
Пример #7
0
        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();
        }
Пример #8
0
        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")));
        }
Пример #9
0
        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);
        }
Пример #10
0
        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")));
        }
Пример #11
0
        public void Invoke_WithMetricsRequest_ReturnsExpected()
        {
            var opts          = new MetricsEndpointOptions();
            var stats         = new OpenCensusStats();
            var tagsComponent = new TagsComponent();
            var tagger        = tagsComponent.Tagger;
            var ep            = new MetricsEndpoint(opts, stats);

            var testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Bytes);

            SetupTestView(stats, Sum.Create(), testMeasure, "test.test1");

            var context1 = tagger
                           .EmptyBuilder
                           .Put(TagKey.Create("a"), TagValue.Create("v1"))
                           .Put(TagKey.Create("b"), TagValue.Create("v1"))
                           .Put(TagKey.Create("c"), TagValue.Create("v1"))
                           .Build();

            long allKeyssum = 0;

            for (var i = 0; i < 10; i++)
            {
                allKeyssum += i;
                stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context1);
            }

            var alltags = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("a", "v1"),
                new KeyValuePair <string, string>("b", "v1"),
                new KeyValuePair <string, string>("c", "v1")
            };

            var req  = new MetricsRequest("test.test1", alltags);
            var resp = ep.Invoke(req) as MetricsResponse;

            Assert.NotNull(resp);

            Assert.Equal("test.test1", resp.Name);

            Assert.NotNull(resp.Measurements);
            Assert.Single(resp.Measurements);
            var sample = resp.Measurements[0];

            Assert.Equal(MetricStatistic.TOTAL, sample.Statistic);
            Assert.Equal(allKeyssum, sample.Value);

            Assert.NotNull(resp.AvailableTags);
            Assert.Equal(3, resp.AvailableTags.Count);

            req  = new MetricsRequest("foo.bar", alltags);
            resp = ep.Invoke(req) as MetricsResponse;
            Assert.Null(resp);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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")));
        }
Пример #14
0
        public void GetTagValuesInColumnOrder_ReturnsExpected()
        {
            var tags = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("foo", "bar"),
                new KeyValuePair <string, string>("aaa", "bbb")
            };

            var columns = new List <ITagKey>()
            {
                TagKey.Create("foo"),
                TagKey.Create("aaa")
            };

            var opts   = new MetricsEndpointOptions();
            var stats  = new OpenCensusStats();
            var ep     = new MetricsEndpoint(opts, stats);
            var result = ep.GetTagValuesInColumnOrder(columns, tags);

            Assert.NotNull(result);
            Assert.Equal(2, result.Count);
            Assert.Equal(TagValue.Create("bar"), result[0]);
            Assert.Equal(TagValue.Create("bbb"), result[1]);

            // Invalid tagkey provided
            columns = new List <ITagKey>()
            {
                TagKey.Create("bar"),
                TagKey.Create("aaa")
            };

            result = ep.GetTagValuesInColumnOrder(columns, tags);
            Assert.Null(result);

            // aaa column not provided
            columns = new List <ITagKey>()
            {
                TagKey.Create("foo"),
                TagKey.Create("aaa"),
                TagKey.Create("bbb"),
            };
            tags = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("foo", "bar"),
                new KeyValuePair <string, string>("bbb", "bbb")
            };
            result = ep.GetTagValuesInColumnOrder(columns, tags);
            Assert.Equal(3, result.Count);
            Assert.Equal(TagValue.Create("bar"), result[0]);
            Assert.Null(result[1]);
            Assert.Equal(TagValue.Create("bbb"), result[2]);
        }
Пример #15
0
        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 ParseTag_ReturnsExpected()
        {
            var opts  = new MetricsOptions();
            var stats = new OpenCensusStats();

            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointOwinMiddleware(null, ep);

            Assert.Null(middle.ParseTag("foobar"));
            Assert.Equal(new KeyValuePair <string, string>("foo", "bar"), middle.ParseTag("foo:bar"));
            Assert.Equal(new KeyValuePair <string, string>("foo", "bar:bar"), middle.ParseTag("foo:bar:bar"));
            Assert.Null(middle.ParseTag("foo,bar"));
        }
        public async void HandleMetricsRequestAsync_GetSpecificNonExistingMetric_ReturnsExpected()
        {
            var opts  = new MetricsOptions();
            var stats = new OpenCensusStats();

            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointOwinMiddleware(null, ep);

            var context = CreateRequest("GET", "/metrics/foo.bar");

            await middle.HandleMetricsRequestAsync(context);

            Assert.Equal(404, context.Response.StatusCode);
        }
        public void MetricsEndpointMiddleware_PathAndVerbMatching_ReturnsExpected()
        {
            var opts   = new MetricsOptions();
            var stats  = new OpenCensusStats();
            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointOwinMiddleware(null, ep);

            Assert.True(middle.RequestVerbAndPathMatch("GET", "/metrics"));
            Assert.False(middle.RequestVerbAndPathMatch("PUT", "/metrics"));
            Assert.False(middle.RequestVerbAndPathMatch("GET", "/badpath"));
            Assert.False(middle.RequestVerbAndPathMatch("POST", "/metrics"));
            Assert.False(middle.RequestVerbAndPathMatch("DELETE", "/metrics"));
            Assert.True(middle.RequestVerbAndPathMatch("GET", "/metrics/Foo.Bar.Class"));
            Assert.True(middle.RequestVerbAndPathMatch("GET", "/metrics/Foo.Bar.Class?tag=key:value&tag=key1:value1"));
            Assert.True(middle.RequestVerbAndPathMatch("GET", "/metrics?tag=key:value&tag=key1:value1"));
        }
Пример #19
0
        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")));
        }
Пример #20
0
        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();
        }
Пример #21
0
        private void SetupStats(OpenCensusStats stats)
        {
            var exceptionKey = TagKey.Create("exception");
            var methodKey    = TagKey.Create("method");
            var uriKey       = TagKey.Create("uri");
            var statusKey    = TagKey.Create("status");

            var httpServerRquestMeasure = MeasureDouble.Create("server.totalTime", "server request times", MeasureUnit.MilliSeconds);

            var httpServerRequestsViewName = ViewName.Create("http.server.requests");
            var httpServerRequestsView     = View.Create(
                httpServerRequestsViewName,
                "server request times",
                httpServerRquestMeasure,
                Distribution.Create(BucketBoundaries.Create(new List <double>()
            {
                0.0, 1.0, 2.0
            })),
                new List <ITagKey>()
            {
                exceptionKey, methodKey, uriKey, statusKey
            });

            stats.ViewManager.RegisterView(httpServerRequestsView);

            var area = TagKey.Create("area");
            var id   = TagKey.Create("id");

            var memoryUsageMeasure = MeasureDouble.Create("memory.value", "memory usage", MeasureUnit.Bytes);

            var memoryUsageName = ViewName.Create("jvm.memory.used");
            var memoryUsageView = View.Create(
                memoryUsageName,
                "memory usage",
                memoryUsageMeasure,
                Distribution.Create(BucketBoundaries.Create(new List <double>()
            {
                0.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0
            })),
                new List <ITagKey>()
            {
                area, id
            });

            stats.ViewManager.RegisterView(memoryUsageView);
        }
Пример #22
0
        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();
        }
Пример #23
0
        public void MetricsEndpointMiddleware_PathAndVerbMatching_ReturnsExpected()
        {
            var opts   = new MetricsEndpointOptions();
            var mopts  = TestHelpers.GetManagementOptions(opts);
            var stats  = new OpenCensusStats();
            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointMiddleware(null, ep, mopts);

            Assert.True(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/metrics"));
            Assert.False(middle.RequestVerbAndPathMatch("PUT", "/cloudfoundryapplication/metrics"));
            Assert.False(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/badpath"));
            Assert.False(middle.RequestVerbAndPathMatch("POST", "/cloudfoundryapplication/metrics"));
            Assert.False(middle.RequestVerbAndPathMatch("DELETE", "/cloudfoundryapplication/metrics"));
            Assert.True(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class"));
            Assert.True(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class?tag=key:value&tag=key1:value1"));
            Assert.True(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/metrics?tag=key:value&tag=key1:value1"));
        }
        public async void HandleMetricsRequestAsync_GetMetricsNames_ReturnsExpected()
        {
            var opts  = new MetricsOptions();
            var stats = new OpenCensusStats();

            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointOwinMiddleware(null, ep);

            var context = CreateRequest("GET", "/metrics");

            await middle.HandleMetricsRequestAsync(context);

            context.Response.Body.Seek(0, SeekOrigin.Begin);
            StreamReader rdr  = new StreamReader(context.Response.Body);
            string       json = await rdr.ReadToEndAsync();

            Assert.Equal("{\"names\":[]}", json);
        }
Пример #25
0
        public void GetStatistic_ReturnsExpected()
        {
            var opts  = new MetricsEndpointOptions();
            var stats = new OpenCensusStats();
            var ep    = new MetricsEndpoint(opts, stats);

            var m1     = MeasureDouble.Create("test.totalTime", "test", MeasureUnit.Seconds);
            var result = ep.GetStatistic(Sum.Create(), m1);

            Assert.Equal(MetricStatistic.TOTALTIME, result);

            var m2 = MeasureDouble.Create("test.value", "test", MeasureUnit.Seconds);

            result = ep.GetStatistic(LastValue.Create(), m2);
            Assert.Equal(MetricStatistic.VALUE, result);

            var m3 = MeasureDouble.Create("test.count", "test", MeasureUnit.Seconds);

            result = ep.GetStatistic(Count.Create(), m3);
            Assert.Equal(MetricStatistic.COUNT, result);

            var m4 = MeasureDouble.Create("test.sum", "test", MeasureUnit.Bytes);

            result = ep.GetStatistic(Sum.Create(), m4);
            Assert.Equal(MetricStatistic.TOTAL, result);

            var m5 = MeasureDouble.Create("foobar", "test", MeasureUnit.Seconds);

            result = ep.GetStatistic(Distribution.Create(BucketBoundaries.Create(new List <double>()
            {
                0.0, 1.0, 5.0, 10.0, 100.0
            })), m5);
            Assert.Equal(MetricStatistic.TOTALTIME, result);

            var m6 = MeasureDouble.Create("foobar", "test", MeasureUnit.Bytes);

            result = ep.GetStatistic(Distribution.Create(BucketBoundaries.Create(new List <double>()
            {
                0.0, 1.0, 5.0, 10.0, 100.0
            })), m6);
            Assert.Equal(MetricStatistic.TOTAL, result);
        }
        public void GetMetricName_ReturnsExpected()
        {
            var opts  = new MetricsOptions();
            var stats = new OpenCensusStats();

            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointOwinMiddleware(null, ep);

            var context1 = CreateRequest("GET", "/metrics");

            Assert.Null(middle.GetMetricName(context1.Request));

            var context2 = CreateRequest("GET", "/metrics/Foo.Bar.Class");

            Assert.Equal("Foo.Bar.Class", middle.GetMetricName(context2.Request));

            var context3 = CreateRequest("GET", "/metrics", "tag=key:value&tag=key1:value1");

            Assert.Null(middle.GetMetricName(context3.Request));
        }
Пример #27
0
        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);
        }
Пример #28
0
        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"));
        }
Пример #29
0
        public void GetMetricName_ReturnsExpected()
        {
            var opts  = new MetricsEndpointOptions();
            var mopts = TestHelpers.GetManagementOptions(opts);
            var stats = new OpenCensusStats();

            var ep     = new MetricsEndpoint(opts, stats);
            var middle = new MetricsEndpointMiddleware(null, ep, mopts);

            var context1 = CreateRequest("GET", "/cloudfoundryapplication/metrics");

            Assert.Null(middle.GetMetricName(context1.Request));

            var context2 = CreateRequest("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class");

            Assert.Equal("Foo.Bar.Class", middle.GetMetricName(context2.Request));

            var context3 = CreateRequest("GET", "/cloudfoundryapplication/metrics", "?tag=key:value&tag=key1:value1");

            Assert.Null(middle.GetMetricName(context3.Request));
        }
Пример #30
0
        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);
        }