mirror of
https://github.com/immich-app/immich.git
synced 2025-07-07 18:24:10 -04:00
collect more metrics, move everything related to metrics repo
This commit is contained in:
parent
874f707c92
commit
e9197cde67
@ -1,11 +1,14 @@
|
|||||||
export class MetricsServerInfoDto {
|
export class MetricsServerInfoDto {
|
||||||
|
cpuCount?: number;
|
||||||
|
cpuModel?: string;
|
||||||
|
memoryCount?: number;
|
||||||
version?: string;
|
version?: string;
|
||||||
diskUse?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MetricsAssetCountDto {
|
export class MetricsAssetCountDto {
|
||||||
photo?: number;
|
image?: number;
|
||||||
video?: number;
|
video?: number;
|
||||||
|
total?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MetricsDto {
|
export class MetricsDto {
|
||||||
|
@ -1,47 +1,25 @@
|
|||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import {
|
import { serverVersion } from '../domain.constant';
|
||||||
ICommunicationRepository,
|
|
||||||
IServerInfoRepository,
|
|
||||||
IStorageRepository,
|
|
||||||
ISystemConfigRepository,
|
|
||||||
IUserRepository,
|
|
||||||
} from '../repositories';
|
|
||||||
import { IMetricsRepository, SharedMetrics } from '../repositories/metrics.repository';
|
import { IMetricsRepository, SharedMetrics } from '../repositories/metrics.repository';
|
||||||
import { ServerInfoService } from '../server-info';
|
|
||||||
import { MetricsDto } from './metrics.dto';
|
import { MetricsDto } from './metrics.dto';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MetricsService {
|
export class MetricsService {
|
||||||
private serverInfo: ServerInfoService;
|
constructor(@Inject(IMetricsRepository) private repository: IMetricsRepository) {}
|
||||||
|
|
||||||
constructor(
|
|
||||||
@Inject(ICommunicationRepository) communicationRepository: ICommunicationRepository,
|
|
||||||
@Inject(IMetricsRepository) private repository: IMetricsRepository,
|
|
||||||
@Inject(IUserRepository) userRepository: IUserRepository,
|
|
||||||
@Inject(IServerInfoRepository) serverInfoRepository: IServerInfoRepository,
|
|
||||||
@Inject(IStorageRepository) storageRepository: IStorageRepository,
|
|
||||||
@Inject(ISystemConfigRepository) configRepository: ISystemConfigRepository,
|
|
||||||
) {
|
|
||||||
this.serverInfo = new ServerInfoService(
|
|
||||||
communicationRepository,
|
|
||||||
configRepository,
|
|
||||||
userRepository,
|
|
||||||
serverInfoRepository,
|
|
||||||
storageRepository,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async shareMetrics(metrics: SharedMetrics) {
|
async shareMetrics(metrics: SharedMetrics) {
|
||||||
const metricsPayload = new MetricsDto();
|
const metricsPayload = new MetricsDto();
|
||||||
if (metrics.serverInfo) {
|
if (metrics.serverInfo) {
|
||||||
metricsPayload.serverInfo.version = this.serverInfo.getVersion().toString();
|
metricsPayload.serverInfo.version = serverVersion.toString();
|
||||||
metricsPayload.serverInfo.diskUse = (await this.serverInfo.getInfo()).diskUse;
|
metricsPayload.serverInfo.cpuCount = this.repository.getCpuCount();
|
||||||
|
metricsPayload.serverInfo.cpuModel = this.repository.getCpuModel();
|
||||||
|
metricsPayload.serverInfo.memoryCount = this.repository.getMemoryCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metrics.assetCount) {
|
if (metrics.assetCount) {
|
||||||
const stats = await this.serverInfo.getStatistics();
|
metricsPayload.assetCount.image = await this.repository.getImageCount();
|
||||||
metricsPayload.assetCount.photo = stats.photos;
|
metricsPayload.assetCount.video = await this.repository.getVideoCount();
|
||||||
metricsPayload.assetCount.video = stats.videos;
|
metricsPayload.assetCount.total = await this.repository.getAssetCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.repository.sendMetrics(metricsPayload);
|
await this.repository.sendMetrics(metricsPayload);
|
||||||
|
@ -8,5 +8,11 @@ export interface SharedMetrics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface IMetricsRepository {
|
export interface IMetricsRepository {
|
||||||
|
getAssetCount(): Promise<number>;
|
||||||
|
getCpuCount(): number;
|
||||||
|
getCpuModel(): string;
|
||||||
|
getMemoryCount(): number;
|
||||||
|
getImageCount(): Promise<number>;
|
||||||
|
getVideoCount(): Promise<number>;
|
||||||
sendMetrics(payload: MetricsDto): Promise<void>;
|
sendMetrics(payload: MetricsDto): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,40 @@
|
|||||||
import { MetricsDto } from '@app/domain/metrics';
|
import { MetricsDto } from '@app/domain/metrics';
|
||||||
import { IMetricsRepository } from '@app/domain/repositories/metrics.repository';
|
import { IMetricsRepository } from '@app/domain/repositories/metrics.repository';
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
import os from 'os';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { AssetEntity, AssetType } from '../entities';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MetricsRepository implements IMetricsRepository {
|
export class MetricsRepository implements IMetricsRepository {
|
||||||
|
constructor(@InjectRepository(AssetEntity) private assetRepository: Repository<AssetEntity>) {}
|
||||||
async sendMetrics(payload: MetricsDto): Promise<void> {
|
async sendMetrics(payload: MetricsDto): Promise<void> {
|
||||||
await axios.post('IMMICH-DATA-DOMAIN', payload);
|
await axios.post('IMMICH-DATA-DOMAIN', payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAssetCount() {
|
||||||
|
return this.assetRepository.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
getCpuCount() {
|
||||||
|
return os.cpus().length;
|
||||||
|
}
|
||||||
|
|
||||||
|
getCpuModel() {
|
||||||
|
return os.cpus()[0].model;
|
||||||
|
}
|
||||||
|
|
||||||
|
getMemoryCount() {
|
||||||
|
return os.totalmem();
|
||||||
|
}
|
||||||
|
|
||||||
|
getImageCount() {
|
||||||
|
return this.assetRepository.count({ where: { isVisible: true, type: AssetType.IMAGE } });
|
||||||
|
}
|
||||||
|
|
||||||
|
getVideoCount() {
|
||||||
|
return this.assetRepository.count({ where: { isVisible: true, type: AssetType.VIDEO } });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user