queue metrics job every 24 hours

This commit is contained in:
Daniel Dietzler 2023-12-23 22:09:51 +01:00
parent e9197cde67
commit db997f9173
No known key found for this signature in database
GPG Key ID: A1C0B97CD8E18DFF
4 changed files with 24 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import pkg from 'src/../../package.json';
export const AUDIT_LOG_MAX_DURATION = Duration.fromObject({ days: 100 });
export const ONE_HOUR = Duration.fromObject({ hours: 1 });
export const TWENTY_FOUR_HOURS = Duration.fromObject({ hours: 24 });
export interface IVersion {
major: number;

View File

@ -1,13 +1,24 @@
import { Inject, Injectable } from '@nestjs/common';
import { serverVersion } from '../domain.constant';
import { JobName } from '../job';
import { IJobRepository } from '../repositories/job.repository';
import { IMetricsRepository, SharedMetrics } from '../repositories/metrics.repository';
import { MetricsDto } from './metrics.dto';
@Injectable()
export class MetricsService {
constructor(@Inject(IMetricsRepository) private repository: IMetricsRepository) {}
constructor(
@Inject(IJobRepository) private jobRepository: IJobRepository,
@Inject(IMetricsRepository) private repository: IMetricsRepository,
) {}
async shareMetrics(metrics: SharedMetrics) {
async handleQueueMetrics() {
// TODO config for what metrics should be fetched and if any at all
await this.jobRepository.queue({ name: JobName.METRICS, data: { assetCount: true, serverInfo: true } });
}
async handleMetrics(metrics: SharedMetrics) {
const metricsPayload = new MetricsDto();
if (metrics.serverInfo) {
metricsPayload.serverInfo.version = serverVersion.toString();

View File

@ -3,12 +3,14 @@ import {
DatabaseService,
JobService,
LibraryService,
MetricsService,
ONE_HOUR,
OpenGraphTags,
ServerInfoService,
SharedLinkService,
StorageService,
SystemConfigService,
TWENTY_FOUR_HOURS,
WEB_ROOT_PATH,
} from '@app/domain';
import { ImmichLogger } from '@app/infra/logger';
@ -46,6 +48,7 @@ export class AppService {
private configService: SystemConfigService,
private jobService: JobService,
private libraryService: LibraryService,
private metricsService: MetricsService,
private serverService: ServerInfoService,
private sharedLinkService: SharedLinkService,
private storageService: StorageService,
@ -57,6 +60,11 @@ export class AppService {
await this.serverService.handleVersionCheck();
}
@Interval(TWENTY_FOUR_HOURS.as('milliseconds'))
async onMetricsSend() {
await this.metricsService.handleQueueMetrics();
}
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
async onNightlyJob() {
await this.jobService.handleNightlyJobs();

View File

@ -8,6 +8,7 @@ import {
LibraryService,
MediaService,
MetadataService,
MetricsService,
PersonService,
SmartInfoService,
StorageService,
@ -15,7 +16,6 @@ import {
SystemConfigService,
UserService,
} from '@app/domain';
import { MetricsService } from '@app/domain/metrics';
import { Injectable } from '@nestjs/common';
@Injectable()
@ -62,7 +62,7 @@ export class AppService {
[JobName.VIDEO_CONVERSION]: (data) => this.mediaService.handleVideoConversion(data),
[JobName.QUEUE_METADATA_EXTRACTION]: (data) => this.metadataService.handleQueueMetadataExtraction(data),
[JobName.METADATA_EXTRACTION]: (data) => this.metadataService.handleMetadataExtraction(data),
[JobName.METRICS]: (data) => this.metricsService.shareMetrics(data),
[JobName.METRICS]: (data) => this.metricsService.handleMetrics(data),
[JobName.LINK_LIVE_PHOTOS]: (data) => this.metadataService.handleLivePhotoLinking(data),
[JobName.QUEUE_RECOGNIZE_FACES]: (data) => this.personService.handleQueueRecognizeFaces(data),
[JobName.RECOGNIZE_FACES]: (data) => this.personService.handleRecognizeFaces(data),