mirror of https://github.com/immich-app/immich.git
refactor(server): metric repo (#8278)
* refactor * redundant `implements` * simplify * remove `enabled`pull/8281/head
parent
c56c04a82b
commit
c45e28ab53
@ -1,13 +1,21 @@
|
||||
import { MetricOptions } from '@opentelemetry/api';
|
||||
|
||||
export interface CustomMetricOptions extends MetricOptions {
|
||||
enabled?: boolean;
|
||||
export const IMetricRepository = 'IMetricRepository';
|
||||
|
||||
export interface MetricGroupOptions {
|
||||
enabled: boolean;
|
||||
}
|
||||
|
||||
export const IMetricRepository = 'IMetricRepository';
|
||||
export interface IMetricGroupRepository {
|
||||
addToCounter(name: string, value: number, options?: MetricOptions): void;
|
||||
addToGauge(name: string, value: number, options?: MetricOptions): void;
|
||||
addToHistogram(name: string, value: number, options?: MetricOptions): void;
|
||||
configure(options: MetricGroupOptions): this;
|
||||
}
|
||||
|
||||
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;
|
||||
api: IMetricGroupRepository;
|
||||
host: IMetricGroupRepository;
|
||||
jobs: IMetricGroupRepository;
|
||||
repo: IMetricGroupRepository;
|
||||
}
|
||||
|
||||
@ -1,31 +1,48 @@
|
||||
import { Inject } from '@nestjs/common';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { MetricOptions } from '@opentelemetry/api';
|
||||
import { MetricService } from 'nestjs-otel';
|
||||
import { CustomMetricOptions, IMetricRepository } from 'src/interfaces/metric.interface';
|
||||
import { IMetricGroupRepository, IMetricRepository, MetricGroupOptions } from 'src/interfaces/metric.interface';
|
||||
import { apiMetrics, hostMetrics, jobMetrics, repoMetrics } from 'src/utils/instrumentation';
|
||||
|
||||
export class MetricRepository implements IMetricRepository {
|
||||
constructor(@Inject(MetricService) private readonly metricService: MetricService) {}
|
||||
class MetricGroupRepository implements IMetricGroupRepository {
|
||||
private enabled = false;
|
||||
constructor(private readonly metricService: MetricService) {}
|
||||
|
||||
addToCounter(name: string, value: number, options?: CustomMetricOptions): void {
|
||||
if (options?.enabled === false) {
|
||||
return;
|
||||
addToCounter(name: string, value: number, options?: MetricOptions): void {
|
||||
if (this.enabled) {
|
||||
this.metricService.getCounter(name, options).add(value);
|
||||
}
|
||||
}
|
||||
|
||||
this.metricService.getCounter(name, options).add(value);
|
||||
addToGauge(name: string, value: number, options?: MetricOptions): void {
|
||||
if (this.enabled) {
|
||||
this.metricService.getUpDownCounter(name, options).add(value);
|
||||
}
|
||||
}
|
||||
|
||||
updateGauge(name: string, value: number, options?: CustomMetricOptions): void {
|
||||
if (options?.enabled === false) {
|
||||
return;
|
||||
addToHistogram(name: string, value: number, options?: MetricOptions): void {
|
||||
if (this.enabled) {
|
||||
this.metricService.getHistogram(name, options).record(value);
|
||||
}
|
||||
}
|
||||
|
||||
this.metricService.getUpDownCounter(name, options).add(value);
|
||||
configure(options: MetricGroupOptions): this {
|
||||
this.enabled = options.enabled;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
updateHistogram(name: string, value: number, options?: CustomMetricOptions): void {
|
||||
if (options?.enabled === false) {
|
||||
return;
|
||||
}
|
||||
@Injectable()
|
||||
export class MetricRepository implements IMetricRepository {
|
||||
api: MetricGroupRepository;
|
||||
host: MetricGroupRepository;
|
||||
jobs: MetricGroupRepository;
|
||||
repo: MetricGroupRepository;
|
||||
|
||||
this.metricService.getHistogram(name, options).record(value);
|
||||
constructor(metricService: MetricService) {
|
||||
this.api = new MetricGroupRepository(metricService).configure({ enabled: apiMetrics });
|
||||
this.host = new MetricGroupRepository(metricService).configure({ enabled: hostMetrics });
|
||||
this.jobs = new MetricGroupRepository(metricService).configure({ enabled: jobMetrics });
|
||||
this.repo = new MetricGroupRepository(metricService).configure({ enabled: repoMetrics });
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue