public void NodeMetric_should_update_3_nodeMetrics_with_ewma_applied() { const double decay = ClusterMetricsTestConfig.DefaultDecayFactor; const double epsilon = 0.001; var sample1 = new NodeMetrics(_node1, 1, ImmutableHashSet.Create( NodeMetrics.Types.Metric.Create("a", 1, decay).Value, NodeMetrics.Types.Metric.Create("b", 4, decay).Value )); var sample2 = new NodeMetrics(_node1, 2, ImmutableHashSet.Create( NodeMetrics.Types.Metric.Create("a", 2, decay).Value, NodeMetrics.Types.Metric.Create("c", 5, decay).Value )); var sample3 = new NodeMetrics(_node1, 3, ImmutableHashSet.Create( NodeMetrics.Types.Metric.Create("a", 3, decay).Value, NodeMetrics.Types.Metric.Create("d", 6, decay).Value )); var updated = sample1.Update(sample2).Update(sample3); updated.Metrics.Should().HaveCount(4); updated.Timestamp.Should().Be(sample3.Timestamp); updated.Metric("a").Value.Value.LongValue.Should().Be(3); updated.Metric("b").Value.Value.LongValue.Should().Be(4); updated.Metric("c").Value.Value.LongValue.Should().Be(5); updated.Metric("d").Value.Value.LongValue.Should().Be(6); updated.Metric("a").Value.SmoothValue.Should().BeApproximately(1.512, epsilon); updated.Metric("b").Value.SmoothValue.Should().BeApproximately(4.000, epsilon); updated.Metric("c").Value.SmoothValue.Should().BeApproximately(5.000, epsilon); updated.Metric("d").Value.SmoothValue.Should().BeApproximately(6.000, epsilon); }
public void NodeMetrics_should_update_2_nodeMetrics_by_most_resent() { var sample1 = new NodeMetrics(_node1, 1, ImmutableHashSet.Create( NodeMetrics.Types.Metric.Create("a", 10, Option <double> .None).Value, NodeMetrics.Types.Metric.Create("b", 20, Option <double> .None).Value )); var sample2 = new NodeMetrics(_node1, 2, ImmutableHashSet.Create( NodeMetrics.Types.Metric.Create("a", 11, Option <double> .None).Value, NodeMetrics.Types.Metric.Create("c", 30, Option <double> .None).Value )); var updated = sample1.Update(sample2); updated.Metrics.Should().HaveCount(3); updated.Timestamp.Should().Be(sample2.Timestamp); updated.Metric("a").Value.Value.LongValue.Should().Be(11); updated.Metric("b").Value.Value.LongValue.Should().Be(20); updated.Metric("c").Value.Value.LongValue.Should().Be(30); }