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 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"]); }
public ViewManagerTest() { statsComponent = new StatsComponent(new SimpleEventQueue()); tagsComponent = new TagsComponent(); tagger = tagsComponent.Tagger; viewManager = statsComponent.ViewManager; statsRecorder = statsComponent.StatsRecorder; }
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 ViewManagerTest() { clock = TestClock.Create(); statsComponent = new StatsComponent(new SimpleEventQueue(), clock); tagsComponent = new TagsComponent(); tagger = tagsComponent.Tagger; viewManager = statsComponent.ViewManager; statsRecorder = statsComponent.StatsRecorder; }
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"]); }
public void GetMessage_ReturnsExpected() { var configsource = new Dictionary <string, string> { { "application:InstanceId", "InstanceId" }, { "application:InstanceIndex", "1" }, { "application:ApplicationId", "ApplicationId" }, { "management:metrics:exporter:cloudfoundry:MicrometerMetricWriter", "true" } }; var config = TestHelpers.GetConfigurationFromDictionary(configsource); var opts = new CloudFoundryForwarderOptions(new ApplicationInstanceInfo(config), new ServicesOptions(config), config); var stats = new OpenCensusStats(); var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; var ep = new CloudFoundryForwarderExporter(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 = 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\":\"1\",\"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 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); }
// Returns list of RaycastHit2D that match the input hitTags public static RaycastHit2D RayCast( Vector2 origin, Vector2 direction, float distance, LayerMask layerMask, List <TagObject> hitTags ) { RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, layerMask); // If there's no hit, stop here and return the empty hit. if (!HasHit(hit)) { return(hit); } // If not hitTags are specified, then just return anything that is hit. if (hitTags == null || hitTags.Count == 0) { return(hit); } // Basically try to prevent getting to here if not needed, because this is expensive. TagsComponent tagsComponent = hit.transform.GetComponent <TagsComponent>(); // If there is no tag component in the hit, then return an empty RaycastHit2D if (!tagsComponent || tagsComponent.Tags.Count == 0) { return(new RaycastHit2D()); } // If there tag matches in the hit, then return an empty RaycastHit2D if (!HasAnyOfTags(hitTags, tagsComponent.Tags)) { return(new RaycastHit2D()); } return(hit); }
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 Main() { var statsComponent = new StatsComponent(); var viewManager = statsComponent.ViewManager; var statsRecorder = statsComponent.StatsRecorder; var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; ITagKey FRONTEND_KEY = TagKey.Create("my.org/keys/frontend"); ITagKey FRONTEND_OS_KEY = TagKey.Create("my.org/keys/frontend/os"); ITagKey FRONTEND_OS_VERSION_KEY = TagKey.Create("my.org/keys/frontend/os/version"); IMeasureLong VIDEO_SIZE = MeasureLong.Create("my.org/measure/video_size", "size of processed videos", "MBy"); IViewName VIDEO_SIZE_BY_FRONTEND_VIEW_NAME = ViewName.Create("my.org/views/video_size_byfrontend"); IView VIDEO_SIZE_BY_FRONTEND_VIEW = View.Create( VIDEO_SIZE_BY_FRONTEND_VIEW_NAME, "processed video size over time", VIDEO_SIZE, Distribution.Create(BucketBoundaries.Create(new List <double>() { 0.0, 256.0, 65536.0 })), new List <ITagKey>() { FRONTEND_KEY }); IViewName VIDEO_SIZE_ALL_VIEW_NAME = ViewName.Create("my.org/views/video_size_all"); IView VIDEO_SIZE_VIEW_ALL = View.Create( VIDEO_SIZE_ALL_VIEW_NAME, "processed video size over time", VIDEO_SIZE, Distribution.Create(BucketBoundaries.Create(new List <double>() { 0.0, 256.0, 65536.0 })), new List <ITagKey>() { }); IViewName VIDEO_SIZE_TOTAL_VIEW_NAME = ViewName.Create("my.org/views/video_size_total"); IView VIDEO_SIZE_TOTAL = View.Create( VIDEO_SIZE_TOTAL_VIEW_NAME, "total video size over time", VIDEO_SIZE, Sum.Create(), new List <ITagKey>() { FRONTEND_KEY }); IViewName VIDEOS_PROCESSED_VIEW_NAME = ViewName.Create("my.org/views/videos_processed"); IView VIDEOS_PROCESSED = View.Create( VIDEOS_PROCESSED_VIEW_NAME, "total video processed", VIDEO_SIZE, Count.Create(), new List <ITagKey>() { FRONTEND_KEY }); viewManager.RegisterView(VIDEO_SIZE_VIEW_ALL); viewManager.RegisterView(VIDEO_SIZE_BY_FRONTEND_VIEW); viewManager.RegisterView(VIDEO_SIZE_TOTAL); viewManager.RegisterView(VIDEOS_PROCESSED); ITagContext context1 = tagger .EmptyBuilder .Put(FRONTEND_KEY, TagValue.Create("front1")) .Build(); ITagContext context2 = tagger .EmptyBuilder .Put(FRONTEND_KEY, TagValue.Create("front2")) .Build(); long sum = 0; for (int i = 0; i < 10; i++) { sum = sum + (25648 * i); if (i % 2 == 0) { statsRecorder.NewMeasureMap().Put(VIDEO_SIZE, 25648 * i).Record(context1); } else { statsRecorder.NewMeasureMap().Put(VIDEO_SIZE, 25648 * i).Record(context2); } } IViewData viewDataByFrontend = viewManager.GetView(VIDEO_SIZE_BY_FRONTEND_VIEW_NAME); var viewDataAggMap = viewDataByFrontend.AggregationMap.ToList(); output.WriteLine(viewDataByFrontend.ToString()); IViewData viewDataAll = viewManager.GetView(VIDEO_SIZE_ALL_VIEW_NAME); var viewDataAggMapAll = viewDataAll.AggregationMap.ToList(); output.WriteLine(viewDataAll.ToString()); IViewData viewData1 = viewManager.GetView(VIDEO_SIZE_TOTAL_VIEW_NAME); var viewData1AggMap = viewData1.AggregationMap.ToList(); output.WriteLine(viewData1.ToString()); IViewData viewData2 = viewManager.GetView(VIDEOS_PROCESSED_VIEW_NAME); var viewData2AggMap = viewData2.AggregationMap.ToList(); output.WriteLine(viewData2.ToString()); output.WriteLine(sum.ToString()); }
public void Main2() { var statsComponent = new StatsComponent(); var viewManager = statsComponent.ViewManager; var statsRecorder = statsComponent.StatsRecorder; var tagsComponent = new TagsComponent(); var tagger = tagsComponent.Tagger; ITagKey FRONTEND_KEY = TagKey.Create("my.org/keys/frontend"); ITagKey FRONTEND_OS_KEY = TagKey.Create("my.org/keys/frontend/os"); ITagKey FRONTEND_OS_VERSION_KEY = TagKey.Create("my.org/keys/frontend/os/version"); IMeasureLong VIDEO_SIZE = MeasureLong.Create("my.org/measure/video_size", "size of processed videos", "MBy"); IViewName VIDEO_SIZE_VIEW_NAME = ViewName.Create("my.org/views/video_size_byfrontend"); IView VIDEO_SIZE_VIEW = View.Create( VIDEO_SIZE_VIEW_NAME, "processed video size over time", VIDEO_SIZE, Distribution.Create(BucketBoundaries.Create(new List <double>() { 0.0, 256.0, 65536.0 })), new List <ITagKey>() { FRONTEND_KEY, FRONTEND_OS_KEY, FRONTEND_OS_VERSION_KEY }); viewManager.RegisterView(VIDEO_SIZE_VIEW); ITagContext context1 = tagger .EmptyBuilder .Put(FRONTEND_KEY, TagValue.Create("front1")) .Put(FRONTEND_OS_KEY, TagValue.Create("windows")) .Build(); ITagContext context2 = tagger .EmptyBuilder .Put(FRONTEND_KEY, TagValue.Create("front2")) .Put(FRONTEND_OS_VERSION_KEY, TagValue.Create("1.1.1")) .Build(); long sum = 0; for (int i = 0; i < 10; i++) { sum = sum + (25648 * i); if (i % 2 == 0) { statsRecorder.NewMeasureMap().Put(VIDEO_SIZE, 25648 * i).Record(context1); } else { statsRecorder.NewMeasureMap().Put(VIDEO_SIZE, 25648 * i).Record(context2); } } IViewData videoSizeView = viewManager.GetView(VIDEO_SIZE_VIEW_NAME); var viewDataAggMap = videoSizeView.AggregationMap.ToList(); var view = viewManager.AllExportedViews.ToList()[0]; for (int i = 0; i < view.Columns.Count; i++) { output.WriteLine(view.Columns[i] + "=" + GetTagValues(i, viewDataAggMap)); } var keys = new List <ITagValue>() { TagValue.Create("1.1.1") }; var results = videoSizeView.AggregationMap.Where((kvp) => { foreach (var key in keys) { if (!kvp.Key.Values.Contains(key)) { return(false); } } return(true); }); output.WriteLine(videoSizeView.ToString()); output.WriteLine(sum.ToString()); }
public void GetMetricMeasurements_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(); var context2 = tagger .EmptyBuilder .Put(TagKey.Create("a"), TagValue.Create("v1")) .Build(); var context3 = tagger .EmptyBuilder .Put(TagKey.Create("b"), TagValue.Create("v1")) .Build(); var context4 = tagger .EmptyBuilder .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); } long asum = 0; for (var i = 0; i < 10; i++) { asum += i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context2); } long bsum = 0; for (var i = 0; i < 10; i++) { bsum += i; stats.StatsRecorder.NewMeasureMap().Put(testMeasure, i).Record(context3); } long csum = 0; for (var i = 0; i < 10; i++) { 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 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"]); }