public void Record_UnregisteredMeasure() { Stats.State = StatsCollectionState.ENABLED; IViewName viewName = CreateRandomViewName(); IView view = View.Create( viewName, "description", MEASURE_DOUBLE, Sum.Create(), new List <string>() { KEY }); viewManager.RegisterView(view); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE_NO_VIEW_1, 1.0) .Put(MEASURE_DOUBLE, 2.0) .Put(MEASURE_DOUBLE_NO_VIEW_2, 3.0) .Record(new SimpleTagContext(new DistributedContextEntry(KEY, VALUE))); IViewData viewData = viewManager.GetView(viewName); // There should be one entry. var tv = TagValues.Create(new List <string>() { VALUE }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(Sum.Create(), MEASURE_DOUBLE, 2.0) } }, 1e-6); }
public void RecordTwice() { IView view = View.Create( VIEW_NAME, "description", MEASURE_DOUBLE, Sum.Create(), new List <ITagKey>() { KEY }); viewManager.RegisterView(view); IMeasureMap statsRecord = statsRecorder.NewMeasureMap().Put(MEASURE_DOUBLE, 1.0); statsRecord.Record(new SimpleTagContext(Tag.Create(KEY, VALUE))); statsRecord.Record(new SimpleTagContext(Tag.Create(KEY, VALUE_2))); IViewData viewData = viewManager.GetView(VIEW_NAME); // There should be two entries. var tv = TagValues.Create(new List <ITagValue>() { VALUE }); var tv2 = TagValues.Create(new List <ITagValue>() { VALUE_2 }); Dictionary <TagValues, IAggregationData> expected = new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(Sum.Create(), MEASURE_DOUBLE, 1.0) }, { tv2, StatsTestUtil.CreateAggregationData(Sum.Create(), MEASURE_DOUBLE, 1.0) } }; StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, expected, 1e-6); }
public void PreventAggregationAndAggregationDataMismatch_Distribution_Count() { var tagValues1 = TagValues.Create(new List <ITagValue>() { V1, V2 }); var tagValues2 = TagValues.Create(new List <ITagValue>() { V10, V20 }); Dictionary <TagValues, IAggregationData> entries = new Dictionary <TagValues, IAggregationData>() { { tagValues1, DistributionData.Create(1, 1, 1, 1, 0, new List <long>() { 0L, 1L, 0L }) }, { tagValues2, CountData.Create(100) } }; AggregationAndAggregationDataMismatch(CreateView(DISTRIBUTION), entries); }
public void Record_CurrentContextSet() { IView view = View.Create( VIEW_NAME, "description", MEASURE_DOUBLE, Sum.Create(), new List <ITagKey>() { KEY }); viewManager.RegisterView(view); var orig = AsyncLocalContext.CurrentTagContext; AsyncLocalContext.CurrentTagContext = new SimpleTagContext(Tag.Create(KEY, VALUE)); try { statsRecorder.NewMeasureMap().Put(MEASURE_DOUBLE, 1.0).Record(); } finally { AsyncLocalContext.CurrentTagContext = orig; } IViewData viewData = viewManager.GetView(VIEW_NAME); // record() should have used the given TagContext. ICollection <TagValues> expected = new List <TagValues>() { TagValues.Create(new List <ITagValue>() { VALUE }) }; Assert.Equal(expected, viewData.AggregationMap.Keys); }
public void TestRecordCumulativeMultipleTagValues() { IView view = CreateCumulativeView(CreateRandomViewName(), MeasureDouble, Distribution, new List <string>() { Key }); viewManager.RegisterView(view); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 10.0) .Record(tagger.EmptyBuilder.Put(Key, Value).Build()); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 30.0) .Record(tagger.EmptyBuilder.Put(Key, Value2).Build()); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 50.0) .Record(tagger.EmptyBuilder.Put(Key, Value2).Build()); IViewData viewData = viewManager.GetView(view.Name); var tv = TagValues.Create(new List <string>() { Value }); var tv2 = TagValues.Create(new List <string>() { Value2 }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 10.0) }, { tv2, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 30.0, 50.0) }, }, Epsilon); }
public void GetViewDoesNotClearStats() { IView view = CreateCumulativeView(CreateRandomViewName(), MeasureDouble, Distribution, new List <string>() { Key }); viewManager.RegisterView(view); ITagContext tags = tagger.EmptyBuilder.Put(Key, Value).Build(); statsRecorder.NewMeasureMap().Put(MeasureDouble, 0.1).Record(tags); IViewData viewData1 = viewManager.GetView(view.Name); var tv = TagValues.Create(new List <string>() { Value }); StatsTestUtil.AssertAggregationMapEquals( viewData1.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 0.1) }, }, Epsilon); statsRecorder.NewMeasureMap().Put(MeasureDouble, 0.2).Record(tags); IViewData viewData2 = viewManager.GetView(view.Name); // The second view should have the same start time as the first view, and it should include both // Recorded values: StatsTestUtil.AssertAggregationMapEquals( viewData2.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 0.1, 0.2) }, }, Epsilon); }
public void GetViewDoesNotClearStats() { IView view = CreateCumulativeView(VIEW_NAME, MEASURE_DOUBLE, DISTRIBUTION, new List <TagKey>() { KEY }); viewManager.RegisterView(view); ITagContext tags = tagger.EmptyBuilder.Put(KEY, VALUE).Build(); statsRecorder.NewMeasureMap().Put(MEASURE_DOUBLE, 0.1).Record(tags); IViewData viewData1 = viewManager.GetView(VIEW_NAME); var tv = TagValues.Create(new List <TagValue>() { VALUE }); StatsTestUtil.AssertAggregationMapEquals( viewData1.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 0.1) }, }, EPSILON); statsRecorder.NewMeasureMap().Put(MEASURE_DOUBLE, 0.2).Record(tags); IViewData viewData2 = viewManager.GetView(VIEW_NAME); // The second view should have the same start time as the first view, and it should include both // Recorded values: StatsTestUtil.AssertAggregationMapEquals( viewData2.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 0.1, 0.2) }, }, EPSILON); }
public void TestRecordCumulativeMultipleTagValues() { viewManager.RegisterView( CreateCumulativeView(VIEW_NAME, MEASURE_DOUBLE, DISTRIBUTION, new List <ITagKey>() { KEY })); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 10.0) .Record(tagger.EmptyBuilder.Put(KEY, VALUE).Build()); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 30.0) .Record(tagger.EmptyBuilder.Put(KEY, VALUE_2).Build()); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 50.0) .Record(tagger.EmptyBuilder.Put(KEY, VALUE_2).Build()); IViewData viewData = viewManager.GetView(VIEW_NAME); var tv = TagValues.Create(new List <ITagValue>() { VALUE }); var tv2 = TagValues.Create(new List <ITagValue>() { VALUE_2 }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 10.0) }, { tv2, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 30.0, 50.0) }, }, EPSILON); }
public void Record_UnregisteredMeasure() { IView view = View.Create( VIEW_NAME, "description", MEASURE_DOUBLE, Sum.Create(), new List <ITagKey>() { KEY }); viewManager.RegisterView(view); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE_NO_VIEW_1, 1.0) .Put(MEASURE_DOUBLE, 2.0) .Put(MEASURE_DOUBLE_NO_VIEW_2, 3.0) .Record(new SimpleTagContext(Tag.Create(KEY, VALUE))); IViewData viewData = viewManager.GetView(VIEW_NAME); // There should be one entry. var tv = TagValues.Create(new List <ITagValue>() { VALUE }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv, StatsTestUtil.CreateAggregationData(Sum.Create(), MEASURE_DOUBLE, 2.0) } }, 1e-6); }
#pragma warning disable SA1202 // Elements must be ordered by access public void TestRecordWithTagsThatDoNotMatchViewData() #pragma warning restore SA1202 // Elements must be ordered by access { viewManager.RegisterView( CreateCumulativeView(VIEW_NAME, MEASURE_DOUBLE, DISTRIBUTION, new List <ITagKey>() { KEY })); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 10.0) .Record(tagger.EmptyBuilder.Put(TagKey.Create("wrong key"), VALUE).Build()); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 50.0) .Record(tagger.EmptyBuilder.Put(TagKey.Create("another wrong key"), VALUE).Build()); IViewData viewData = viewManager.GetView(VIEW_NAME); var tv = TagValues.Create(new List <ITagValue>() { MutableViewData.UNKNOWN_TAG_VALUE }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { // Won't Record the unregistered tag key, for missing registered keys will use default // tag value : "unknown/not set". { tv, // Should Record stats with default tag value: "KEY" : "unknown/not set". StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 10.0, 50.0) } }, EPSILON); }
public void TestRecordWithTagsThatDoNotMatchViewData() { Stats.State = StatsCollectionState.ENABLED; IView view = CreateCumulativeView(CreateRandomViewName(), MeasureDouble, Distribution, new List <string>() { Key }); viewManager.RegisterView(view); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 10.0) .Record(tagger.EmptyBuilder.Put("wrong key", Value).Build()); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 50.0) .Record(tagger.EmptyBuilder.Put("another wrong key", Value).Build()); IViewData viewData = viewManager.GetView(view.Name); var tv = TagValues.Create(new List <string>() { MutableViewData.UnknownTagValue }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { // Won't Record the unregistered tag key, for missing registered keys will use default // tag value : "unknown/not set". { tv, // Should Record stats with default tag value: "Key" : "unknown/not set". StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 10.0, 50.0) }, }, Epsilon); }
protected internal List <Metric> CreateMetrics(TagValues tagValues, IAggregationData agg, IViewData viewData, long timeStamp) { List <Metric> results = new List <Metric>(); var unit = viewData.View.Measure.Unit; var name = viewData.View.Name.AsString; var tags = GetTagKeysAndValues(viewData.View.Columns, tagValues.Values); var statistic = GetStatistic(viewData.View.Aggregation, viewData.View.Measure); agg.Match <object>( (arg) => { if (statistic == "unknown") { statistic = "total"; } tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.Sum)); return(null); }, (arg) => { if (statistic == "unknown") { statistic = "total"; } tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.Sum)); return(null); }, (arg) => { if (statistic == "unknown") { statistic = "count"; } tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.Count)); return(null); }, (arg) => { if (statistic == "unknown") { statistic = "total"; } IDictionary <string, string> copy = new Dictionary <string, string>(tags); copy["statistic"] = "count"; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, "count", copy, arg.Count)); copy = new Dictionary <string, string>(tags); copy["statistic"] = "mean"; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, copy, arg.Mean)); tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.Count * arg.Mean)); return(null); }, (arg) => { if (statistic == "unknown") { statistic = "total"; } IDictionary <string, string> copy = new Dictionary <string, string>(tags); copy["statistic"] = "count"; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, "count", copy, arg.Count)); copy = new Dictionary <string, string>(tags); copy["statistic"] = "mean"; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, copy, arg.Mean)); copy = new Dictionary <string, string>(tags); copy["statistic"] = "max"; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, copy, arg.Max)); tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.Count * arg.Mean)); return(null); }, (arg) => { if (statistic == "unknown") { statistic = "value"; } tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.LastValue)); return(null); }, (arg) => { if (statistic == "unknown") { statistic = "value"; } tags["statistic"] = statistic; results.Add(new Metric(name, MetricType.GAUGE, timeStamp, unit, tags, arg.LastValue)); return(null); }, (arg) => { return(null); }); return(results); }
public abstract IList <Metric> CreateMetrics(IViewData viewData, IAggregationData aggregation, TagValues tagValues, long timeStamp);
public void TestViewDataWithMultipleTagKeys() { ITagKey key1 = TagKey.Create("Key-1"); ITagKey key2 = TagKey.Create("Key-2"); viewManager.RegisterView( CreateCumulativeView(VIEW_NAME, MEASURE_DOUBLE, DISTRIBUTION, new List <ITagKey>() { key1, key2 })); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 1.1) .Record( tagger .EmptyBuilder .Put(key1, TagValue.Create("v1")) .Put(key2, TagValue.Create("v10")) .Build()); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 2.2) .Record( tagger .EmptyBuilder .Put(key1, TagValue.Create("v1")) .Put(key2, TagValue.Create("v20")) .Build()); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 3.3) .Record( tagger .EmptyBuilder .Put(key1, TagValue.Create("v2")) .Put(key2, TagValue.Create("v10")) .Build()); statsRecorder .NewMeasureMap() .Put(MEASURE_DOUBLE, 4.4) .Record( tagger .EmptyBuilder .Put(key1, TagValue.Create("v1")) .Put(key2, TagValue.Create("v10")) .Build()); IViewData viewData = viewManager.GetView(VIEW_NAME); var tv1 = TagValues.Create(new List <ITagValue>() { TagValue.Create("v1"), TagValue.Create("v10") }); var tv2 = TagValues.Create(new List <ITagValue>() { TagValue.Create("v1"), TagValue.Create("v20") }); var tv3 = TagValues.Create(new List <ITagValue>() { TagValue.Create("v2"), TagValue.Create("v10") }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv1, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 1.1, 4.4) }, { tv2, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 2.2) }, { tv3, StatsTestUtil.CreateAggregationData(DISTRIBUTION, MEASURE_DOUBLE, 3.3) }, }, EPSILON); }
public override IList <Metric> CreateMetrics(IViewData viewData, IAggregationData aggregation, TagValues tagValues, long timeStamp) { List <Metric> results = new List <Metric>(); var unit = viewData.View.Measure.Unit; var tags = GetTagKeysAndValues(viewData.View.Columns, tagValues.Values); var name = viewData.View.Name.AsString; aggregation.Match <object>( (arg) => { results.Add(new Metric(GetMetricName(name, string.Empty, tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Sum)); return(null); }, (arg) => { results.Add(new Metric(GetMetricName(name, string.Empty, tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Sum)); return(null); }, (arg) => { results.Add(new Metric(GetMetricName(name, string.Empty, tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Count)); return(null); }, (arg) => { results.Add(new Metric(GetMetricName(name, string.Empty, tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Mean)); return(null); }, (arg) => { results.Add(new Metric(GetMetricName(name, string.Empty, tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Mean)); results.Add(new Metric(GetMetricName(name, "max", tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Max)); results.Add(new Metric(GetMetricName(name, "min", tags), MetricType.GAUGE, timeStamp, unit, tags, arg.Min)); var stdDeviation = Math.Sqrt((arg.SumOfSquaredDeviations / arg.Count) - 1); if (double.IsNaN(stdDeviation)) { stdDeviation = 0.0; } results.Add(new Metric(GetMetricName(name, "stddev", tags), MetricType.GAUGE, timeStamp, unit, tags, stdDeviation)); return(null); }, (arg) => { results.Add(new Metric(GetMetricName(name, "value", tags), MetricType.GAUGE, timeStamp, unit, tags, arg.LastValue)); return(null); }, (arg) => { results.Add(new Metric(GetMetricName(name, "value", tags), MetricType.GAUGE, timeStamp, unit, tags, arg.LastValue)); return(null); }, (arg) => { return(null); }); return(results); }
public void GetAvailableTags_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var stats = new OpenCensusStats(); var ep = new MetricsEndpoint(opts, stats); SetupTestView(stats, Sum.Create(), null, "test.test1"); var viewData = stats.ViewManager.GetView(ViewName.Create("test.test1")); var dict = new Dictionary <TagValues, IAggregationData>() { { TagValues.Create(new List <ITagValue>() { TagValue.Create("v1"), TagValue.Create("v1"), TagValue.Create("v1") }), SumDataDouble.Create(1) }, { TagValues.Create(new List <ITagValue>() { TagValue.Create("v2"), TagValue.Create("v2"), TagValue.Create("v2") }), SumDataDouble.Create(1) } }; var result = ep.GetAvailableTags(viewData.View.Columns, dict); Assert.NotNull(result); Assert.Equal(3, result.Count); var tag = result[0]; Assert.Equal("a", tag.Tag); Assert.Contains("v1", tag.Values); Assert.Contains("v2", tag.Values); tag = result[1]; Assert.Equal("b", tag.Tag); Assert.Contains("v1", tag.Values); Assert.Contains("v2", tag.Values); tag = result[2]; Assert.Equal("c", tag.Tag); Assert.Contains("v1", tag.Values); Assert.Contains("v2", tag.Values); dict = new Dictionary <TagValues, IAggregationData>(); result = ep.GetAvailableTags(viewData.View.Columns, dict); Assert.NotNull(result); Assert.Equal(3, result.Count); tag = result[0]; Assert.Equal("a", tag.Tag); Assert.Empty(tag.Values); tag = result[1]; Assert.Equal("b", tag.Tag); Assert.Empty(tag.Values); tag = result[2]; Assert.Equal("c", tag.Tag); Assert.Empty(tag.Values); }
public void TestViewDataWithMultipleTagKeys() { string key1 = "Key-1"; string key2 = "Key-2"; IView view = CreateCumulativeView(CreateRandomViewName(), MeasureDouble, Distribution, new List <string>() { key1, key2 }); viewManager.RegisterView(view); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 1.1) .Record( tagger .EmptyBuilder .Put(key1, "v1") .Put(key2, "v10") .Build()); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 2.2) .Record( tagger .EmptyBuilder .Put(key1, "v1") .Put(key2, "v20") .Build()); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 3.3) .Record( tagger .EmptyBuilder .Put(key1, "v2") .Put(key2, "v10") .Build()); statsRecorder .NewMeasureMap() .Put(MeasureDouble, 4.4) .Record( tagger .EmptyBuilder .Put(key1, "v1") .Put(key2, "v10") .Build()); IViewData viewData = viewManager.GetView(view.Name); var tv1 = TagValues.Create(new List <string>() { "v1", "v10" }); var tv2 = TagValues.Create(new List <string>() { "v1", "v20" }); var tv3 = TagValues.Create(new List <string>() { "v2", "v10" }); StatsTestUtil.AssertAggregationMapEquals( viewData.AggregationMap, new Dictionary <TagValues, IAggregationData>() { { tv1, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 1.1, 4.4) }, { tv2, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 2.2) }, { tv3, StatsTestUtil.CreateAggregationData(Distribution, MeasureDouble, 3.3) }, }, Epsilon); }