@@ -33,40 +33,87 @@ func TestExcludeAggregateMetrics(t *testing.T) {
33
33
counter .AddChild ("xyz" )
34
34
r .AddMetric (counter )
35
35
36
- // Don't include child metrics, so only report the aggregate.
37
- // Flipping the includeAggregateMetrics flag should have no effect.
38
- testutils .RunTrueAndFalse (t , "includeChildMetrics=false,includeAggregateMetrics" , func (t * testing.T , includeAggregateMetrics bool ) {
36
+ testutils .RunTrueAndFalse (t , "reinitialisableBugFixEnabled" , func (t * testing.T , includeBugFix bool ) {
37
+ // Don't include child metrics, so only report the aggregate.
38
+ // Flipping the includeAggregateMetrics flag should have no effect.
39
+ testutils .RunTrueAndFalse (t , "includeChildMetrics=false,includeAggregateMetrics" , func (t * testing.T , includeAggregateMetrics bool ) {
40
+ pe := metric .MakePrometheusExporter ()
41
+ pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (false ), metric .WithIncludeAggregateMetrics (includeAggregateMetrics ), metric .WithReinitialisableBugFixEnabled (includeBugFix ))
42
+ families , err := pe .Gather ()
43
+ require .NoError (t , err )
44
+ require .Equal (t , 1 , len (families ))
45
+ require .Equal (t , "counter" , families [0 ].GetName ())
46
+ require .Equal (t , 1 , len (families [0 ].GetMetric ()))
47
+ require .Equal (t , 0 , len (families [0 ].GetMetric ()[0 ].GetLabel ()))
48
+ })
49
+
50
+ testutils .RunTrueAndFalse (t , "includeChildMetrics=true,includeAggregateMetrics" , func (t * testing.T , includeAggregateMetrics bool ) {
51
+ pe := metric .MakePrometheusExporter ()
52
+ pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (true ), metric .WithIncludeAggregateMetrics (includeAggregateMetrics ), metric .WithReinitialisableBugFixEnabled (includeBugFix ))
53
+ families , err := pe .Gather ()
54
+ require .NoError (t , err )
55
+ require .Equal (t , 1 , len (families ))
56
+ require .Equal (t , "counter" , families [0 ].GetName ())
57
+ var labelPair * prometheusgo.LabelPair
58
+ if includeAggregateMetrics {
59
+ require .Equal (t , 2 , len (families [0 ].GetMetric ()))
60
+ require .Equal (t , 0 , len (families [0 ].GetMetric ()[0 ].GetLabel ()))
61
+ require .Equal (t , 1 , len (families [0 ].GetMetric ()[1 ].GetLabel ()))
62
+ labelPair = families [0 ].GetMetric ()[1 ].GetLabel ()[0 ]
63
+ } else {
64
+ require .Equal (t , 1 , len (families [0 ].GetMetric ()))
65
+ require .Equal (t , 1 , len (families [0 ].GetMetric ()[0 ].GetLabel ()))
66
+ labelPair = families [0 ].GetMetric ()[0 ].GetLabel ()[0 ]
67
+ }
68
+ require .Equal (t , "child_label" , * labelPair .Name )
69
+ require .Equal (t , "xyz" , * labelPair .Value )
70
+ })
71
+ })
72
+
73
+ t .Run ("reinitialisable metrics" , func (t * testing.T ) {
74
+ r := metric .NewRegistry ()
75
+ counter := NewSQLCounter (metric.Metadata {Name : "counter" })
76
+ r .AddMetric (counter )
77
+
78
+ // Aggregate disabled, but no children, so the aggregate is still reported.
39
79
pe := metric .MakePrometheusExporter ()
40
- pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (false ), metric .WithIncludeAggregateMetrics (includeAggregateMetrics ))
80
+ pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (true ), metric .WithIncludeAggregateMetrics (false ), metric . WithReinitialisableBugFixEnabled ( true ))
41
81
families , err := pe .Gather ()
42
82
require .NoError (t , err )
43
83
require .Equal (t , 1 , len (families ))
44
- require .Equal (t , "counter" , families [0 ].GetName ())
45
84
require .Equal (t , 1 , len (families [0 ].GetMetric ()))
46
- require .Equal (t , 0 , len (families [0 ].GetMetric ()[0 ].GetLabel ()))
47
- })
48
-
49
- testutils .RunTrueAndFalse (t , "includeChildMetrics=true,includeAggregateMetrics" , func (t * testing.T , includeAggregateMetrics bool ) {
50
- pe := metric .MakePrometheusExporter ()
51
- pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (true ), metric .WithIncludeAggregateMetrics (includeAggregateMetrics ))
52
- families , err := pe .Gather ()
85
+ require .Equal (t , 0 , len (families [0 ].GetMetric ()[0 ].GetLabel ())) // The aggregate has no labels.
86
+
87
+ // Add children (app and db label). Now only the childset metric is reported.
88
+ r .ReinitialiseChildMetrics (true , true )
89
+ counter .Inc (1 , "db_foo" , "app_foo" )
90
+ pe = metric .MakePrometheusExporter ()
91
+ pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (true ), metric .WithIncludeAggregateMetrics (false ), metric .WithReinitialisableBugFixEnabled (true ))
92
+ families , err = pe .Gather ()
53
93
require .NoError (t , err )
54
94
require .Equal (t , 1 , len (families ))
55
- require .Equal (t , "counter" , families [0 ].GetName ())
56
- var labelPair * prometheusgo.LabelPair
57
- if includeAggregateMetrics {
58
- require .Equal (t , 2 , len (families [0 ].GetMetric ()))
59
- require .Equal (t , 0 , len (families [0 ].GetMetric ()[0 ].GetLabel ()))
60
- require .Equal (t , 1 , len (families [0 ].GetMetric ()[1 ].GetLabel ()))
61
- labelPair = families [0 ].GetMetric ()[1 ].GetLabel ()[0 ]
62
- } else {
63
- require .Equal (t , 1 , len (families [0 ].GetMetric ()))
64
- require .Equal (t , 1 , len (families [0 ].GetMetric ()[0 ].GetLabel ()))
65
- labelPair = families [0 ].GetMetric ()[0 ].GetLabel ()[0 ]
66
- }
67
- require .Equal (t , "child_label" , * labelPair .Name )
68
- require .Equal (t , "xyz" , * labelPair .Value )
95
+ require .Equal (t , 1 , len (families [0 ].GetMetric ()))
96
+ // Childset metric labels.
97
+ labelPair := families [0 ].GetMetric ()[0 ].GetLabel ()[0 ]
98
+ require .Equal (t , "database" , * labelPair .Name )
99
+ labelPair = families [0 ].GetMetric ()[0 ].GetLabel ()[1 ]
100
+ require .Equal (t , "application_name" , * labelPair .Name )
101
+
102
+ // Enable aggregate. Now reporting two metrics (the aggregate and the childset).
103
+ pe = metric .MakePrometheusExporter ()
104
+ pe .ScrapeRegistry (r , metric .WithIncludeChildMetrics (true ), metric .WithIncludeAggregateMetrics (true ), metric .WithReinitialisableBugFixEnabled (true ))
105
+ families , err = pe .Gather ()
106
+ require .NoError (t , err )
107
+ require .Equal (t , 1 , len (families ))
108
+ require .Equal (t , 2 , len (families [0 ].GetMetric ()))
109
+ require .Equal (t , 0 , len (families [0 ].GetMetric ()[0 ].GetLabel ())) // The aggregate has no labels.
110
+ // Childset metric labels.
111
+ labelPair = families [0 ].GetMetric ()[1 ].GetLabel ()[0 ]
112
+ require .Equal (t , "database" , * labelPair .Name )
113
+ labelPair = families [0 ].GetMetric ()[1 ].GetLabel ()[1 ]
114
+ require .Equal (t , "application_name" , * labelPair .Name )
69
115
})
116
+
70
117
}
71
118
72
119
func TestAggMetric (t * testing.T ) {
0 commit comments