diff --git a/Sources/CoreMetrics/Metrics.swift b/Sources/CoreMetrics/Metrics.swift index 57ecd01..b743843 100644 --- a/Sources/CoreMetrics/Metrics.swift +++ b/Sources/CoreMetrics/Metrics.swift @@ -267,6 +267,15 @@ public class Timer { self.handler.recordNanoseconds(duration) } + /// Record a duration in nanoseconds. + /// + /// - parameters: + /// - value: Duration to record. + @inlinable + public func recordNanoseconds(_ duration: DataType) { + self.recordNanoseconds(duration >= Int64.max ? Int64.max : Int64(duration)) + } + /// Record a duration in microseconds. /// /// - parameters: diff --git a/Sources/Metrics/Metrics.swift b/Sources/Metrics/Metrics.swift index 96dce34..dd5d311 100644 --- a/Sources/Metrics/Metrics.swift +++ b/Sources/Metrics/Metrics.swift @@ -52,7 +52,7 @@ public extension Timer { func record(_ duration: DispatchTimeInterval) { switch duration { case .nanoseconds(let value): - self.recordNanoseconds(Int64(value)) + self.recordNanoseconds(value) case .microseconds(let value): self.recordMicroseconds(value) case .milliseconds(let value): diff --git a/Tests/MetricsTests/CoreMetricsTests.swift b/Tests/MetricsTests/CoreMetricsTests.swift index 804e956..ddb38f5 100644 --- a/Tests/MetricsTests/CoreMetricsTests.swift +++ b/Tests/MetricsTests/CoreMetricsTests.swift @@ -224,18 +224,22 @@ class MetricsTests: XCTestCase { // run the test let timer = Timer(label: "test-timer") let testTimer = timer.handler as! TestTimer - // micro - timer.recordMicroseconds(UInt64.max) + // nano + timer.recordNanoseconds(UInt64.max) XCTAssertEqual(testTimer.values.count, 1, "expected number of entries to match") XCTAssertEqual(testTimer.values[0].1, Int64.max, "expected value to match") - // milli - timer.recordMilliseconds(UInt64.max) + // micro + timer.recordMicroseconds(UInt64.max) XCTAssertEqual(testTimer.values.count, 2, "expected number of entries to match") XCTAssertEqual(testTimer.values[1].1, Int64.max, "expected value to match") - // seconds - timer.recordSeconds(UInt64.max) + // milli + timer.recordMilliseconds(UInt64.max) XCTAssertEqual(testTimer.values.count, 3, "expected number of entries to match") XCTAssertEqual(testTimer.values[2].1, Int64.max, "expected value to match") + // seconds + timer.recordSeconds(UInt64.max) + XCTAssertEqual(testTimer.values.count, 4, "expected number of entries to match") + XCTAssertEqual(testTimer.values[3].1, Int64.max, "expected value to match") } func testGauge() throws {