mirror of
https://github.com/immich-app/immich.git
synced 2025-07-09 03:04:16 -04:00
queue metrics job every 24 hours
This commit is contained in:
parent
e9197cde67
commit
db997f9173
@ -5,6 +5,7 @@ import pkg from 'src/../../package.json';
|
|||||||
|
|
||||||
export const AUDIT_LOG_MAX_DURATION = Duration.fromObject({ days: 100 });
|
export const AUDIT_LOG_MAX_DURATION = Duration.fromObject({ days: 100 });
|
||||||
export const ONE_HOUR = Duration.fromObject({ hours: 1 });
|
export const ONE_HOUR = Duration.fromObject({ hours: 1 });
|
||||||
|
export const TWENTY_FOUR_HOURS = Duration.fromObject({ hours: 24 });
|
||||||
|
|
||||||
export interface IVersion {
|
export interface IVersion {
|
||||||
major: number;
|
major: number;
|
||||||
|
@ -1,13 +1,24 @@
|
|||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { serverVersion } from '../domain.constant';
|
import { serverVersion } from '../domain.constant';
|
||||||
|
import { JobName } from '../job';
|
||||||
|
import { IJobRepository } from '../repositories/job.repository';
|
||||||
import { IMetricsRepository, SharedMetrics } from '../repositories/metrics.repository';
|
import { IMetricsRepository, SharedMetrics } from '../repositories/metrics.repository';
|
||||||
import { MetricsDto } from './metrics.dto';
|
import { MetricsDto } from './metrics.dto';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MetricsService {
|
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();
|
const metricsPayload = new MetricsDto();
|
||||||
if (metrics.serverInfo) {
|
if (metrics.serverInfo) {
|
||||||
metricsPayload.serverInfo.version = serverVersion.toString();
|
metricsPayload.serverInfo.version = serverVersion.toString();
|
||||||
|
@ -3,12 +3,14 @@ import {
|
|||||||
DatabaseService,
|
DatabaseService,
|
||||||
JobService,
|
JobService,
|
||||||
LibraryService,
|
LibraryService,
|
||||||
|
MetricsService,
|
||||||
ONE_HOUR,
|
ONE_HOUR,
|
||||||
OpenGraphTags,
|
OpenGraphTags,
|
||||||
ServerInfoService,
|
ServerInfoService,
|
||||||
SharedLinkService,
|
SharedLinkService,
|
||||||
StorageService,
|
StorageService,
|
||||||
SystemConfigService,
|
SystemConfigService,
|
||||||
|
TWENTY_FOUR_HOURS,
|
||||||
WEB_ROOT_PATH,
|
WEB_ROOT_PATH,
|
||||||
} from '@app/domain';
|
} from '@app/domain';
|
||||||
import { ImmichLogger } from '@app/infra/logger';
|
import { ImmichLogger } from '@app/infra/logger';
|
||||||
@ -46,6 +48,7 @@ export class AppService {
|
|||||||
private configService: SystemConfigService,
|
private configService: SystemConfigService,
|
||||||
private jobService: JobService,
|
private jobService: JobService,
|
||||||
private libraryService: LibraryService,
|
private libraryService: LibraryService,
|
||||||
|
private metricsService: MetricsService,
|
||||||
private serverService: ServerInfoService,
|
private serverService: ServerInfoService,
|
||||||
private sharedLinkService: SharedLinkService,
|
private sharedLinkService: SharedLinkService,
|
||||||
private storageService: StorageService,
|
private storageService: StorageService,
|
||||||
@ -57,6 +60,11 @@ export class AppService {
|
|||||||
await this.serverService.handleVersionCheck();
|
await this.serverService.handleVersionCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Interval(TWENTY_FOUR_HOURS.as('milliseconds'))
|
||||||
|
async onMetricsSend() {
|
||||||
|
await this.metricsService.handleQueueMetrics();
|
||||||
|
}
|
||||||
|
|
||||||
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
|
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
|
||||||
async onNightlyJob() {
|
async onNightlyJob() {
|
||||||
await this.jobService.handleNightlyJobs();
|
await this.jobService.handleNightlyJobs();
|
||||||
|
@ -8,6 +8,7 @@ import {
|
|||||||
LibraryService,
|
LibraryService,
|
||||||
MediaService,
|
MediaService,
|
||||||
MetadataService,
|
MetadataService,
|
||||||
|
MetricsService,
|
||||||
PersonService,
|
PersonService,
|
||||||
SmartInfoService,
|
SmartInfoService,
|
||||||
StorageService,
|
StorageService,
|
||||||
@ -15,7 +16,6 @@ import {
|
|||||||
SystemConfigService,
|
SystemConfigService,
|
||||||
UserService,
|
UserService,
|
||||||
} from '@app/domain';
|
} from '@app/domain';
|
||||||
import { MetricsService } from '@app/domain/metrics';
|
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@ -62,7 +62,7 @@ export class AppService {
|
|||||||
[JobName.VIDEO_CONVERSION]: (data) => this.mediaService.handleVideoConversion(data),
|
[JobName.VIDEO_CONVERSION]: (data) => this.mediaService.handleVideoConversion(data),
|
||||||
[JobName.QUEUE_METADATA_EXTRACTION]: (data) => this.metadataService.handleQueueMetadataExtraction(data),
|
[JobName.QUEUE_METADATA_EXTRACTION]: (data) => this.metadataService.handleQueueMetadataExtraction(data),
|
||||||
[JobName.METADATA_EXTRACTION]: (data) => this.metadataService.handleMetadataExtraction(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.LINK_LIVE_PHOTOS]: (data) => this.metadataService.handleLivePhotoLinking(data),
|
||||||
[JobName.QUEUE_RECOGNIZE_FACES]: (data) => this.personService.handleQueueRecognizeFaces(data),
|
[JobName.QUEUE_RECOGNIZE_FACES]: (data) => this.personService.handleQueueRecognizeFaces(data),
|
||||||
[JobName.RECOGNIZE_FACES]: (data) => this.personService.handleRecognizeFaces(data),
|
[JobName.RECOGNIZE_FACES]: (data) => this.personService.handleRecognizeFaces(data),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user