public async Task HandleMetricsRequestAsync_GetSpecificExistingMetric_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = new CloudFoundryManagementOptions(); mopts.EndpointOptions.Add(opts); var stats = new TestOpenTelemetryMetrics(); var exporter = stats.Exporter; SetupTestView(stats); var ep = new MetricsEndpoint(opts, exporter); var middle = new MetricsEndpointMiddleware(null, ep, mopts); var context = CreateRequest("GET", "/cloudfoundryapplication/metrics/test", "?tag=a:v1"); await middle.HandleMetricsRequestAsync(context); Assert.Equal(200, context.Response.StatusCode); context.Response.Body.Seek(0, SeekOrigin.Begin); var rdr = new StreamReader(context.Response.Body); var json = await rdr.ReadToEndAsync(); Assert.Equal("{\"name\":\"test\",\"measurements\":[{\"statistic\":\"VALUE\",\"value\":4.5},{\"statistic\":\"TOTAL\",\"value\":45}],\"availableTags\":[{\"tag\":\"a\",\"values\":[\"v1\"]},{\"tag\":\"b\",\"values\":[\"v1\"]},{\"tag\":\"c\",\"values\":[\"v1\"]}]}", json); }
public void ParseTags_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); var context1 = CreateRequest("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class", "?foo=key:value"); var result = middle.ParseTags(context1.Request.Query); Assert.NotNull(result); Assert.Empty(result); var context2 = CreateRequest("GET", "/cloudfoundryapplication/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", "/cloudfoundryapplication/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", "/cloudfoundryapplication/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); }
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); }
/// <summary> /// Register a report at the specified endpoint. /// </summary> /// <param name="endpoint">Endpoint where the report will be accessible. E.g. "/text" </param> /// <param name="responseFactory">Produces the response. Will be called each time the endpoint is accessed.</param> /// <returns>Chain-able configuration object.</returns> public MetricsEndpointReports WithEndpointReport(string endpoint, Func <MetricsData, Func <HealthStatus>, MetricsEndpointRequest, MetricsEndpointResponse> responseFactory) { var metricsEndpoint = new MetricsEndpoint(endpoint, r => responseFactory(this.metricsDataProvider.CurrentMetricsData, this.healthStatus, r)); this.endpoints[metricsEndpoint.Endpoint] = metricsEndpoint; return(this); }
public void Invoke_WithNullMetricsRequest_ReturnsExpected() { var opts = new MetricsEndpointOptions(); SetupStats(out var exporter); var ep = new MetricsEndpoint(opts, exporter); 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(); exporter = new SteeltoeExporter(); ep = new MetricsEndpoint(opts, exporter); result = ep.Invoke(null); Assert.NotNull(result); Assert.IsType <MetricsListNamesResponse>(result); resp = result as MetricsListNamesResponse; Assert.Empty(resp.Names); }
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); }
public void MetricsEndpointHandler_CannotProcessMissingEndpoint() { var endpoint = new MetricsEndpoint("test", c => new MetricsEndpointResponse("text", "text/plain")); var handler = new MetricsEndpointHandler(new[] { endpoint }); var response = handler.Process("other", null); response.Should().BeNull(); }
public void MetricsEndpoint_MatchesCorrectly() { var endpoint = new MetricsEndpoint("test", c => new MetricsEndpointResponse("test", "text/plain")); endpoint.IsMatch("test").Should().BeTrue(); endpoint.IsMatch("/test").Should().BeTrue(); endpoint.IsMatch("TEST").Should().BeTrue(); endpoint.IsMatch("/TEST").Should().BeTrue(); endpoint.IsMatch("text").Should().BeFalse(); }
public void MetricsEndpoint_CanNormalizePath() { var endpoint1 = new MetricsEndpoint("test", c => new MetricsEndpointResponse("test", "text/plain")); endpoint1.Endpoint.Should().Be("test"); var endpoint2 = new MetricsEndpoint("/test", c => new MetricsEndpointResponse("test", "text/plain")); endpoint1.Endpoint.Should().Be("test"); }
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); }
public void MetricsEndpointHandler_CanProcessEndpoint() { var endpoint = new MetricsEndpoint("test", c => new MetricsEndpointResponse("text", "text/plain")); var handler = new TestMetricsEndpointHandler(new[] { endpoint }); var response = handler.Process("test", null); response.Should().NotBeNull(); response.Content.Should().Be("text"); response.ContentType.Should().Be("text/plain"); }
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]); }
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 void MetricsEndpoint_CanProduceResponse() { Func <MetricsEndpointRequest, MetricsEndpointResponse> factory = r => new MetricsEndpointResponse("custom content", "application/custom", Encoding.ASCII, 202, "Accepted"); var endpoint = new MetricsEndpoint("test", factory); var response = endpoint.ProduceResponse(null); response.Content.Should().Be("custom content"); response.ContentType.Should().Be("application/custom"); response.Encoding.Should().Be(Encoding.ASCII); response.StatusCode.Should().Be(202); response.StatusCodeDescription.Should().Be("Accepted"); }
public void ParseTag_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); 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 async void HandleMetricsRequestAsync_GetSpecificNonExistingMetric_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); var context = CreateRequest("GET", "/cloudfoundryapplication/metrics/foo.bar"); await middle.HandleMetricsRequestAsync(context); Assert.Equal(404, context.Response.StatusCode); }
public async Task MultipleExportersTestAsync() { var opts = new PrometheusEndpointOptions(); var mopts = new ActuatorManagementOptions(); mopts.EndpointOptions.Add(opts); var exporter1 = new PrometheusExporter(); var exporter2 = new SteeltoeExporter(); var multiExporter = new MultiExporter(new MetricExporter[] { exporter1, exporter2 }.ToList()); var processor = new SteeltoeProcessor(multiExporter); var factory = AutoCollectingMeterFactory.Create(processor); var meter = factory.GetMeter("Test"); SetupTestView(meter); factory.CollectAllMetrics(); processor.ExportMetrics(); Task.Delay(1000).Wait(); var ep = new PrometheusScraperEndpoint(opts, exporter1); var middle = new PrometheusScraperEndpointMiddleware(null, ep, mopts); var context = CreateRequest("GET", "/actuator/prometheus"); await middle.HandleMetricsRequestAsync(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var rdr = new StreamReader(context.Response.Body); var text = await rdr.ReadToEndAsync(); Assert.Equal("# HELP test Testtest\n# TYPE test counter\ntest{a=\"v1\",b=\"v1\",c=\"v1\"} 45\n", text); var meopts = new MetricsEndpointOptions(); var ep2 = new MetricsEndpoint(meopts, exporter2); var middle2 = new MetricsEndpointMiddleware(null, ep2, mopts); var context2 = CreateRequest("GET", "/actuator/metrics/test", "?tag=a:v1"); await middle2.HandleMetricsRequestAsync(context2); Assert.Equal(200, context.Response.StatusCode); context2.Response.Body.Seek(0, SeekOrigin.Begin); StreamReader rdr2 = new StreamReader(context2.Response.Body); string json = await rdr2.ReadToEndAsync(); Assert.Equal("{\"name\":\"test\",\"measurements\":[{\"statistic\":\"COUNT\",\"value\":45}],\"availableTags\":[{\"tag\":\"a\",\"values\":[\"v1\"]},{\"tag\":\"b\",\"values\":[\"v1\"]},{\"tag\":\"c\",\"values\":[\"v1\"]}]}", json); }
public void MetricsEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); 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 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")); }
/// <summary> /// Add Metrics actuator endpoint to OWIN Pipeline /// </summary> /// <param name="builder">OWIN <see cref="IAppBuilder" /></param> /// <param name="config"><see cref="IConfiguration"/> of application for configuring metrics endpoint</param> /// <param name="stats">Class for recording statistics - See also: <seealso cref="OpenCensusStats"/></param> /// <param name="tags">Class using for recording statistics</param> /// <param name="loggerFactory">For logging within the middleware</param> /// <returns>OWIN <see cref="IAppBuilder" /> with Metrics Endpoint added</returns> public static IAppBuilder UseMetricsActuator(this IAppBuilder builder, IConfiguration config, IStats stats, ITags tags, ILoggerFactory loggerFactory = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } if (stats == null) { throw new ArgumentNullException(nameof(stats)); } if (tags == null) { throw new ArgumentNullException(nameof(tags)); } IMetricsOptions options = new MetricsEndpointOptions(config); var mgmtOptions = ManagementOptions.Get(config); foreach (var mgmt in mgmtOptions) { mgmt.EndpointOptions.Add(options); } var hostObserver = new OwinHostingObserver(options, stats, tags, loggerFactory?.CreateLogger <OwinHostingObserver>()); var clrObserver = new CLRRuntimeObserver(options, stats, tags, loggerFactory?.CreateLogger <CLRRuntimeObserver>()); DiagnosticsManager.Instance.Observers.Add(hostObserver); DiagnosticsManager.Instance.Observers.Add(clrObserver); var clrSource = new CLRRuntimeSource(); DiagnosticsManager.Instance.Sources.Add(clrSource); var endpoint = new MetricsEndpoint(options, stats, loggerFactory?.CreateLogger <MetricsEndpoint>()); var logger = loggerFactory?.CreateLogger <MetricsEndpointOwinMiddleware>(); return(builder.Use <MetricsEndpointOwinMiddleware>(endpoint, mgmtOptions, logger)); }
public static void UseMetricsActuator(IConfiguration configuration, ILoggerFactory loggerFactory) { var options = new MetricsOptions(configuration); var hostObserver = new AspNetHostingObserver(options, OpenCensusStats.Instance, OpenCensusTags.Instance, CreateLogger <AspNetHostingObserver>(loggerFactory)); var clrObserver = new CLRRuntimeObserver(options, OpenCensusStats.Instance, OpenCensusTags.Instance, CreateLogger <CLRRuntimeObserver>(loggerFactory)); DiagnosticsManager.Instance.Observers.Add((IDiagnosticObserver)hostObserver); DiagnosticsManager.Instance.Observers.Add((IDiagnosticObserver)clrObserver); var clrSource = new CLRRuntimeSource(); DiagnosticsManager.Instance.Sources.Add(clrSource); var ep = new MetricsEndpoint(options, OpenCensusStats.Instance, CreateLogger <MetricsEndpoint>(loggerFactory)); var handler = new MetricsHandler(ep, SecurityService, CreateLogger <MetricsHandler>(loggerFactory)); ConfiguredHandlers.Add(handler); }
public async void HandleMetricsRequestAsync_GetMetricsNames_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); var context = CreateRequest("GET", "/cloudfoundryapplication/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); }
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); }
public void Invoke_WithMetricsRequest_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var stats = new TestOpenTelemetryMetrics(); var ep = new MetricsEndpoint(opts, stats.Exporter); var testMeasure = stats.Meter.CreateDoubleMeasure("test.test1"); long allKeyssum = 0; var labels = new Dictionary <string, string>() { { "a", "v1" }, { "b", "v1" }, { "c", "v1" } }.ToList(); for (var i = 0; i < 10; i++) { allKeyssum += i; testMeasure.Record(default(SpanContext), i, labels); } stats.Factory.CollectAllMetrics(); stats.Processor.ExportMetrics(); var req = new MetricsRequest("test.test1", labels); var resp = ep.Invoke(req) as MetricsResponse; Assert.NotNull(resp); Assert.Equal("test.test1", resp.Name); Assert.NotNull(resp.Measurements); Assert.Equal(2, resp.Measurements.Count); var sample = resp.Measurements.SingleOrDefault(x => x.Statistic == MetricStatistic.VALUE); Assert.NotNull(sample); Assert.Equal((double)allKeyssum / 10, sample.Value); Assert.NotNull(resp.AvailableTags); Assert.Equal(3, resp.AvailableTags.Count); req = new MetricsRequest("foo.bar", labels); resp = ep.Invoke(req) as MetricsResponse; Assert.Null(resp); }
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 MetricsEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); 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)); }
public void GetMetricSamples_ReturnsExpectedMeasure() { var opts = new MetricsEndpointOptions(); var stats = new TestOpenTelemetryMetrics(); var ep = new MetricsEndpoint(opts, stats.Exporter); var measure = stats.Meter.CreateDoubleMeasure("test.test3"); measure.Record(default(SpanContext), 100, LabelSet.BlankLabelSet); stats.Factory.CollectAllMetrics(); stats.Processor.ExportMetrics(); ep.GetMetricsCollection(out var measurements, out _); Assert.Single(measurements.Values); var sample = measurements.Values.FirstOrDefault()[0]; Assert.Equal(100, sample.Value); Assert.Equal(MetricStatistic.VALUE, sample.Statistic); }
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)); }
public void GetMetricName_ReturnsExpected_When_ManagementPath_Is_Slash() { var opts = new MetricsEndpointOptions(); var mopts = new ActuatorManagementOptions(); mopts.Path = "/"; mopts.EndpointOptions.Add(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); 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)); }