Skip to content

Commit 7e0cf8f

Browse files
authored
Merge pull request #55 from MrLotU/feature/floating-point-counter
Add floating point counter
2 parents e85499c + 41247dc commit 7e0cf8f

File tree

4 files changed

+50
-3
lines changed

4 files changed

+50
-3
lines changed

Package.resolved

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"repositoryURL": "https://github.com/apple/swift-metrics.git",
77
"state": {
88
"branch": null,
9-
"revision": "708b960b4605abb20bc55d65abf6bad607252200",
10-
"version": "2.0.0"
9+
"revision": "3edd2f57afc4e68e23c3e4956bc8b65ca6b5b2ff",
10+
"version": "2.2.0"
1111
}
1212
},
1313
{

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ let package = Package(
1313
targets: ["PrometheusExample"]),
1414
],
1515
dependencies: [
16-
.package(url: "https://github.com/apple/swift-metrics.git", from: "2.0.0"),
16+
.package(url: "https://github.com/apple/swift-metrics.git", from: "2.2.0"),
1717
.package(url: "https://github.com/apple/swift-nio.git", from: "2.0.0"),
1818
],
1919
targets: [

Sources/Prometheus/PrometheusMetrics.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2343
private 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)

Tests/SwiftPrometheusTests/PrometheusMetricsTests.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,22 @@ final class PrometheusMetricsTests: XCTestCase {
4545
""")
4646
}
4747

48+
func testFloatingPointCounter() {
49+
let counter = FloatingPointCounter(label: "my_fp_counter")
50+
counter.increment(by: 3.5)
51+
let counterTwo = FloatingPointCounter(label: "my_fp_counter", dimensions: [("myValue", "labels")])
52+
counterTwo.increment(by: 10.4)
53+
54+
let promise = self.eventLoop.makePromise(of: String.self)
55+
prom.collect(promise.succeed)
56+
57+
XCTAssertEqual(try! promise.futureResult.wait(), """
58+
# TYPE my_fp_counter counter
59+
my_fp_counter 3.5
60+
my_fp_counter{myValue=\"labels\"} 10.4\n
61+
""")
62+
}
63+
4864
func testMetricDestroying() {
4965
let counter = Counter(label: "my_counter")
5066
counter.increment()

0 commit comments

Comments
 (0)