public void TestAggregatingMetricsSucceeds()
        {
            var component = new ComponentData("TestName", "com.newrelic.test");
            var metric1 = new MetricData("Test/Metric", "units", 2);
            var metric2 = new MetricData("Test/Metric", "units", 3);
            var metric3 = new MetricData("Test/Metric", "units", 4);
            var metric4 = new MetricData("Test/Metric", "otherunits", 5);

            Assert.AreEqual(0, TestSerializationHelper.GetMetricsMapFromComponent(component).Count, "Should be zero metrics");

            component.AddMetric(metric1);
            component.AddMetric(metric2);
            component.AddMetric(metric3);
            component.AddMetric(metric4);

            var serializedComponent = component.Serialize(DateTime.Now.Subtract(TimeSpan.FromSeconds(60)));
            var metrics = TestSerializationHelper.GetMetricsMapFromComponent(component);
            Assert.AreEqual(2, metrics.Count, "Should be two metrics");
            Assert.AreEqual(9, TestSerializationHelper.GetValueFromMetricMap(metrics, metric1.FullName, MetricValues.Value));
            Assert.AreEqual(3, TestSerializationHelper.GetValueFromMetricMap(metrics, metric1.FullName, MetricValues.Count));
            Assert.AreEqual(2, TestSerializationHelper.GetValueFromMetricMap(metrics, metric1.FullName, MetricValues.MinValue));
            Assert.AreEqual(4, TestSerializationHelper.GetValueFromMetricMap(metrics, metric1.FullName, MetricValues.MaxValue));
            Assert.AreEqual(29, TestSerializationHelper.GetValueFromMetricMap(metrics, metric1.FullName, MetricValues.SumOfSquares));

            Assert.AreEqual(5, TestSerializationHelper.GetValueFromMetricMap(metrics, metric4.FullName, MetricValues.Value));
            Assert.AreEqual(1, TestSerializationHelper.GetValueFromMetricMap(metrics, metric4.FullName, MetricValues.Count));
            Assert.AreEqual(5, TestSerializationHelper.GetValueFromMetricMap(metrics, metric4.FullName, MetricValues.MinValue));
            Assert.AreEqual(5, TestSerializationHelper.GetValueFromMetricMap(metrics, metric4.FullName, MetricValues.MaxValue));
            Assert.AreEqual(25, TestSerializationHelper.GetValueFromMetricMap(metrics, metric4.FullName, MetricValues.SumOfSquares));
        }
 internal void AggregateWith(MetricData other)
 {
     this._count += other.Count;
     this._value += other.Value;
     this._minValue = Math.Min(_minValue, other.MinValue);
     this._maxValue = Math.Max(_maxValue, other.MaxValue);
     this._sumOfSquares += other.SumOfSquares;
 }
 internal void AddMetric(MetricData metric)
 {
     if (!_metrics.ContainsKey(metric.FullName))
     {
         _metrics.Add(metric.FullName, metric);
     }
     else
     {
         _metrics[metric.FullName].AggregateWith(metric);
     }
 }
        public void TestOverloadedConstructorSucceeds()
        {
            var metric = new MetricData("Test/Metric", "units", 2);

            Assert.AreEqual("Component/Test/Metric[units]", metric.FullName);
            Assert.AreEqual(2, metric.Value);
            Assert.AreEqual(1, metric.Count);
            Assert.AreEqual(2, metric.MinValue);
            Assert.AreEqual(2, metric.MaxValue);
            Assert.AreEqual(4, metric.SumOfSquares);
        }
        public void TestSerializeMethod()
        {
            var metric = new MetricData("Test/Metric", "units", 3);
            var value = metric.Serialize();

            Assert.IsTrue(value is Array);
            Assert.AreEqual((float)value.GetValue(0), metric.Value);
            Assert.AreEqual((float)value.GetValue(1), metric.Count);
            Assert.AreEqual((float)value.GetValue(2), metric.MinValue);
            Assert.AreEqual((float)value.GetValue(3), metric.MaxValue);
            Assert.AreEqual((float)value.GetValue(4), metric.SumOfSquares);
        }
        public void TestAggregationSucceeds()
        {
            var metric1 = new MetricData("Test/Metric1", "units", 2);
            var metric2 = new MetricData("Test/Metric2", "units", 3);

            metric1.AggregateWith(metric2);

            Assert.AreEqual("Component/Test/Metric1[units]", metric1.FullName);
            Assert.AreEqual(5, metric1.Value);
            Assert.AreEqual(2, metric1.Count);
            Assert.AreEqual(2, metric1.MinValue);
            Assert.AreEqual(3, metric1.MaxValue);
            Assert.AreEqual(13, metric1.SumOfSquares);
        }
        public void TestAddSingleMetricSucceeds()
        {
            var component = new ComponentData("TestName", "com.newrelic.test");
            var metric = new MetricData("Test/Metric", "units", 3);

            Assert.AreEqual("TestName", component.Name);
            Assert.AreEqual("com.newrelic.test", component.Guid);
            Assert.AreEqual(0, TestSerializationHelper.GetMetricsMapFromComponent(component).Count, "Should be zero metrics");

            component.AddMetric(metric);

            var serializedComponent = component.Serialize(DateTime.Now.Subtract(TimeSpan.FromSeconds(60)));
            var metrics = TestSerializationHelper.GetMetricsMapFromComponent(component);
            Assert.AreEqual(1, metrics.Count, "Should be one metric");
            Assert.IsTrue(metrics.Keys.Any(key => key == metric.FullName), "Metric name should be a valid key");
            Assert.AreEqual(3, TestSerializationHelper.GetValueFromMetricMap(metrics, metric.FullName, MetricValues.Value));
        }
        public void TestAddMultipleMetricsSucceeds()
        {
            var component = new ComponentData("TestName", "com.newrelic.test");
            var metric1 = new MetricData("Test/Metric1", "units", 2);
            var metric2 = new MetricData("Test/Metric2", "units", 3);
            var metric3 = new MetricData("Test/Metric3", "units", 4);

            Assert.AreEqual(0, TestSerializationHelper.GetMetricsMapFromComponent(component).Count, "Should be zero metrics");

            component.AddMetric(metric1);
            component.AddMetric(metric2);
            component.AddMetric(metric3);

            var serializedComponent = component.Serialize(DateTime.Now.Subtract(TimeSpan.FromSeconds(60)));
            var metrics = TestSerializationHelper.GetMetricsMapFromComponent(component);
            Assert.AreEqual(3, metrics.Count, "Should be three metrics");

            Assert.AreEqual(2, TestSerializationHelper.GetValueFromMetricMap(metrics, metric1.FullName, MetricValues.Value));
            Assert.AreEqual(3, TestSerializationHelper.GetValueFromMetricMap(metrics, metric2.FullName, MetricValues.Value));
            Assert.AreEqual(4, TestSerializationHelper.GetValueFromMetricMap(metrics, metric3.FullName, MetricValues.Value));
        }