@@ -128,11 +128,11 @@ func newMetricStage(logger log.Logger, config interface{}, registry prometheus.R
128
128
metrics [name ] = collector
129
129
}
130
130
}
131
- return toStage ( & metricStage {
131
+ return & metricStage {
132
132
logger : logger ,
133
133
cfg : * cfgs ,
134
134
metrics : metrics ,
135
- }) , nil
135
+ }, nil
136
136
}
137
137
138
138
// metricStage creates and updates prometheus metrics based on extracted pipeline data
@@ -142,6 +142,19 @@ type metricStage struct {
142
142
metrics map [string ]prometheus.Collector
143
143
}
144
144
145
+ func (m * metricStage ) Run (in chan Entry ) chan Entry {
146
+ out := make (chan Entry )
147
+ go func () {
148
+ defer close (out )
149
+
150
+ for e := range in {
151
+ m .Process (e .Labels , e .Extracted , & e .Timestamp , & e .Line )
152
+ out <- e
153
+ }
154
+ }()
155
+ return out
156
+ }
157
+
145
158
// Process implements Stage
146
159
func (m * metricStage ) Process (labels model.LabelSet , extracted map [string ]interface {}, _ * time.Time , entry * string ) {
147
160
for name , collector := range m .metrics {
@@ -178,6 +191,20 @@ func (m *metricStage) Name() string {
178
191
return StageTypeMetric
179
192
}
180
193
194
+ // Cleanup implements Stage.
195
+ func (m * metricStage ) Cleanup () {
196
+ for _ , collector := range m .metrics {
197
+ switch vec := collector .(type ) {
198
+ case * metric.Counters :
199
+ vec .DeleteAll ()
200
+ case * metric.Gauges :
201
+ vec .DeleteAll ()
202
+ case * metric.Histograms :
203
+ vec .DeleteAll ()
204
+ }
205
+ }
206
+ }
207
+
181
208
// recordCounter will update a counter metric
182
209
// nolint:goconst
183
210
func (m * metricStage ) recordCounter (name string , counter * metric.Counters , labels model.LabelSet , v interface {}) {
0 commit comments