public HttpClientDesktopObserver(IMetricsOptions options, IStats censusStats, ITags censusTags, ILogger <HttpClientDesktopObserver> logger) : base(OBSERVER_NAME, DIAGNOSTIC_NAME, options, censusStats, censusTags, logger) { PathMatcher = new Regex(options.EgressIgnorePattern); clientTimeMeasure = MeasureDouble.Create("client.desk.totalTime", "Total request time", MeasureUnit.MilliSeconds); clientCountMeasure = MeasureLong.Create("client.core.totalRequests", "Total request count", "count"); var view = View.Create( ViewName.Create("http.desktop.client.request.time"), "Total request time", clientTimeMeasure, Distribution.Create(BucketBoundaries.Create(new List <double>() { 0.0, 1.0, 5.0, 10.0, 100.0 })), new List <ITagKey>() { statusTagKey, uriTagKey, methodTagKey, clientTagKey }); ViewManager.RegisterView(view); view = View.Create( ViewName.Create("http.desktop.client.request.count"), "Total request counts", clientCountMeasure, Sum.Create(), new List <ITagKey>() { statusTagKey, uriTagKey, methodTagKey, clientTagKey }); ViewManager.RegisterView(view); }
public void GetAllExportedViewsResultIsUnmodifiable() { IViewName viewName1 = CreateRandomViewName(); IViewName viewName2 = CreateRandomViewName(); IMeasureDouble measure = CreateRandomMeasureDouble(); IView view1 = View.Create( viewName1, VIEW_DESCRIPTION, measure, Distribution, new List <string>() { Key }); viewManager.RegisterView(view1); ISet <IView> exported = viewManager.AllExportedViews; IView view2 = View.Create( viewName2, VIEW_DESCRIPTION, measure, Distribution, new List <string>() { Key }); Assert.Throws <NotSupportedException>(() => exported.Add(view2)); }
public OwinHostingObserver(IMetricsOptions options, IStats censusStats, ITags censusTags, ILogger <OwinHostingObserver> logger) : base(OBSERVER_NAME, DIAGNOSTIC_NAME, options, censusStats, censusTags, logger) { PathMatcher = new Regex(options.IngressIgnorePattern); responseTimeMeasure = MeasureDouble.Create("server.owin.totalTime", "Total request time", MeasureUnit.MilliSeconds); serverCountMeasure = MeasureLong.Create("server.owin.totalRequests", "Total request count", "count"); var view = View.Create( ViewName.Create("http.server.request.time"), "Total request time", responseTimeMeasure, Distribution.Create(BucketBoundaries.Create(new List <double>() { 0.0, 1.0, 5.0, 10.0, 100.0 })), new List <ITagKey>() { statusTagKey, exceptionTagKey, methodTagKey, uriTagKey }); ViewManager.RegisterView(view); view = View.Create( ViewName.Create("http.server.request.count"), "Total request counts", serverCountMeasure, Sum.Create(), new List <ITagKey>() { statusTagKey, exceptionTagKey, methodTagKey, uriTagKey }); ViewManager.RegisterView(view); }
public void PreventRegisteringDifferentViewWithSameName() { IViewName viewName = CreateRandomViewName(); IMeasureDouble measure = CreateRandomMeasureDouble(); IView view1 = View.Create( viewName, "View description.", measure, Distribution, new List <string>() { Key }); IView view2 = View.Create( viewName, "This is a different description.", measure, Distribution, new List <string>() { Key }); TestFailedToRegisterView(view1, view2, "A different view with the same name is already registered"); }
public void CreateMetrics_CountAgg_ReturnsExpected() { var opts = new CloudFoundryForwarderOptions(); var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new MicrometerMetricWriter(opts, stats); IMeasureDouble testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Bytes); SetupTestView(stats, Count.Create(), testMeasure, "test.test1"); ITagContext 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 (int i = 0; i < 10; i++) { allKeyssum = allKeyssum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context1); } var viewData = stats.ViewManager.GetView(ViewName.Create("test.test1")); Assert.NotNull(viewData); var aggMap = viewData.AggregationMap; Assert.Single(aggMap); var tagValues = aggMap.Keys.Single(); var data = aggMap.Values.Single(); Assert.NotNull(tagValues); Assert.NotNull(data); var result = ep.CreateMetrics(viewData, data, tagValues, 1L); Assert.NotNull(result); Assert.Single(result); var metric = result[0]; Assert.Equal("test.test1", metric.Name); Assert.Equal(1L, metric.Timestamp); Assert.Equal("gauge", metric.Type); Assert.Equal("bytes", metric.Unit); Assert.Equal(10, metric.Value); var tags = metric.Tags; Assert.Equal("count", tags["statistic"]); Assert.Equal("v1", tags["a"]); Assert.Equal("v1", tags["b"]); Assert.Equal("v1", tags["c"]); }
internal MeasurementDouble(IMeasureDouble measure, double value) { if (measure == null) { throw new ArgumentNullException(nameof(measure)); } this.Measure = measure; this.Value = value; }
public void Invoke_WithMetricsRequest_ReturnsExpected() { var opts = new MetricsOptions(); var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new MetricsEndpoint(opts, stats); IMeasureDouble testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Bytes); SetupTestView(stats, Sum.Create(), testMeasure, "test.test1"); ITagContext 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 (int i = 0; i < 10; i++) { allKeyssum = 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") }; MetricsRequest req = new MetricsRequest("test.test1", alltags); MetricsResponse 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 GetMetricsForExportedViews_ReturnsExpected() { var opts = new CloudFoundryForwarderOptions() { MicrometerMetricWriter = true }; var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new CloudFoundryForwarderExporter(opts, stats); IMeasureDouble testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Bytes); SetupTestView(stats, Sum.Create(), testMeasure, "test.test1"); ITagContext 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 (int i = 0; i < 10; i++) { allKeyssum = allKeyssum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context1); } var result = ep.GetMetricsForExportedViews(stats.ViewManager.AllExportedViews, 1L); Assert.NotNull(result); Assert.Single(result); var metric = result[0]; Assert.Equal("test.test1", metric.Name); Assert.Equal(1L, metric.Timestamp); Assert.Equal("gauge", metric.Type); Assert.Equal("bytes", metric.Unit); Assert.Equal(allKeyssum, metric.Value); var tags = metric.Tags; Assert.Equal("total", tags["statistic"]); Assert.Equal("v1", tags["a"]); Assert.Equal("v1", tags["b"]); Assert.Equal("v1", tags["c"]); }
private void SetupStats(OpenCensusStats stats) { ITagKey exceptionKey = TagKey.Create("exception"); ITagKey methodKey = TagKey.Create("method"); ITagKey uriKey = TagKey.Create("uri"); ITagKey statusKey = TagKey.Create("status"); IMeasureDouble httpServerRquestMeasure = MeasureDouble.Create("server.totalTime", "server request times", MeasureUnit.MilliSeconds); IViewName httpServerRequestsViewName = ViewName.Create("http.server.requests"); IView 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); ITagKey area = TagKey.Create("area"); ITagKey id = TagKey.Create("id"); IMeasureDouble memoryUsageMeasure = MeasureDouble.Create("memory.value", "memory usage", MeasureUnit.Bytes); IViewName memoryUsageName = ViewName.Create("jvm.memory.used"); IView 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); }
public void PreventRegisteringDifferentMeasureWithSameName() { IMeasureDouble measure1 = MeasureDouble.Create("measure", "description", "1"); IMeasureLong measure2 = MeasureLong.Create("measure", "description", "1"); IView view1 = View.Create( VIEW_NAME, VIEW_DESCRIPTION, measure1, DISTRIBUTION, new List <ITagKey>() { KEY }); IView view2 = View.Create( VIEW_NAME_2, VIEW_DESCRIPTION, measure2, DISTRIBUTION, new List <ITagKey>() { KEY }); TestFailedToRegisterView(view1, view2, "A different measure with the same name is already registered"); }
public void GetMessage_ReturnsExpected() { var opts = new CloudFoundryForwarderOptions() { InstanceId = "InstanceId", InstanceIndex = "InstanceIndex", ApplicationId = "ApplicationId", MicrometerMetricWriter = true }; var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new CloudFoundryForwarderExporter(opts, stats); IMeasureDouble testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Bytes); SetupTestView(stats, Sum.Create(), testMeasure, "test.test1"); ITagContext 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 (int i = 0; i < 10; i++) { allKeyssum = allKeyssum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context1); } var message = ep.GetMessage(stats.ViewManager.AllExportedViews, 1L); Assert.NotNull(message); var result = Serialize(message); Assert.Equal("{\"applications\":[{\"id\":\"ApplicationId\",\"instances\":[{\"id\":\"InstanceId\",\"index\":\"InstanceIndex\",\"metrics\":[{\"name\":\"test.test1\",\"tags\":{\"a\":\"v1\",\"b\":\"v1\",\"c\":\"v1\",\"statistic\":\"total\"},\"timestamp\":1,\"type\":\"gauge\",\"unit\":\"bytes\",\"value\":45.0}]}]}]}", result); }
public void PreventRegisteringDifferentMeasureWithSameName() { IMeasureDouble measure1 = Measures.MeasureDouble.Create("measure", "description", "1"); IMeasureLong measure2 = Measures.MeasureLong.Create("measure", "description", "1"); IViewName viewName1 = CreateRandomViewName(); IViewName viewName2 = CreateRandomViewName(); IView view1 = View.Create( viewName1, VIEW_DESCRIPTION, measure1, Distribution, new List <string>() { Key }); IView view2 = View.Create( viewName2, VIEW_DESCRIPTION, measure2, Distribution, new List <string>() { Key }); TestFailedToRegisterView(view1, view2, "A different measure with the same name is already registered"); }
private void SetupTestView(OpenCensusStats stats) { var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; ITagKey aKey = TagKey.Create("a"); ITagKey bKey = TagKey.Create("b"); ITagKey cKey = TagKey.Create("c"); string viewName = "test.test"; IMeasureDouble measure = MeasureDouble.Create(Guid.NewGuid().ToString(), "test", MeasureUnit.Bytes); IViewName testViewName = ViewName.Create(viewName); IView testView = View.Create( testViewName, "test", measure, Sum.Create(), new List <ITagKey>() { aKey, bKey, cKey }); stats.ViewManager.RegisterView(testView); ITagContext 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(); for (int i = 0; i < 10; i++) { stats.StatsRecorder.NewMeasureMap().Put(measure, i).Record(context1); } }
public void TestGetAllExportedViews() { //Assert.Empty(viewManager.AllExportedViews); IViewName viewName1 = CreateRandomViewName(); IViewName viewName2 = CreateRandomViewName(); IMeasureDouble measure = CreateRandomMeasureDouble(); IView cumulativeView1 = CreateCumulativeView( viewName1, measure, Distribution, new List <string>() { Key }); IView cumulativeView2 = CreateCumulativeView( viewName2, measure, Distribution, new List <string>() { Key }); // View intervalView = // View.Create( // View.Name.Create("View 3"), // VIEW_DESCRIPTION, // measure, // Distribution, // Arrays.asList(Key), // INTERVAL); viewManager.RegisterView(cumulativeView1); viewManager.RegisterView(cumulativeView2); // Only cumulative views should be exported. Assert.Contains(cumulativeView1, viewManager.AllExportedViews); Assert.Contains(cumulativeView2, viewManager.AllExportedViews); //Assert.Equal(2, viewManager.AllExportedViews.Count); }
public abstract IMeasureMap Put(IMeasureDouble measure, double value);
public override IMeasureMap Put(IMeasureDouble measure, double value) { builder.Put(measure, value); return(this); }
internal MeasureMapBuilder Put(IMeasureDouble measure, double value) { measurements.Add(MeasurementDouble.Create(measure, value)); return(this); }
public static IMeasurementDouble Create(IMeasureDouble measure, double value) { return(new MeasurementDouble(measure, value)); }
public void GetMetricMeasurements_ReturnsExpected() { var opts = new MetricsOptions(); var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new MetricsEndpoint(opts, stats); IMeasureDouble testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Bytes); SetupTestView(stats, Sum.Create(), testMeasure, "test.test1"); ITagContext 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(); ITagContext context2 = tagger .EmptyBuilder .Put(TagKey.Create("a"), TagValue.Create("v1")) .Build(); ITagContext context3 = tagger .EmptyBuilder .Put(TagKey.Create("b"), TagValue.Create("v1")) .Build(); ITagContext context4 = tagger .EmptyBuilder .Put(TagKey.Create("c"), TagValue.Create("v1")) .Build(); long allKeyssum = 0; for (int i = 0; i < 10; i++) { allKeyssum = allKeyssum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context1); } long asum = 0; for (int i = 0; i < 10; i++) { asum = asum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context2); } long bsum = 0; for (int i = 0; i < 10; i++) { bsum = bsum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context3); } long csum = 0; for (int i = 0; i < 10; i++) { csum = csum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context4); } 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 viewData = stats.ViewManager.GetView(ViewName.Create("test.test1")); var result = ep.GetMetricMeasurements(viewData, alltags); Assert.NotNull(result); Assert.Single(result); var sample = result[0]; Assert.Equal(allKeyssum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); var atags = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("a", "v1"), }; result = ep.GetMetricMeasurements(viewData, atags); Assert.NotNull(result); Assert.Single(result); sample = result[0]; Assert.Equal(allKeyssum + asum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); var btags = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("b", "v1"), }; result = ep.GetMetricMeasurements(viewData, btags); Assert.NotNull(result); Assert.Single(result); sample = result[0]; Assert.Equal(allKeyssum + bsum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); var ctags = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("c", "v1"), }; result = ep.GetMetricMeasurements(viewData, ctags); Assert.NotNull(result); Assert.Single(result); sample = result[0]; Assert.Equal(allKeyssum + csum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); var abtags = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("a", "v1"), new KeyValuePair <string, string>("b", "v1"), }; result = ep.GetMetricMeasurements(viewData, abtags); Assert.NotNull(result); Assert.Single(result); sample = result[0]; Assert.Equal(allKeyssum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); var actags = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("a", "v1"), new KeyValuePair <string, string>("c", "v1"), }; result = ep.GetMetricMeasurements(viewData, actags); Assert.NotNull(result); Assert.Single(result); sample = result[0]; Assert.Equal(allKeyssum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); var bctags = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("b", "v1"), new KeyValuePair <string, string>("c", "v1"), }; result = ep.GetMetricMeasurements(viewData, bctags); Assert.NotNull(result); Assert.Single(result); sample = result[0]; Assert.Equal(allKeyssum, sample.Value); Assert.Equal(MetricStatistic.TOTAL, sample.Statistic); }
public override IMeasureMap Put(IMeasureDouble measure, double value) { return(this); }
public void CreateMetrics_DistributionAgg_ReturnsExpected() { var opts = new CloudFoundryForwarderOptions(); var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new SpringBootMetricWriter(opts, stats); IMeasureDouble testMeasure = MeasureDouble.Create("test.total", "test", MeasureUnit.Seconds); SetupTestView(stats, Distribution.Create(BucketBoundaries.Create(new List <double>() { 0.0, 1.0, 5.0, 10.0, 100.0 })), testMeasure, "test.test1"); ITagContext 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 (int i = 0; i < 10; i++) { allKeyssum = allKeyssum + i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context1); } var viewData = stats.ViewManager.GetView(ViewName.Create("test.test1")); Assert.NotNull(viewData); var aggMap = viewData.AggregationMap; Assert.Single(aggMap); var tagValues = aggMap.Keys.Single(); var data = aggMap.Values.Single(); Assert.NotNull(tagValues); Assert.NotNull(data); var result = ep.CreateMetrics(viewData, data, tagValues, 1L); Assert.NotNull(result); Assert.Equal(4, result.Count); var metric = result[0]; Assert.Equal("test.test1.v1.v1.v1", metric.Name); Assert.Equal(1L, metric.Timestamp); Assert.Equal("gauge", metric.Type); Assert.Equal("seconds", metric.Unit); Assert.Equal((double)allKeyssum / 10.0, metric.Value); var tags = metric.Tags; Assert.Equal("v1", tags["a"]); Assert.Equal("v1", tags["b"]); Assert.Equal("v1", tags["c"]); metric = result[1]; Assert.Equal("test.test1.max.v1.v1.v1", metric.Name); Assert.Equal(1L, metric.Timestamp); Assert.Equal("gauge", metric.Type); Assert.Equal("seconds", metric.Unit); Assert.Equal(9, metric.Value); tags = metric.Tags; Assert.Equal("v1", tags["a"]); Assert.Equal("v1", tags["b"]); Assert.Equal("v1", tags["c"]); metric = result[2]; Assert.Equal("test.test1.min.v1.v1.v1", metric.Name); Assert.Equal(1L, metric.Timestamp); Assert.Equal("gauge", metric.Type); Assert.Equal("seconds", metric.Unit); Assert.Equal(0, metric.Value); tags = metric.Tags; Assert.Equal("v1", tags["a"]); Assert.Equal("v1", tags["b"]); Assert.Equal("v1", tags["c"]); metric = result[3]; Assert.Equal("test.test1.stddev.v1.v1.v1", metric.Name); Assert.Equal(1L, metric.Timestamp); Assert.Equal("gauge", metric.Type); Assert.Equal("seconds", metric.Unit); Assert.InRange(metric.Value, 2.0d, 3.0d); tags = metric.Tags; Assert.Equal("v1", tags["a"]); Assert.Equal("v1", tags["b"]); Assert.Equal("v1", tags["c"]); }