revert individual settings for metrics, now only enable/disable

This commit is contained in:
Daniel Dietzler
2023-12-28 19:49:32 +01:00
parent ac4c57247e
commit 0232655da2
11 changed files with 33 additions and 230 deletions

View File

@@ -1,31 +1,3 @@
import { IsBoolean } from 'class-validator';
// TODO I feel like it must be possible to generate those from MetricsServerInfo and MetricsAssetCount
export class MetricServerInfoConfig {
@IsBoolean()
cpuCount!: boolean;
@IsBoolean()
cpuModel!: boolean;
@IsBoolean()
memory!: boolean;
@IsBoolean()
version!: boolean;
}
export class MetricsAssetCountConfig {
@IsBoolean()
image!: boolean;
@IsBoolean()
video!: boolean;
@IsBoolean()
total!: boolean;
}
class MetricsServerInfo {
cpuCount!: number;
cpuModel!: string;

View File

@@ -1,12 +1,11 @@
import { Inject, Injectable } from '@nestjs/common';
import _ from 'lodash';
import { serverVersion } from '../domain.constant';
import { JobName } from '../job';
import { ISystemConfigRepository } from '../repositories';
import { IJobRepository } from '../repositories/job.repository';
import { IMetricsRepository } from '../repositories/metrics.repository';
import { FeatureFlag, SystemConfigCore, SystemConfigMetricsDto } from '../system-config';
import { Metrics, MetricsDto } from './metrics.dto';
import { FeatureFlag, SystemConfigCore } from '../system-config';
import { MetricsDto } from './metrics.dto';
@Injectable()
export class MetricsService {
@@ -27,15 +26,14 @@ export class MetricsService {
}
async handleSendMetrics() {
const metricsConfig = await this.configCore.getConfig().then((config) => config.metrics);
const metrics = await this.getMetrics(metricsConfig);
const metrics = await this.getMetrics();
await this.repository.sendMetrics(metrics);
return true;
}
async getMetrics(config: SystemConfigMetricsDto) {
const metrics: Metrics = new MetricsDto();
async getMetrics() {
const metrics = new MetricsDto();
metrics.serverInfo = {
cpuCount: this.repository.getCpuCount(),
@@ -50,22 +48,6 @@ export class MetricsService {
total: await this.repository.getAssetCount(),
};
return _.pick(metrics, this.getKeys(config));
}
private getKeys(config: SystemConfigMetricsDto) {
const result = [];
const keys = _.keys(config) as Array<keyof SystemConfigMetricsDto>;
for (const key of keys) {
const subConfig = _.get(config, key);
if (typeof subConfig === 'boolean') {
continue;
}
const keys = _.keys(_.pickBy(subConfig)).map((value) => `${key}.${value}`);
result.push(...keys);
}
return result;
return metrics;
}
}

View File

@@ -9,5 +9,5 @@ export interface IMetricsRepository {
getMemory(): number;
getImageCount(): Promise<number>;
getVideoCount(): Promise<number>;
sendMetrics(payload: Partial<MetricsDto>): Promise<void>;
sendMetrics(payload: MetricsDto): Promise<void>;
}

View File

@@ -1,18 +1,6 @@
import { MetricServerInfoConfig, MetricsAssetCountConfig } from '@app/domain';
import { Type } from 'class-transformer';
import { IsBoolean, IsObject, ValidateNested } from 'class-validator';
import { IsBoolean } from 'class-validator';
export class SystemConfigMetricsDto {
@IsBoolean()
enabled!: boolean;
@Type(() => MetricServerInfoConfig)
@ValidateNested()
@IsObject()
serverInfo!: MetricServerInfoConfig;
@Type(() => MetricsAssetCountConfig)
@ValidateNested()
@IsObject()
assetCount!: MetricsAssetCountConfig;
}

View File

@@ -84,17 +84,6 @@ export const defaults = Object.freeze<SystemConfig>({
},
metrics: {
enabled: false,
serverInfo: {
cpuCount: true,
cpuModel: true,
memory: true,
version: true,
},
assetCount: {
image: true,
video: true,
total: true,
},
},
reverseGeocoding: {
enabled: true,

View File

@@ -1,5 +1,5 @@
import { Metrics, MetricsService, SystemConfigMetricsDto } from '@app/domain';
import { Body, Controller, Put } from '@nestjs/common';
import { Metrics, MetricsService } from '@app/domain';
import { Controller, Get } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { Authenticated } from '../app.guard';
import { UseValidation } from '../app.utils';
@@ -11,8 +11,8 @@ import { UseValidation } from '../app.utils';
export class MetricsController {
constructor(private service: MetricsService) {}
@Put()
getMetrics(@Body() dto: SystemConfigMetricsDto): Promise<Partial<Metrics>> {
return this.service.getMetrics(dto);
@Get()
getMetrics(): Promise<Partial<Metrics>> {
return this.service.getMetrics();
}
}

View File

@@ -67,13 +67,6 @@ export enum SystemConfigKey {
MAP_DARK_STYLE = 'map.darkStyle',
METRICS_ENABLED = 'metrics.enabled',
METRICS_SERVER_INFO_CPU_COUNT = 'metrics.serverInfo.cpuCount',
METRICS_SERVER_INFO_CPU_MODEL = 'metrics.serverInfo.cpuModel',
METRICS_SERVER_INFO_MEMORY = 'metrics.serverInfo.memory',
METRICS_SERVER_INFO_VERSION = 'metrics.serverInfo.version',
METRICS_ASSET_COUNT_IMAGE = 'metrics.assetCount.image',
METRICS_ASSET_COUNT_VIDEO = 'metrics.assetCount.video',
METRICS_ASSET_COUNT_TOTAL = 'metrics.assetCount.total',
REVERSE_GEOCODING_ENABLED = 'reverseGeocoding.enabled',
@@ -207,17 +200,6 @@ export interface SystemConfig {
};
metrics: {
enabled: boolean;
serverInfo: {
cpuCount: boolean;
cpuModel: boolean;
memory: boolean;
version: boolean;
};
assetCount: {
image: boolean;
video: boolean;
total: boolean;
};
};
reverseGeocoding: {
enabled: boolean;

View File

@@ -10,7 +10,7 @@ import { AssetEntity, AssetType } from '../entities';
@Injectable()
export class MetricsRepository implements IMetricsRepository {
constructor(@InjectRepository(AssetEntity) private assetRepository: Repository<AssetEntity>) {}
async sendMetrics(payload: Partial<MetricsDto>): Promise<void> {
async sendMetrics(payload: MetricsDto): Promise<void> {
await axios.post('IMMICH-DATA-DOMAIN', payload);
}