Skip to content

Commit 3fb5adb

Browse files
authored
refactor(server): rename metrics to telemetry (#13584)
1 parent b114988 commit 3fb5adb

File tree

8 files changed

+43
-52
lines changed

8 files changed

+43
-52
lines changed

server/src/interfaces/metric.interface.ts server/src/interfaces/telemetry.interface.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { MetricOptions } from '@opentelemetry/api';
22

3-
export const IMetricRepository = 'IMetricRepository';
3+
export const ITelemetryRepository = 'ITelemetryRepository';
44

55
export interface MetricGroupOptions {
66
enabled: boolean;
@@ -13,7 +13,7 @@ export interface IMetricGroupRepository {
1313
configure(options: MetricGroupOptions): this;
1414
}
1515

16-
export interface IMetricRepository {
16+
export interface ITelemetryRepository {
1717
api: IMetricGroupRepository;
1818
host: IMetricGroupRepository;
1919
jobs: IMetricGroupRepository;

server/src/repositories/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { IMapRepository } from 'src/interfaces/map.interface';
1717
import { IMediaRepository } from 'src/interfaces/media.interface';
1818
import { IMemoryRepository } from 'src/interfaces/memory.interface';
1919
import { IMetadataRepository } from 'src/interfaces/metadata.interface';
20-
import { IMetricRepository } from 'src/interfaces/metric.interface';
2120
import { IMoveRepository } from 'src/interfaces/move.interface';
2221
import { INotificationRepository } from 'src/interfaces/notification.interface';
2322
import { IOAuthRepository } from 'src/interfaces/oauth.interface';
@@ -31,6 +30,7 @@ import { IStackRepository } from 'src/interfaces/stack.interface';
3130
import { IStorageRepository } from 'src/interfaces/storage.interface';
3231
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
3332
import { ITagRepository } from 'src/interfaces/tag.interface';
33+
import { ITelemetryRepository } from 'src/interfaces/telemetry.interface';
3434
import { ITrashRepository } from 'src/interfaces/trash.interface';
3535
import { IUserRepository } from 'src/interfaces/user.interface';
3636
import { IVersionHistoryRepository } from 'src/interfaces/version-history.interface';
@@ -54,7 +54,6 @@ import { MapRepository } from 'src/repositories/map.repository';
5454
import { MediaRepository } from 'src/repositories/media.repository';
5555
import { MemoryRepository } from 'src/repositories/memory.repository';
5656
import { MetadataRepository } from 'src/repositories/metadata.repository';
57-
import { MetricRepository } from 'src/repositories/metric.repository';
5857
import { MoveRepository } from 'src/repositories/move.repository';
5958
import { NotificationRepository } from 'src/repositories/notification.repository';
6059
import { OAuthRepository } from 'src/repositories/oauth.repository';
@@ -68,6 +67,7 @@ import { StackRepository } from 'src/repositories/stack.repository';
6867
import { StorageRepository } from 'src/repositories/storage.repository';
6968
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
7069
import { TagRepository } from 'src/repositories/tag.repository';
70+
import { TelemetryRepository } from 'src/repositories/telemetry.repository';
7171
import { TrashRepository } from 'src/repositories/trash.repository';
7272
import { UserRepository } from 'src/repositories/user.repository';
7373
import { VersionHistoryRepository } from 'src/repositories/version-history.repository';
@@ -93,7 +93,6 @@ export const repositories = [
9393
{ provide: IMediaRepository, useClass: MediaRepository },
9494
{ provide: IMemoryRepository, useClass: MemoryRepository },
9595
{ provide: IMetadataRepository, useClass: MetadataRepository },
96-
{ provide: IMetricRepository, useClass: MetricRepository },
9796
{ provide: IMoveRepository, useClass: MoveRepository },
9897
{ provide: INotificationRepository, useClass: NotificationRepository },
9998
{ provide: IOAuthRepository, useClass: OAuthRepository },
@@ -107,6 +106,7 @@ export const repositories = [
107106
{ provide: IStorageRepository, useClass: StorageRepository },
108107
{ provide: ISystemMetadataRepository, useClass: SystemMetadataRepository },
109108
{ provide: ITagRepository, useClass: TagRepository },
109+
{ provide: ITelemetryRepository, useClass: TelemetryRepository },
110110
{ provide: ITrashRepository, useClass: TrashRepository },
111111
{ provide: IUserRepository, useClass: UserRepository },
112112
{ provide: IVersionHistoryRepository, useClass: VersionHistoryRepository },

server/src/repositories/metric.repository.ts server/src/repositories/telemetry.repository.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
22
import { MetricOptions } from '@opentelemetry/api';
33
import { MetricService } from 'nestjs-otel';
44
import { IConfigRepository } from 'src/interfaces/config.interface';
5-
import { IMetricGroupRepository, IMetricRepository, MetricGroupOptions } from 'src/interfaces/metric.interface';
5+
import { IMetricGroupRepository, ITelemetryRepository, MetricGroupOptions } from 'src/interfaces/telemetry.interface';
66

77
class MetricGroupRepository implements IMetricGroupRepository {
88
private enabled = false;
@@ -34,17 +34,19 @@ class MetricGroupRepository implements IMetricGroupRepository {
3434
}
3535

3636
@Injectable()
37-
export class MetricRepository implements IMetricRepository {
37+
export class TelemetryRepository implements ITelemetryRepository {
3838
api: MetricGroupRepository;
3939
host: MetricGroupRepository;
4040
jobs: MetricGroupRepository;
4141
repo: MetricGroupRepository;
4242

4343
constructor(metricService: MetricService, @Inject(IConfigRepository) configRepository: IConfigRepository) {
4444
const { telemetry } = configRepository.getEnv();
45-
this.api = new MetricGroupRepository(metricService).configure({ enabled: telemetry.apiMetrics });
46-
this.host = new MetricGroupRepository(metricService).configure({ enabled: telemetry.hostMetrics });
47-
this.jobs = new MetricGroupRepository(metricService).configure({ enabled: telemetry.jobMetrics });
48-
this.repo = new MetricGroupRepository(metricService).configure({ enabled: telemetry.repoMetrics });
45+
const { apiMetrics, hostMetrics, jobMetrics, repoMetrics } = telemetry;
46+
47+
this.api = new MetricGroupRepository(metricService).configure({ enabled: apiMetrics });
48+
this.host = new MetricGroupRepository(metricService).configure({ enabled: hostMetrics });
49+
this.jobs = new MetricGroupRepository(metricService).configure({ enabled: jobMetrics });
50+
this.repo = new MetricGroupRepository(metricService).configure({ enabled: repoMetrics });
4951
}
5052
}

server/src/services/base.service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { IMapRepository } from 'src/interfaces/map.interface';
2020
import { IMediaRepository } from 'src/interfaces/media.interface';
2121
import { IMemoryRepository } from 'src/interfaces/memory.interface';
2222
import { IMetadataRepository } from 'src/interfaces/metadata.interface';
23-
import { IMetricRepository } from 'src/interfaces/metric.interface';
2423
import { IMoveRepository } from 'src/interfaces/move.interface';
2524
import { INotificationRepository } from 'src/interfaces/notification.interface';
2625
import { IOAuthRepository } from 'src/interfaces/oauth.interface';
@@ -34,6 +33,7 @@ import { IStackRepository } from 'src/interfaces/stack.interface';
3433
import { IStorageRepository } from 'src/interfaces/storage.interface';
3534
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
3635
import { ITagRepository } from 'src/interfaces/tag.interface';
36+
import { ITelemetryRepository } from 'src/interfaces/telemetry.interface';
3737
import { ITrashRepository } from 'src/interfaces/trash.interface';
3838
import { IUserRepository } from 'src/interfaces/user.interface';
3939
import { IVersionHistoryRepository } from 'src/interfaces/version-history.interface';
@@ -64,7 +64,6 @@ export class BaseService {
6464
@Inject(IMediaRepository) protected mediaRepository: IMediaRepository,
6565
@Inject(IMemoryRepository) protected memoryRepository: IMemoryRepository,
6666
@Inject(IMetadataRepository) protected metadataRepository: IMetadataRepository,
67-
@Inject(IMetricRepository) protected metricRepository: IMetricRepository,
6867
@Inject(IMoveRepository) protected moveRepository: IMoveRepository,
6968
@Inject(INotificationRepository) protected notificationRepository: INotificationRepository,
7069
@Inject(IOAuthRepository) protected oauthRepository: IOAuthRepository,
@@ -78,6 +77,7 @@ export class BaseService {
7877
@Inject(IStorageRepository) protected storageRepository: IStorageRepository,
7978
@Inject(ISystemMetadataRepository) protected systemMetadataRepository: ISystemMetadataRepository,
8079
@Inject(ITagRepository) protected tagRepository: ITagRepository,
80+
@Inject(ITelemetryRepository) protected telemetryRepository: ITelemetryRepository,
8181
@Inject(ITrashRepository) protected trashRepository: ITrashRepository,
8282
@Inject(IUserRepository) protected userRepository: IUserRepository,
8383
@Inject(IVersionHistoryRepository) protected versionRepository: IVersionHistoryRepository,

server/src/services/job.service.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ export class JobService extends BaseService {
124124
throw new BadRequestException(`Job is already running`);
125125
}
126126

127-
this.metricRepository.jobs.addToCounter(`immich.queues.${snakeCase(name)}.started`, 1);
127+
this.telemetryRepository.jobs.addToCounter(`immich.queues.${snakeCase(name)}.started`, 1);
128128

129129
switch (name) {
130130
case QueueName.VIDEO_CONVERSION: {
@@ -197,19 +197,19 @@ export class JobService extends BaseService {
197197
}
198198

199199
const queueMetric = `immich.queues.${snakeCase(queueName)}.active`;
200-
this.metricRepository.jobs.addToGauge(queueMetric, 1);
200+
this.telemetryRepository.jobs.addToGauge(queueMetric, 1);
201201

202202
try {
203203
const status = await handler(data);
204204
const jobMetric = `immich.jobs.${name.replaceAll('-', '_')}.${status}`;
205-
this.metricRepository.jobs.addToCounter(jobMetric, 1);
205+
this.telemetryRepository.jobs.addToCounter(jobMetric, 1);
206206
if (status === JobStatus.SUCCESS || status == JobStatus.SKIPPED) {
207207
await this.onDone(item);
208208
}
209209
} catch (error: Error | any) {
210210
this.logger.error(`Unable to run job handler (${queueName}/${name}): ${error}`, error?.stack, data);
211211
} finally {
212-
this.metricRepository.jobs.addToGauge(queueMetric, -1);
212+
this.telemetryRepository.jobs.addToGauge(queueMetric, -1);
213213
}
214214
});
215215
}

server/test/repositories/metric.repository.mock.ts

-31
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { ITelemetryRepository } from 'src/interfaces/telemetry.interface';
2+
import { Mocked, vitest } from 'vitest';
3+
4+
const newMetricGroupMock = () => {
5+
return {
6+
addToCounter: vitest.fn(),
7+
addToGauge: vitest.fn(),
8+
addToHistogram: vitest.fn(),
9+
configure: vitest.fn(),
10+
};
11+
};
12+
13+
export const newTelemetryRepositoryMock = (): Mocked<ITelemetryRepository> => {
14+
return {
15+
api: newMetricGroupMock(),
16+
host: newMetricGroupMock(),
17+
jobs: newMetricGroupMock(),
18+
repo: newMetricGroupMock(),
19+
};
20+
};

server/test/utils.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { newMapRepositoryMock } from 'test/repositories/map.repository.mock';
2020
import { newMediaRepositoryMock } from 'test/repositories/media.repository.mock';
2121
import { newMemoryRepositoryMock } from 'test/repositories/memory.repository.mock';
2222
import { newMetadataRepositoryMock } from 'test/repositories/metadata.repository.mock';
23-
import { newMetricRepositoryMock } from 'test/repositories/metric.repository.mock';
2423
import { newMoveRepositoryMock } from 'test/repositories/move.repository.mock';
2524
import { newNotificationRepositoryMock } from 'test/repositories/notification.repository.mock';
2625
import { newOAuthRepositoryMock } from 'test/repositories/oauth.repository.mock';
@@ -34,6 +33,7 @@ import { newStackRepositoryMock } from 'test/repositories/stack.repository.mock'
3433
import { newStorageRepositoryMock } from 'test/repositories/storage.repository.mock';
3534
import { newSystemMetadataRepositoryMock } from 'test/repositories/system-metadata.repository.mock';
3635
import { newTagRepositoryMock } from 'test/repositories/tag.repository.mock';
36+
import { newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock';
3737
import { newTrashRepositoryMock } from 'test/repositories/trash.repository.mock';
3838
import { newUserRepositoryMock } from 'test/repositories/user.repository.mock';
3939
import { newVersionHistoryRepositoryMock } from 'test/repositories/version-history.repository.mock';
@@ -73,7 +73,6 @@ export const newTestService = <T extends BaseService>(
7373
const mediaMock = newMediaRepositoryMock();
7474
const memoryMock = newMemoryRepositoryMock();
7575
const metadataMock = (metadataRepository || newMetadataRepositoryMock()) as Mocked<IMetadataRepository>;
76-
const metricMock = newMetricRepositoryMock();
7776
const moveMock = newMoveRepositoryMock();
7877
const notificationMock = newNotificationRepositoryMock();
7978
const oauthMock = newOAuthRepositoryMock();
@@ -87,6 +86,7 @@ export const newTestService = <T extends BaseService>(
8786
const storageMock = newStorageRepositoryMock();
8887
const systemMock = newSystemMetadataRepositoryMock();
8988
const tagMock = newTagRepositoryMock();
89+
const telemetryMock = newTelemetryRepositoryMock();
9090
const trashMock = newTrashRepositoryMock();
9191
const userMock = newUserRepositoryMock();
9292
const versionHistoryMock = newVersionHistoryRepositoryMock();
@@ -112,7 +112,6 @@ export const newTestService = <T extends BaseService>(
112112
mediaMock,
113113
memoryMock,
114114
metadataMock,
115-
metricMock,
116115
moveMock,
117116
notificationMock,
118117
oauthMock,
@@ -126,6 +125,7 @@ export const newTestService = <T extends BaseService>(
126125
storageMock,
127126
systemMock,
128127
tagMock,
128+
telemetryMock,
129129
trashMock,
130130
userMock,
131131
versionHistoryMock,
@@ -153,7 +153,6 @@ export const newTestService = <T extends BaseService>(
153153
mediaMock,
154154
memoryMock,
155155
metadataMock,
156-
metricMock,
157156
moveMock,
158157
notificationMock,
159158
oauthMock,
@@ -167,6 +166,7 @@ export const newTestService = <T extends BaseService>(
167166
storageMock,
168167
systemMock,
169168
tagMock,
169+
telemetryMock,
170170
trashMock,
171171
userMock,
172172
versionHistoryMock,

0 commit comments

Comments
 (0)