mirror of https://github.com/immich-app/immich.git
feat(server): job metrics (#8255)
* metric repo * add metric repo * remove unused import * formatting * fix * try disabling job metrics for e2e * import otel in test modulepull/8257/head
parent
1855aaea99
commit
c58a70ac8f
@ -0,0 +1,13 @@
|
||||
import { MetricOptions } from '@opentelemetry/api';
|
||||
|
||||
export interface CustomMetricOptions extends MetricOptions {
|
||||
enabled?: boolean;
|
||||
}
|
||||
|
||||
export const IMetricRepository = 'IMetricRepository';
|
||||
|
||||
export interface IMetricRepository {
|
||||
addToCounter(name: string, value: number, options?: CustomMetricOptions): void;
|
||||
updateGauge(name: string, value: number, options?: CustomMetricOptions): void;
|
||||
updateHistogram(name: string, value: number, options?: CustomMetricOptions): void;
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
import { Inject } from '@nestjs/common';
|
||||
import { MetricService } from 'nestjs-otel';
|
||||
import { CustomMetricOptions, IMetricRepository } from 'src/interfaces/metric.interface';
|
||||
|
||||
export class MetricRepository implements IMetricRepository {
|
||||
constructor(@Inject(MetricService) private readonly metricService: MetricService) {}
|
||||
|
||||
addToCounter(name: string, value: number, options?: CustomMetricOptions): void {
|
||||
if (options?.enabled === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.metricService.getCounter(name, options).add(value);
|
||||
}
|
||||
|
||||
updateGauge(name: string, value: number, options?: CustomMetricOptions): void {
|
||||
if (options?.enabled === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.metricService.getUpDownCounter(name, options).add(value);
|
||||
}
|
||||
|
||||
updateHistogram(name: string, value: number, options?: CustomMetricOptions): void {
|
||||
if (options?.enabled === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.metricService.getHistogram(name, options).record(value);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
import { IMetricRepository } from 'src/interfaces/metric.interface';
|
||||
|
||||
export const newMetricRepositoryMock = (): jest.Mocked<IMetricRepository> => {
|
||||
return {
|
||||
addToCounter: jest.fn(),
|
||||
updateGauge: jest.fn(),
|
||||
updateHistogram: jest.fn(),
|
||||
};
|
||||
};
|
||||
Loading…
Reference in New Issue