Skip to content

Commit

Permalink
Make Gauge a Meter and add test
Browse files Browse the repository at this point in the history
  • Loading branch information
ptoffy committed Nov 25, 2024
1 parent 19823fa commit d3256eb
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 7 deletions.
12 changes: 6 additions & 6 deletions Sources/Queues/QueueWorker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ public struct QueueWorker: Sendable {
try await $0.didDequeue(jobId: id.string, eventLoop: self.queue.eventLoop).get()
}

Gauge(
label: "jobs.in.progress.gauge",
Meter(
label: "jobs.in.progress.meter",
dimensions: [("queueName", self.queue.queueName.string)]
).record(1)
).increment()

try await self.runOneJob(id: id, job: job, jobData: data, logger: logger)
return true
Expand Down Expand Up @@ -148,9 +148,9 @@ public struct QueueWorker: Sendable {
).increment()
}

Gauge(
label: "jobs.in.progress.gauge",
Meter(
label: "jobs.in.progress.meter",
dimensions: [("queueName", queue.queueName.string)]
).record(-1)
).decrement()
}
}
27 changes: 26 additions & 1 deletion Tests/QueuesTests/MetricsTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ final class MetricsTests: XCTestCase {

try await self.app.queues.queue.worker.run()

let timer = try XCTUnwrap(self.metrics.timers.first(where: { $0.label == "MyAsyncJob.jobDurationTimer" }))
let timer = try XCTUnwrap(self.metrics.timers.first(where: { $0.label == "MyAsyncJob.duration.timer" }))
let successDimension = try XCTUnwrap(timer.dimensions.first(where: { $0.0 == "success" }))
let idDimension = try XCTUnwrap(timer.dimensions.first(where: { $0.0 == "jobName" }))
XCTAssertEqual(successDimension.1, "true")
Expand All @@ -66,6 +66,7 @@ final class MetricsTests: XCTestCase {
let counter = try XCTUnwrap(self.metrics.counters.first(where: { $0.label == "success.completed.jobs.counter" }))
let queueNameDimension = try XCTUnwrap(counter.dimensions.first(where: { $0.0 == "queueName" }))
XCTAssertEqual(queueNameDimension.1, self.app.queues.queue.queueName.string)
XCTAssertEqual(counter.lastValue, 1)
}

func testErroringJobsCounter() async throws {
Expand All @@ -86,6 +87,7 @@ final class MetricsTests: XCTestCase {
let counter = try XCTUnwrap(self.metrics.counters.first(where: { $0.label == "error.completed.jobs.counter" }))
let queueNameDimension = try XCTUnwrap(counter.dimensions.first(where: { $0.0 == "queueName" }))
XCTAssertEqual(queueNameDimension.1, self.app.queues.queue.queueName.string)
XCTAssertEqual(counter.lastValue, 1)
}

func testDispatchedJobsCounter() async throws {
Expand All @@ -110,5 +112,28 @@ final class MetricsTests: XCTestCase {
let jobNameDimension = try XCTUnwrap(counter.dimensions.first(where: { $0.0 == "jobName" }))
XCTAssertEqual(queueNameDimension.1, self.app.queues.queue.queueName.string)
XCTAssertEqual(jobNameDimension.1, MyAsyncJob.name)
XCTAssertEqual(counter.totalValue, 2)
}

func testInProgressJobsGauge() async throws {
let promise = self.app.eventLoopGroup.next().makePromise(of: Void.self)
self.app.queues.add(MyAsyncJob(promise: promise))

self.app.get("foo") { req async throws in
try await req.queue.dispatch(MyAsyncJob.self, .init(foo: "bar"))
return "done"
}

try await self.app.testable().test(.GET, "foo") { res async in
XCTAssertEqual(res.status, .ok)
XCTAssertEqual(res.body.string, "done")
}

try await self.app.queues.queue.worker.run()

let meter = try XCTUnwrap(self.metrics.meters.first(where: { $0.label == "jobs.in.progress.meter" }))
let queueNameDimension = try XCTUnwrap(meter.dimensions.first(where: { $0.0 == "queueName" }))
XCTAssertEqual(queueNameDimension.1, self.app.queues.queue.queueName.string)
XCTAssertEqual(meter.values, [1, 0])
}
}

0 comments on commit d3256eb

Please sign in to comment.