diff --git a/packages/backend/server/src/base/job/queue/__tests__/__snapshots__/queue.spec.ts.md b/packages/backend/server/src/base/job/queue/__tests__/__snapshots__/queue.spec.ts.md new file mode 100644 index 0000000000..96b2ef1a39 --- /dev/null +++ b/packages/backend/server/src/base/job/queue/__tests__/__snapshots__/queue.spec.ts.md @@ -0,0 +1,88 @@ +# Snapshot report for `src/base/job/queue/__tests__/queue.spec.ts` + +The actual snapshot is saved in `queue.spec.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## should be able to record job metrics + +> [+1 active jobs, job handler, -1 active jobs] + + [ + [ + 1, + { + queue: 'nightly', + }, + ], + [ + 1, + { + error: false, + handler: 'JobHandlers.handleJob', + job: 'nightly.__test__job', + name: 'job_handler', + namespace: 'nightly', + }, + ], + [ + -1, + { + queue: 'nightly', + }, + ], + ] + +> [+1 active jobs, job handler, -1 active jobs] + + [ + [ + 1, + { + queue: 'nightly', + }, + ], + [ + 1, + { + error: false, + handler: 'JobHandlers.handleJob', + job: 'nightly.__test__job2', + name: 'job_handler', + namespace: 'nightly', + }, + ], + [ + -1, + { + queue: 'nightly', + }, + ], + ] + +> [+1 active jobs, job handler errored, -1 active jobs] + + [ + [ + 1, + { + queue: 'nightly', + }, + ], + [ + 1, + { + error: true, + handler: 'JobHandlers.throwJob', + job: 'nightly.__test__throw', + name: 'job_handler', + namespace: 'nightly', + }, + ], + [ + -1, + { + queue: 'nightly', + }, + ], + ] diff --git a/packages/backend/server/src/base/job/queue/__tests__/__snapshots__/queue.spec.ts.snap b/packages/backend/server/src/base/job/queue/__tests__/__snapshots__/queue.spec.ts.snap new file mode 100644 index 0000000000..a6390e1d64 Binary files /dev/null and b/packages/backend/server/src/base/job/queue/__tests__/__snapshots__/queue.spec.ts.snap differ diff --git a/packages/backend/server/src/base/job/queue/__tests__/queue.spec.ts b/packages/backend/server/src/base/job/queue/__tests__/queue.spec.ts index 1eeb40a3da..5e9abda8b9 100644 --- a/packages/backend/server/src/base/job/queue/__tests__/queue.spec.ts +++ b/packages/backend/server/src/base/job/queue/__tests__/queue.spec.ts @@ -148,22 +148,18 @@ test('should dispatch job handler', async t => { }); test('should be able to record job metrics', async t => { - const counterStub = Sinon.stub(metrics.job.counter('function_calls'), 'add'); + const counterStub = Sinon.stub( + metrics.queue.counter('function_calls'), + 'add' + ); const timerStub = Sinon.stub( - metrics.job.histogram('function_timer'), + metrics.queue.histogram('function_timer'), 'record' ); await executor.run('nightly.__test__job', { name: 'test executor' }); - t.deepEqual(counterStub.firstCall.args[1], { - name: 'job_handler', - job: 'nightly.__test__job', - namespace: 'nightly', - handler: 'JobHandlers.handleJob', - error: false, - }); - + t.snapshot(counterStub.args, '[+1 active jobs, job handler, -1 active jobs]'); t.deepEqual(timerStub.firstCall.args[1], { name: 'job_handler', job: 'nightly.__test__job', @@ -177,14 +173,7 @@ test('should be able to record job metrics', async t => { await executor.run('nightly.__test__job2', { name: 'test executor' }); - t.deepEqual(counterStub.firstCall.args[1], { - name: 'job_handler', - job: 'nightly.__test__job2', - namespace: 'nightly', - handler: 'JobHandlers.handleJob', - error: false, - }); - + t.snapshot(counterStub.args, '[+1 active jobs, job handler, -1 active jobs]'); t.deepEqual(timerStub.firstCall.args[1], { name: 'job_handler', job: 'nightly.__test__job2', @@ -203,14 +192,10 @@ test('should be able to record job metrics', async t => { } ); - t.deepEqual(counterStub.firstCall.args[1], { - name: 'job_handler', - job: 'nightly.__test__throw', - namespace: 'nightly', - handler: 'JobHandlers.throwJob', - error: true, - }); - + t.snapshot( + counterStub.args, + '[+1 active jobs, job handler errored, -1 active jobs]' + ); t.deepEqual(timerStub.firstCall.args[1], { name: 'job_handler', job: 'nightly.__test__throw', diff --git a/packages/backend/server/src/base/job/queue/executor.ts b/packages/backend/server/src/base/job/queue/executor.ts index 74863a42a6..10efd8aaed 100644 --- a/packages/backend/server/src/base/job/queue/executor.ts +++ b/packages/backend/server/src/base/job/queue/executor.ts @@ -77,7 +77,7 @@ export class JobExecutor } }); }, - 'job', + 'queue', 'job_handler', { job: name, @@ -85,12 +85,12 @@ export class JobExecutor handler: handler.name, } ); - const activeJobs = metrics.job.gauge('queue_active_jobs'); - activeJobs.record(1, { queue: ns }); + const activeJobs = metrics.queue.counter('active_jobs'); + activeJobs.add(1, { queue: ns }); try { return await fn(); } finally { - activeJobs.record(-1, { queue: ns }); + activeJobs.add(-1, { queue: ns }); } } diff --git a/packages/backend/server/src/base/metrics/metrics.ts b/packages/backend/server/src/base/metrics/metrics.ts index 84a7239dc1..74432c07cd 100644 --- a/packages/backend/server/src/base/metrics/metrics.ts +++ b/packages/backend/server/src/base/metrics/metrics.ts @@ -1,16 +1,16 @@ import { - Counter, Gauge, Histogram, Meter, MetricOptions, + UpDownCounter, } from '@opentelemetry/api'; import { getMeter } from './opentelemetry'; type MetricType = 'counter' | 'gauge' | 'histogram'; type Metric = T extends 'counter' - ? Counter + ? UpDownCounter : T extends 'gauge' ? Gauge : T extends 'histogram' @@ -18,7 +18,7 @@ type Metric = T extends 'counter' : never; export type ScopedMetrics = { - counter: (name: string, opts?: MetricOptions) => Counter; + counter: (name: string, opts?: MetricOptions) => UpDownCounter; gauge: (name: string, opts?: MetricOptions) => Gauge; histogram: (name: string, opts?: MetricOptions) => Histogram; }; @@ -42,7 +42,7 @@ export type KnownMetricScopes = | 'mail' | 'ai' | 'event' - | 'job'; + | 'queue'; const metricCreators: MetricCreators = { counter(meter: Meter, name: string, opts?: MetricOptions) { diff --git a/packages/backend/server/src/core/sync/gateway.ts b/packages/backend/server/src/core/sync/gateway.ts index e56dc87209..e960fd562d 100644 --- a/packages/backend/server/src/core/sync/gateway.ts +++ b/packages/backend/server/src/core/sync/gateway.ts @@ -153,13 +153,13 @@ export class SpaceSyncGateway handleConnection() { this.connectionCount++; this.logger.log(`New connection, total: ${this.connectionCount}`); - metrics.socketio.gauge('connections').record(1); + metrics.socketio.gauge('connections').record(this.connectionCount); } handleDisconnect() { this.connectionCount--; this.logger.log(`Connection disconnected, total: ${this.connectionCount}`); - metrics.socketio.gauge('connections').record(-1); + metrics.socketio.gauge('connections').record(this.connectionCount); } selectAdapter(client: Socket, spaceType: SpaceType): SyncSocketAdapter {