mirror of
https://github.com/immich-app/immich.git
synced 2024-12-29 15:11:58 +00:00
refactor(server): rename metrics to telemetry (#13584)
This commit is contained in:
parent
b1149881bd
commit
3fb5adb31c
8 changed files with 43 additions and 52 deletions
|
@ -1,6 +1,6 @@
|
||||||
import { MetricOptions } from '@opentelemetry/api';
|
import { MetricOptions } from '@opentelemetry/api';
|
||||||
|
|
||||||
export const IMetricRepository = 'IMetricRepository';
|
export const ITelemetryRepository = 'ITelemetryRepository';
|
||||||
|
|
||||||
export interface MetricGroupOptions {
|
export interface MetricGroupOptions {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
|
@ -13,7 +13,7 @@ export interface IMetricGroupRepository {
|
||||||
configure(options: MetricGroupOptions): this;
|
configure(options: MetricGroupOptions): this;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IMetricRepository {
|
export interface ITelemetryRepository {
|
||||||
api: IMetricGroupRepository;
|
api: IMetricGroupRepository;
|
||||||
host: IMetricGroupRepository;
|
host: IMetricGroupRepository;
|
||||||
jobs: IMetricGroupRepository;
|
jobs: IMetricGroupRepository;
|
|
@ -17,7 +17,6 @@ import { IMapRepository } from 'src/interfaces/map.interface';
|
||||||
import { IMediaRepository } from 'src/interfaces/media.interface';
|
import { IMediaRepository } from 'src/interfaces/media.interface';
|
||||||
import { IMemoryRepository } from 'src/interfaces/memory.interface';
|
import { IMemoryRepository } from 'src/interfaces/memory.interface';
|
||||||
import { IMetadataRepository } from 'src/interfaces/metadata.interface';
|
import { IMetadataRepository } from 'src/interfaces/metadata.interface';
|
||||||
import { IMetricRepository } from 'src/interfaces/metric.interface';
|
|
||||||
import { IMoveRepository } from 'src/interfaces/move.interface';
|
import { IMoveRepository } from 'src/interfaces/move.interface';
|
||||||
import { INotificationRepository } from 'src/interfaces/notification.interface';
|
import { INotificationRepository } from 'src/interfaces/notification.interface';
|
||||||
import { IOAuthRepository } from 'src/interfaces/oauth.interface';
|
import { IOAuthRepository } from 'src/interfaces/oauth.interface';
|
||||||
|
@ -31,6 +30,7 @@ import { IStackRepository } from 'src/interfaces/stack.interface';
|
||||||
import { IStorageRepository } from 'src/interfaces/storage.interface';
|
import { IStorageRepository } from 'src/interfaces/storage.interface';
|
||||||
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
|
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
|
||||||
import { ITagRepository } from 'src/interfaces/tag.interface';
|
import { ITagRepository } from 'src/interfaces/tag.interface';
|
||||||
|
import { ITelemetryRepository } from 'src/interfaces/telemetry.interface';
|
||||||
import { ITrashRepository } from 'src/interfaces/trash.interface';
|
import { ITrashRepository } from 'src/interfaces/trash.interface';
|
||||||
import { IUserRepository } from 'src/interfaces/user.interface';
|
import { IUserRepository } from 'src/interfaces/user.interface';
|
||||||
import { IVersionHistoryRepository } from 'src/interfaces/version-history.interface';
|
import { IVersionHistoryRepository } from 'src/interfaces/version-history.interface';
|
||||||
|
@ -54,7 +54,6 @@ import { MapRepository } from 'src/repositories/map.repository';
|
||||||
import { MediaRepository } from 'src/repositories/media.repository';
|
import { MediaRepository } from 'src/repositories/media.repository';
|
||||||
import { MemoryRepository } from 'src/repositories/memory.repository';
|
import { MemoryRepository } from 'src/repositories/memory.repository';
|
||||||
import { MetadataRepository } from 'src/repositories/metadata.repository';
|
import { MetadataRepository } from 'src/repositories/metadata.repository';
|
||||||
import { MetricRepository } from 'src/repositories/metric.repository';
|
|
||||||
import { MoveRepository } from 'src/repositories/move.repository';
|
import { MoveRepository } from 'src/repositories/move.repository';
|
||||||
import { NotificationRepository } from 'src/repositories/notification.repository';
|
import { NotificationRepository } from 'src/repositories/notification.repository';
|
||||||
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
||||||
|
@ -68,6 +67,7 @@ import { StackRepository } from 'src/repositories/stack.repository';
|
||||||
import { StorageRepository } from 'src/repositories/storage.repository';
|
import { StorageRepository } from 'src/repositories/storage.repository';
|
||||||
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
||||||
import { TagRepository } from 'src/repositories/tag.repository';
|
import { TagRepository } from 'src/repositories/tag.repository';
|
||||||
|
import { TelemetryRepository } from 'src/repositories/telemetry.repository';
|
||||||
import { TrashRepository } from 'src/repositories/trash.repository';
|
import { TrashRepository } from 'src/repositories/trash.repository';
|
||||||
import { UserRepository } from 'src/repositories/user.repository';
|
import { UserRepository } from 'src/repositories/user.repository';
|
||||||
import { VersionHistoryRepository } from 'src/repositories/version-history.repository';
|
import { VersionHistoryRepository } from 'src/repositories/version-history.repository';
|
||||||
|
@ -93,7 +93,6 @@ export const repositories = [
|
||||||
{ provide: IMediaRepository, useClass: MediaRepository },
|
{ provide: IMediaRepository, useClass: MediaRepository },
|
||||||
{ provide: IMemoryRepository, useClass: MemoryRepository },
|
{ provide: IMemoryRepository, useClass: MemoryRepository },
|
||||||
{ provide: IMetadataRepository, useClass: MetadataRepository },
|
{ provide: IMetadataRepository, useClass: MetadataRepository },
|
||||||
{ provide: IMetricRepository, useClass: MetricRepository },
|
|
||||||
{ provide: IMoveRepository, useClass: MoveRepository },
|
{ provide: IMoveRepository, useClass: MoveRepository },
|
||||||
{ provide: INotificationRepository, useClass: NotificationRepository },
|
{ provide: INotificationRepository, useClass: NotificationRepository },
|
||||||
{ provide: IOAuthRepository, useClass: OAuthRepository },
|
{ provide: IOAuthRepository, useClass: OAuthRepository },
|
||||||
|
@ -107,6 +106,7 @@ export const repositories = [
|
||||||
{ provide: IStorageRepository, useClass: StorageRepository },
|
{ provide: IStorageRepository, useClass: StorageRepository },
|
||||||
{ provide: ISystemMetadataRepository, useClass: SystemMetadataRepository },
|
{ provide: ISystemMetadataRepository, useClass: SystemMetadataRepository },
|
||||||
{ provide: ITagRepository, useClass: TagRepository },
|
{ provide: ITagRepository, useClass: TagRepository },
|
||||||
|
{ provide: ITelemetryRepository, useClass: TelemetryRepository },
|
||||||
{ provide: ITrashRepository, useClass: TrashRepository },
|
{ provide: ITrashRepository, useClass: TrashRepository },
|
||||||
{ provide: IUserRepository, useClass: UserRepository },
|
{ provide: IUserRepository, useClass: UserRepository },
|
||||||
{ provide: IVersionHistoryRepository, useClass: VersionHistoryRepository },
|
{ provide: IVersionHistoryRepository, useClass: VersionHistoryRepository },
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { MetricOptions } from '@opentelemetry/api';
|
import { MetricOptions } from '@opentelemetry/api';
|
||||||
import { MetricService } from 'nestjs-otel';
|
import { MetricService } from 'nestjs-otel';
|
||||||
import { IConfigRepository } from 'src/interfaces/config.interface';
|
import { IConfigRepository } from 'src/interfaces/config.interface';
|
||||||
import { IMetricGroupRepository, IMetricRepository, MetricGroupOptions } from 'src/interfaces/metric.interface';
|
import { IMetricGroupRepository, ITelemetryRepository, MetricGroupOptions } from 'src/interfaces/telemetry.interface';
|
||||||
|
|
||||||
class MetricGroupRepository implements IMetricGroupRepository {
|
class MetricGroupRepository implements IMetricGroupRepository {
|
||||||
private enabled = false;
|
private enabled = false;
|
||||||
|
@ -34,7 +34,7 @@ class MetricGroupRepository implements IMetricGroupRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MetricRepository implements IMetricRepository {
|
export class TelemetryRepository implements ITelemetryRepository {
|
||||||
api: MetricGroupRepository;
|
api: MetricGroupRepository;
|
||||||
host: MetricGroupRepository;
|
host: MetricGroupRepository;
|
||||||
jobs: MetricGroupRepository;
|
jobs: MetricGroupRepository;
|
||||||
|
@ -42,9 +42,11 @@ export class MetricRepository implements IMetricRepository {
|
||||||
|
|
||||||
constructor(metricService: MetricService, @Inject(IConfigRepository) configRepository: IConfigRepository) {
|
constructor(metricService: MetricService, @Inject(IConfigRepository) configRepository: IConfigRepository) {
|
||||||
const { telemetry } = configRepository.getEnv();
|
const { telemetry } = configRepository.getEnv();
|
||||||
this.api = new MetricGroupRepository(metricService).configure({ enabled: telemetry.apiMetrics });
|
const { apiMetrics, hostMetrics, jobMetrics, repoMetrics } = telemetry;
|
||||||
this.host = new MetricGroupRepository(metricService).configure({ enabled: telemetry.hostMetrics });
|
|
||||||
this.jobs = new MetricGroupRepository(metricService).configure({ enabled: telemetry.jobMetrics });
|
this.api = new MetricGroupRepository(metricService).configure({ enabled: apiMetrics });
|
||||||
this.repo = new MetricGroupRepository(metricService).configure({ enabled: telemetry.repoMetrics });
|
this.host = new MetricGroupRepository(metricService).configure({ enabled: hostMetrics });
|
||||||
|
this.jobs = new MetricGroupRepository(metricService).configure({ enabled: jobMetrics });
|
||||||
|
this.repo = new MetricGroupRepository(metricService).configure({ enabled: repoMetrics });
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -20,7 +20,6 @@ import { IMapRepository } from 'src/interfaces/map.interface';
|
||||||
import { IMediaRepository } from 'src/interfaces/media.interface';
|
import { IMediaRepository } from 'src/interfaces/media.interface';
|
||||||
import { IMemoryRepository } from 'src/interfaces/memory.interface';
|
import { IMemoryRepository } from 'src/interfaces/memory.interface';
|
||||||
import { IMetadataRepository } from 'src/interfaces/metadata.interface';
|
import { IMetadataRepository } from 'src/interfaces/metadata.interface';
|
||||||
import { IMetricRepository } from 'src/interfaces/metric.interface';
|
|
||||||
import { IMoveRepository } from 'src/interfaces/move.interface';
|
import { IMoveRepository } from 'src/interfaces/move.interface';
|
||||||
import { INotificationRepository } from 'src/interfaces/notification.interface';
|
import { INotificationRepository } from 'src/interfaces/notification.interface';
|
||||||
import { IOAuthRepository } from 'src/interfaces/oauth.interface';
|
import { IOAuthRepository } from 'src/interfaces/oauth.interface';
|
||||||
|
@ -34,6 +33,7 @@ import { IStackRepository } from 'src/interfaces/stack.interface';
|
||||||
import { IStorageRepository } from 'src/interfaces/storage.interface';
|
import { IStorageRepository } from 'src/interfaces/storage.interface';
|
||||||
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
|
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
|
||||||
import { ITagRepository } from 'src/interfaces/tag.interface';
|
import { ITagRepository } from 'src/interfaces/tag.interface';
|
||||||
|
import { ITelemetryRepository } from 'src/interfaces/telemetry.interface';
|
||||||
import { ITrashRepository } from 'src/interfaces/trash.interface';
|
import { ITrashRepository } from 'src/interfaces/trash.interface';
|
||||||
import { IUserRepository } from 'src/interfaces/user.interface';
|
import { IUserRepository } from 'src/interfaces/user.interface';
|
||||||
import { IVersionHistoryRepository } from 'src/interfaces/version-history.interface';
|
import { IVersionHistoryRepository } from 'src/interfaces/version-history.interface';
|
||||||
|
@ -64,7 +64,6 @@ export class BaseService {
|
||||||
@Inject(IMediaRepository) protected mediaRepository: IMediaRepository,
|
@Inject(IMediaRepository) protected mediaRepository: IMediaRepository,
|
||||||
@Inject(IMemoryRepository) protected memoryRepository: IMemoryRepository,
|
@Inject(IMemoryRepository) protected memoryRepository: IMemoryRepository,
|
||||||
@Inject(IMetadataRepository) protected metadataRepository: IMetadataRepository,
|
@Inject(IMetadataRepository) protected metadataRepository: IMetadataRepository,
|
||||||
@Inject(IMetricRepository) protected metricRepository: IMetricRepository,
|
|
||||||
@Inject(IMoveRepository) protected moveRepository: IMoveRepository,
|
@Inject(IMoveRepository) protected moveRepository: IMoveRepository,
|
||||||
@Inject(INotificationRepository) protected notificationRepository: INotificationRepository,
|
@Inject(INotificationRepository) protected notificationRepository: INotificationRepository,
|
||||||
@Inject(IOAuthRepository) protected oauthRepository: IOAuthRepository,
|
@Inject(IOAuthRepository) protected oauthRepository: IOAuthRepository,
|
||||||
|
@ -78,6 +77,7 @@ export class BaseService {
|
||||||
@Inject(IStorageRepository) protected storageRepository: IStorageRepository,
|
@Inject(IStorageRepository) protected storageRepository: IStorageRepository,
|
||||||
@Inject(ISystemMetadataRepository) protected systemMetadataRepository: ISystemMetadataRepository,
|
@Inject(ISystemMetadataRepository) protected systemMetadataRepository: ISystemMetadataRepository,
|
||||||
@Inject(ITagRepository) protected tagRepository: ITagRepository,
|
@Inject(ITagRepository) protected tagRepository: ITagRepository,
|
||||||
|
@Inject(ITelemetryRepository) protected telemetryRepository: ITelemetryRepository,
|
||||||
@Inject(ITrashRepository) protected trashRepository: ITrashRepository,
|
@Inject(ITrashRepository) protected trashRepository: ITrashRepository,
|
||||||
@Inject(IUserRepository) protected userRepository: IUserRepository,
|
@Inject(IUserRepository) protected userRepository: IUserRepository,
|
||||||
@Inject(IVersionHistoryRepository) protected versionRepository: IVersionHistoryRepository,
|
@Inject(IVersionHistoryRepository) protected versionRepository: IVersionHistoryRepository,
|
||||||
|
|
|
@ -124,7 +124,7 @@ export class JobService extends BaseService {
|
||||||
throw new BadRequestException(`Job is already running`);
|
throw new BadRequestException(`Job is already running`);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.metricRepository.jobs.addToCounter(`immich.queues.${snakeCase(name)}.started`, 1);
|
this.telemetryRepository.jobs.addToCounter(`immich.queues.${snakeCase(name)}.started`, 1);
|
||||||
|
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case QueueName.VIDEO_CONVERSION: {
|
case QueueName.VIDEO_CONVERSION: {
|
||||||
|
@ -197,19 +197,19 @@ export class JobService extends BaseService {
|
||||||
}
|
}
|
||||||
|
|
||||||
const queueMetric = `immich.queues.${snakeCase(queueName)}.active`;
|
const queueMetric = `immich.queues.${snakeCase(queueName)}.active`;
|
||||||
this.metricRepository.jobs.addToGauge(queueMetric, 1);
|
this.telemetryRepository.jobs.addToGauge(queueMetric, 1);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const status = await handler(data);
|
const status = await handler(data);
|
||||||
const jobMetric = `immich.jobs.${name.replaceAll('-', '_')}.${status}`;
|
const jobMetric = `immich.jobs.${name.replaceAll('-', '_')}.${status}`;
|
||||||
this.metricRepository.jobs.addToCounter(jobMetric, 1);
|
this.telemetryRepository.jobs.addToCounter(jobMetric, 1);
|
||||||
if (status === JobStatus.SUCCESS || status == JobStatus.SKIPPED) {
|
if (status === JobStatus.SUCCESS || status == JobStatus.SKIPPED) {
|
||||||
await this.onDone(item);
|
await this.onDone(item);
|
||||||
}
|
}
|
||||||
} catch (error: Error | any) {
|
} catch (error: Error | any) {
|
||||||
this.logger.error(`Unable to run job handler (${queueName}/${name}): ${error}`, error?.stack, data);
|
this.logger.error(`Unable to run job handler (${queueName}/${name}): ${error}`, error?.stack, data);
|
||||||
} finally {
|
} finally {
|
||||||
this.metricRepository.jobs.addToGauge(queueMetric, -1);
|
this.telemetryRepository.jobs.addToGauge(queueMetric, -1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
import { IMetricRepository } from 'src/interfaces/metric.interface';
|
|
||||||
import { Mocked, vitest } from 'vitest';
|
|
||||||
|
|
||||||
export const newMetricRepositoryMock = (): Mocked<IMetricRepository> => {
|
|
||||||
return {
|
|
||||||
api: {
|
|
||||||
addToCounter: vitest.fn(),
|
|
||||||
addToGauge: vitest.fn(),
|
|
||||||
addToHistogram: vitest.fn(),
|
|
||||||
configure: vitest.fn(),
|
|
||||||
},
|
|
||||||
host: {
|
|
||||||
addToCounter: vitest.fn(),
|
|
||||||
addToGauge: vitest.fn(),
|
|
||||||
addToHistogram: vitest.fn(),
|
|
||||||
configure: vitest.fn(),
|
|
||||||
},
|
|
||||||
jobs: {
|
|
||||||
addToCounter: vitest.fn(),
|
|
||||||
addToGauge: vitest.fn(),
|
|
||||||
addToHistogram: vitest.fn(),
|
|
||||||
configure: vitest.fn(),
|
|
||||||
},
|
|
||||||
repo: {
|
|
||||||
addToCounter: vitest.fn(),
|
|
||||||
addToGauge: vitest.fn(),
|
|
||||||
addToHistogram: vitest.fn(),
|
|
||||||
configure: vitest.fn(),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
20
server/test/repositories/telemetry.repository.mock.ts
Normal file
20
server/test/repositories/telemetry.repository.mock.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import { ITelemetryRepository } from 'src/interfaces/telemetry.interface';
|
||||||
|
import { Mocked, vitest } from 'vitest';
|
||||||
|
|
||||||
|
const newMetricGroupMock = () => {
|
||||||
|
return {
|
||||||
|
addToCounter: vitest.fn(),
|
||||||
|
addToGauge: vitest.fn(),
|
||||||
|
addToHistogram: vitest.fn(),
|
||||||
|
configure: vitest.fn(),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const newTelemetryRepositoryMock = (): Mocked<ITelemetryRepository> => {
|
||||||
|
return {
|
||||||
|
api: newMetricGroupMock(),
|
||||||
|
host: newMetricGroupMock(),
|
||||||
|
jobs: newMetricGroupMock(),
|
||||||
|
repo: newMetricGroupMock(),
|
||||||
|
};
|
||||||
|
};
|
|
@ -20,7 +20,6 @@ import { newMapRepositoryMock } from 'test/repositories/map.repository.mock';
|
||||||
import { newMediaRepositoryMock } from 'test/repositories/media.repository.mock';
|
import { newMediaRepositoryMock } from 'test/repositories/media.repository.mock';
|
||||||
import { newMemoryRepositoryMock } from 'test/repositories/memory.repository.mock';
|
import { newMemoryRepositoryMock } from 'test/repositories/memory.repository.mock';
|
||||||
import { newMetadataRepositoryMock } from 'test/repositories/metadata.repository.mock';
|
import { newMetadataRepositoryMock } from 'test/repositories/metadata.repository.mock';
|
||||||
import { newMetricRepositoryMock } from 'test/repositories/metric.repository.mock';
|
|
||||||
import { newMoveRepositoryMock } from 'test/repositories/move.repository.mock';
|
import { newMoveRepositoryMock } from 'test/repositories/move.repository.mock';
|
||||||
import { newNotificationRepositoryMock } from 'test/repositories/notification.repository.mock';
|
import { newNotificationRepositoryMock } from 'test/repositories/notification.repository.mock';
|
||||||
import { newOAuthRepositoryMock } from 'test/repositories/oauth.repository.mock';
|
import { newOAuthRepositoryMock } from 'test/repositories/oauth.repository.mock';
|
||||||
|
@ -34,6 +33,7 @@ import { newStackRepositoryMock } from 'test/repositories/stack.repository.mock'
|
||||||
import { newStorageRepositoryMock } from 'test/repositories/storage.repository.mock';
|
import { newStorageRepositoryMock } from 'test/repositories/storage.repository.mock';
|
||||||
import { newSystemMetadataRepositoryMock } from 'test/repositories/system-metadata.repository.mock';
|
import { newSystemMetadataRepositoryMock } from 'test/repositories/system-metadata.repository.mock';
|
||||||
import { newTagRepositoryMock } from 'test/repositories/tag.repository.mock';
|
import { newTagRepositoryMock } from 'test/repositories/tag.repository.mock';
|
||||||
|
import { newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock';
|
||||||
import { newTrashRepositoryMock } from 'test/repositories/trash.repository.mock';
|
import { newTrashRepositoryMock } from 'test/repositories/trash.repository.mock';
|
||||||
import { newUserRepositoryMock } from 'test/repositories/user.repository.mock';
|
import { newUserRepositoryMock } from 'test/repositories/user.repository.mock';
|
||||||
import { newVersionHistoryRepositoryMock } from 'test/repositories/version-history.repository.mock';
|
import { newVersionHistoryRepositoryMock } from 'test/repositories/version-history.repository.mock';
|
||||||
|
@ -73,7 +73,6 @@ export const newTestService = <T extends BaseService>(
|
||||||
const mediaMock = newMediaRepositoryMock();
|
const mediaMock = newMediaRepositoryMock();
|
||||||
const memoryMock = newMemoryRepositoryMock();
|
const memoryMock = newMemoryRepositoryMock();
|
||||||
const metadataMock = (metadataRepository || newMetadataRepositoryMock()) as Mocked<IMetadataRepository>;
|
const metadataMock = (metadataRepository || newMetadataRepositoryMock()) as Mocked<IMetadataRepository>;
|
||||||
const metricMock = newMetricRepositoryMock();
|
|
||||||
const moveMock = newMoveRepositoryMock();
|
const moveMock = newMoveRepositoryMock();
|
||||||
const notificationMock = newNotificationRepositoryMock();
|
const notificationMock = newNotificationRepositoryMock();
|
||||||
const oauthMock = newOAuthRepositoryMock();
|
const oauthMock = newOAuthRepositoryMock();
|
||||||
|
@ -87,6 +86,7 @@ export const newTestService = <T extends BaseService>(
|
||||||
const storageMock = newStorageRepositoryMock();
|
const storageMock = newStorageRepositoryMock();
|
||||||
const systemMock = newSystemMetadataRepositoryMock();
|
const systemMock = newSystemMetadataRepositoryMock();
|
||||||
const tagMock = newTagRepositoryMock();
|
const tagMock = newTagRepositoryMock();
|
||||||
|
const telemetryMock = newTelemetryRepositoryMock();
|
||||||
const trashMock = newTrashRepositoryMock();
|
const trashMock = newTrashRepositoryMock();
|
||||||
const userMock = newUserRepositoryMock();
|
const userMock = newUserRepositoryMock();
|
||||||
const versionHistoryMock = newVersionHistoryRepositoryMock();
|
const versionHistoryMock = newVersionHistoryRepositoryMock();
|
||||||
|
@ -112,7 +112,6 @@ export const newTestService = <T extends BaseService>(
|
||||||
mediaMock,
|
mediaMock,
|
||||||
memoryMock,
|
memoryMock,
|
||||||
metadataMock,
|
metadataMock,
|
||||||
metricMock,
|
|
||||||
moveMock,
|
moveMock,
|
||||||
notificationMock,
|
notificationMock,
|
||||||
oauthMock,
|
oauthMock,
|
||||||
|
@ -126,6 +125,7 @@ export const newTestService = <T extends BaseService>(
|
||||||
storageMock,
|
storageMock,
|
||||||
systemMock,
|
systemMock,
|
||||||
tagMock,
|
tagMock,
|
||||||
|
telemetryMock,
|
||||||
trashMock,
|
trashMock,
|
||||||
userMock,
|
userMock,
|
||||||
versionHistoryMock,
|
versionHistoryMock,
|
||||||
|
@ -153,7 +153,6 @@ export const newTestService = <T extends BaseService>(
|
||||||
mediaMock,
|
mediaMock,
|
||||||
memoryMock,
|
memoryMock,
|
||||||
metadataMock,
|
metadataMock,
|
||||||
metricMock,
|
|
||||||
moveMock,
|
moveMock,
|
||||||
notificationMock,
|
notificationMock,
|
||||||
oauthMock,
|
oauthMock,
|
||||||
|
@ -167,6 +166,7 @@ export const newTestService = <T extends BaseService>(
|
||||||
storageMock,
|
storageMock,
|
||||||
systemMock,
|
systemMock,
|
||||||
tagMock,
|
tagMock,
|
||||||
|
telemetryMock,
|
||||||
trashMock,
|
trashMock,
|
||||||
userMock,
|
userMock,
|
||||||
versionHistoryMock,
|
versionHistoryMock,
|
||||||
|
|
Loading…
Reference in a new issue