@@ -20,6 +20,26 @@ private class MetricsCounter: CounterHandler {
2020 func reset( ) { }
2121}
2222
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+
2343private class MetricsGauge : RecorderHandler {
2444 let gauge : PromGauge < Double , DimensionLabels >
2545 let labels : DimensionLabels ?
@@ -211,6 +231,11 @@ public struct PrometheusMetricsFactory: PrometheusWrappedMetricsFactory {
211231 guard let handler = handler as? MetricsCounter else { return }
212232 client. removeMetric ( handler. counter)
213233 }
234+
235+ public func destroyFloatingPointCounter( _ handler: FloatingPointCounterHandler ) {
236+ guard let handler = handler as? MetricsFloatingPointCounter else { return }
237+ client. removeMetric ( handler. counter)
238+ }
214239
215240 public func destroyRecorder( _ handler: RecorderHandler ) {
216241 if let handler = handler as? MetricsGauge {
@@ -237,6 +262,12 @@ public struct PrometheusMetricsFactory: PrometheusWrappedMetricsFactory {
237262 let counter = client. createCounter ( forType: Int64 . self, named: label, withLabelType: DimensionLabels . self)
238263 return MetricsCounter ( counter: counter, dimensions: dimensions)
239264 }
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+ }
240271
241272 public func makeRecorder( label: String , dimensions: [ ( String , String ) ] , aggregate: Bool ) -> RecorderHandler {
242273 let label = configuration. labelSanitizer. sanitize ( label)
0 commit comments