@@ -20,6 +20,26 @@ private class MetricsCounter: CounterHandler {
20
20
func reset( ) { }
21
21
}
22
22
23
+ private class MetricsFloatingPointCounter : FloatingPointCounterHandler {
24
+ let counter : PromCounter < Double , DimensionLabels >
25
+ let labels : DimensionLabels ?
26
+
27
+ internal init ( counter: PromCounter < Double , DimensionLabels > , dimensions: [ ( String , String ) ] ) {
28
+ self . counter = counter
29
+ guard !dimensions. isEmpty else {
30
+ labels = nil
31
+ return
32
+ }
33
+ self . labels = DimensionLabels ( dimensions)
34
+ }
35
+
36
+ func increment( by: Double ) {
37
+ self . counter. inc ( by, labels)
38
+ }
39
+
40
+ func reset( ) { }
41
+ }
42
+
23
43
private class MetricsGauge : RecorderHandler {
24
44
let gauge : PromGauge < Double , DimensionLabels >
25
45
let labels : DimensionLabels ?
@@ -211,6 +231,11 @@ public struct PrometheusMetricsFactory: PrometheusWrappedMetricsFactory {
211
231
guard let handler = handler as? MetricsCounter else { return }
212
232
client. removeMetric ( handler. counter)
213
233
}
234
+
235
+ public func destroyFloatingPointCounter( _ handler: FloatingPointCounterHandler ) {
236
+ guard let handler = handler as? MetricsFloatingPointCounter else { return }
237
+ client. removeMetric ( handler. counter)
238
+ }
214
239
215
240
public func destroyRecorder( _ handler: RecorderHandler ) {
216
241
if let handler = handler as? MetricsGauge {
@@ -237,6 +262,12 @@ public struct PrometheusMetricsFactory: PrometheusWrappedMetricsFactory {
237
262
let counter = client. createCounter ( forType: Int64 . self, named: label, withLabelType: DimensionLabels . self)
238
263
return MetricsCounter ( counter: counter, dimensions: dimensions)
239
264
}
265
+
266
+ public func makeFloatingPointCounter( label: String , dimensions: [ ( String , String ) ] ) -> FloatingPointCounterHandler {
267
+ let label = configuration. labelSanitizer. sanitize ( label)
268
+ let counter = client. createCounter ( forType: Double . self, named: label, withLabelType: DimensionLabels . self)
269
+ return MetricsFloatingPointCounter ( counter: counter, dimensions: dimensions)
270
+ }
240
271
241
272
public func makeRecorder( label: String , dimensions: [ ( String , String ) ] , aggregate: Bool ) -> RecorderHandler {
242
273
let label = configuration. labelSanitizer. sanitize ( label)
0 commit comments