|
26 | 26 | percent0 = []float64{10, 50, 90}
|
27 | 27 |
|
28 | 28 | sum1 = "sum1"
|
| 29 | + sum2 = "sum2" |
29 | 30 | gauge1 = "gauge1"
|
30 | 31 | histogram1 = "histogram1"
|
31 | 32 | summary1 = "summary1"
|
@@ -103,6 +104,37 @@ func TestSum(t *testing.T) {
|
103 | 104 | runScript(t, NewInitialPointAdjuster(zap.NewNop(), time.Minute, true), "job", "0", script)
|
104 | 105 | }
|
105 | 106 |
|
| 107 | +func TestSumWithDifferentResources(t *testing.T) { |
| 108 | + script := []*metricsAdjusterTest{ |
| 109 | + { |
| 110 | + description: "Sum: round 1 - initial instance, start time is established", |
| 111 | + metrics: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t1, t1, 44))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t1, t1, 44)))), |
| 112 | + adjusted: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t1, t1, 44))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t1, t1, 44)))), |
| 113 | + }, |
| 114 | + { |
| 115 | + description: "Sum: round 2 - instance adjusted based on round 1 (metrics in different order)", |
| 116 | + metrics: metricsFromResourceMetrics(resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t2, t2, 66))), resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t2, t2, 66)))), |
| 117 | + adjusted: metricsFromResourceMetrics(resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t1, t2, 66))), resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t1, t2, 66)))), |
| 118 | + }, |
| 119 | + { |
| 120 | + description: "Sum: round 3 - instance reset (value less than previous value), start time is reset", |
| 121 | + metrics: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t3, t3, 55))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t3, t3, 55)))), |
| 122 | + adjusted: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t3, t3, 55))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t3, t3, 55)))), |
| 123 | + }, |
| 124 | + { |
| 125 | + description: "Sum: round 4 - instance adjusted based on round 3", |
| 126 | + metrics: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t4, t4, 72))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t4, t4, 72)))), |
| 127 | + adjusted: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t3, t4, 72))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t3, t4, 72)))), |
| 128 | + }, |
| 129 | + { |
| 130 | + description: "Sum: round 5 - instance adjusted based on round 4, sum2 metric resets but sum1 doesn't", |
| 131 | + metrics: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t5, t5, 72))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t5, t5, 10)))), |
| 132 | + adjusted: metricsFromResourceMetrics(resourceMetrics("job1", "instance1", sumMetric(sum1, doublePoint(k1v1k2v2, t3, t5, 72))), resourceMetrics("job2", "instance2", sumMetric(sum2, doublePoint(k1v1k2v2, t5, t5, 10)))), |
| 133 | + }, |
| 134 | + } |
| 135 | + runScript(t, NewInitialPointAdjuster(zap.NewNop(), time.Minute, true), "job", "0", script) |
| 136 | +} |
| 137 | + |
106 | 138 | func TestSummaryNoCount(t *testing.T) {
|
107 | 139 | script := []*metricsAdjusterTest{
|
108 | 140 | {
|
@@ -710,14 +742,32 @@ func runScript(t *testing.T, ma MetricsAdjuster, job, instance string, tests []*
|
710 | 742 | t.Run(test.description, func(t *testing.T) {
|
711 | 743 | adjusted := pmetric.NewMetrics()
|
712 | 744 | test.metrics.CopyTo(adjusted)
|
713 |
| - // Add the instance/job to the input metrics. |
714 |
| - adjusted.ResourceMetrics().At(0).Resource().Attributes().PutStr(semconv.AttributeServiceInstanceID, instance) |
715 |
| - adjusted.ResourceMetrics().At(0).Resource().Attributes().PutStr(semconv.AttributeServiceName, job) |
| 745 | + // Add the instance/job to the input metrics if they aren't already present. |
| 746 | + for i := 0; i < adjusted.ResourceMetrics().Len(); i++ { |
| 747 | + rm := adjusted.ResourceMetrics().At(i) |
| 748 | + _, found := rm.Resource().Attributes().Get(semconv.AttributeServiceName) |
| 749 | + if !found { |
| 750 | + rm.Resource().Attributes().PutStr(semconv.AttributeServiceName, job) |
| 751 | + } |
| 752 | + _, found = rm.Resource().Attributes().Get(semconv.AttributeServiceInstanceID) |
| 753 | + if !found { |
| 754 | + rm.Resource().Attributes().PutStr(semconv.AttributeServiceInstanceID, instance) |
| 755 | + } |
| 756 | + } |
716 | 757 | assert.NoError(t, ma.AdjustMetrics(adjusted))
|
717 | 758 |
|
718 |
| - // Add the instance/job to the expected metrics as well. |
719 |
| - test.adjusted.ResourceMetrics().At(0).Resource().Attributes().PutStr(semconv.AttributeServiceInstanceID, instance) |
720 |
| - test.adjusted.ResourceMetrics().At(0).Resource().Attributes().PutStr(semconv.AttributeServiceName, job) |
| 759 | + // Add the instance/job to the expected metrics as well if they aren't already present. |
| 760 | + for i := 0; i < test.adjusted.ResourceMetrics().Len(); i++ { |
| 761 | + rm := test.adjusted.ResourceMetrics().At(i) |
| 762 | + _, found := rm.Resource().Attributes().Get(semconv.AttributeServiceName) |
| 763 | + if !found { |
| 764 | + rm.Resource().Attributes().PutStr(semconv.AttributeServiceName, job) |
| 765 | + } |
| 766 | + _, found = rm.Resource().Attributes().Get(semconv.AttributeServiceInstanceID) |
| 767 | + if !found { |
| 768 | + rm.Resource().Attributes().PutStr(semconv.AttributeServiceInstanceID, instance) |
| 769 | + } |
| 770 | + } |
721 | 771 | assert.EqualValues(t, test.adjusted, adjusted)
|
722 | 772 | })
|
723 | 773 | }
|
|
0 commit comments