From 0232655da27e296cf14452536aac88ccb9c5bedd Mon Sep 17 00:00:00 2001 From: Daniel Dietzler Date: Thu, 28 Dec 2023 19:49:32 +0100 Subject: [PATCH] revert individual settings for metrics, now only enable/disable --- server/immich-openapi-specs.json | 64 +---------------- server/src/domain/metrics/metrics.dto.ts | 28 -------- server/src/domain/metrics/metrics.service.ts | 30 ++------ .../domain/repositories/metrics.repository.ts | 2 +- .../dto/system-config-metrics.dto.ts | 14 +--- .../system-config/system-config.core.ts | 11 --- .../immich/controllers/metrics.controller.ts | 10 +-- .../infra/entities/system-config.entity.ts | 18 ----- .../infra/repositories/metrics.repository.ts | 2 +- .../metrics-settings/metrics-settings.svelte | 70 +++---------------- .../routes/admin/system-settings/+page.svelte | 14 ++-- 11 files changed, 33 insertions(+), 230 deletions(-) diff --git a/server/immich-openapi-specs.json b/server/immich-openapi-specs.json index 45e072576c..ca5cd5949d 100644 --- a/server/immich-openapi-specs.json +++ b/server/immich-openapi-specs.json @@ -3717,19 +3717,9 @@ } }, "/metrics": { - "put": { + "get": { "operationId": "getMetrics", "parameters": [], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SystemConfigMetricsDto" - } - } - }, - "required": true - }, "responses": { "200": { "content": { @@ -8103,48 +8093,6 @@ ], "type": "object" }, - "MetricServerInfoConfig": { - "properties": { - "cpuCount": { - "type": "boolean" - }, - "cpuModel": { - "type": "boolean" - }, - "memory": { - "type": "boolean" - }, - "version": { - "type": "boolean" - } - }, - "required": [ - "cpuCount", - "cpuModel", - "memory", - "version" - ], - "type": "object" - }, - "MetricsAssetCountConfig": { - "properties": { - "image": { - "type": "boolean" - }, - "total": { - "type": "boolean" - }, - "video": { - "type": "boolean" - } - }, - "required": [ - "image", - "video", - "total" - ], - "type": "object" - }, "ModelType": { "enum": [ "facial-recognition", @@ -9373,20 +9321,12 @@ }, "SystemConfigMetricsDto": { "properties": { - "assetCount": { - "$ref": "#/components/schemas/MetricsAssetCountConfig" - }, "enabled": { "type": "boolean" - }, - "serverInfo": { - "$ref": "#/components/schemas/MetricServerInfoConfig" } }, "required": [ - "enabled", - "serverInfo", - "assetCount" + "enabled" ], "type": "object" }, diff --git a/server/src/domain/metrics/metrics.dto.ts b/server/src/domain/metrics/metrics.dto.ts index 80261b12b2..59566deedc 100644 --- a/server/src/domain/metrics/metrics.dto.ts +++ b/server/src/domain/metrics/metrics.dto.ts @@ -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; diff --git a/server/src/domain/metrics/metrics.service.ts b/server/src/domain/metrics/metrics.service.ts index d1f816e873..babdb71bff 100644 --- a/server/src/domain/metrics/metrics.service.ts +++ b/server/src/domain/metrics/metrics.service.ts @@ -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; - 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; } } diff --git a/server/src/domain/repositories/metrics.repository.ts b/server/src/domain/repositories/metrics.repository.ts index b8f29a85da..64d04d1b7d 100644 --- a/server/src/domain/repositories/metrics.repository.ts +++ b/server/src/domain/repositories/metrics.repository.ts @@ -9,5 +9,5 @@ export interface IMetricsRepository { getMemory(): number; getImageCount(): Promise; getVideoCount(): Promise; - sendMetrics(payload: Partial): Promise; + sendMetrics(payload: MetricsDto): Promise; } diff --git a/server/src/domain/system-config/dto/system-config-metrics.dto.ts b/server/src/domain/system-config/dto/system-config-metrics.dto.ts index f011343cab..ecebfeaf63 100644 --- a/server/src/domain/system-config/dto/system-config-metrics.dto.ts +++ b/server/src/domain/system-config/dto/system-config-metrics.dto.ts @@ -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; } diff --git a/server/src/domain/system-config/system-config.core.ts b/server/src/domain/system-config/system-config.core.ts index 02a4fb73ed..b276a1dcde 100644 --- a/server/src/domain/system-config/system-config.core.ts +++ b/server/src/domain/system-config/system-config.core.ts @@ -84,17 +84,6 @@ export const defaults = Object.freeze({ }, metrics: { enabled: false, - serverInfo: { - cpuCount: true, - cpuModel: true, - memory: true, - version: true, - }, - assetCount: { - image: true, - video: true, - total: true, - }, }, reverseGeocoding: { enabled: true, diff --git a/server/src/immich/controllers/metrics.controller.ts b/server/src/immich/controllers/metrics.controller.ts index 96ade28f47..c13af1522a 100644 --- a/server/src/immich/controllers/metrics.controller.ts +++ b/server/src/immich/controllers/metrics.controller.ts @@ -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> { - return this.service.getMetrics(dto); + @Get() + getMetrics(): Promise> { + return this.service.getMetrics(); } } diff --git a/server/src/infra/entities/system-config.entity.ts b/server/src/infra/entities/system-config.entity.ts index 5898e18a36..c2ae8c2175 100644 --- a/server/src/infra/entities/system-config.entity.ts +++ b/server/src/infra/entities/system-config.entity.ts @@ -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; diff --git a/server/src/infra/repositories/metrics.repository.ts b/server/src/infra/repositories/metrics.repository.ts index 37b8cef4e7..1487d3a6e3 100644 --- a/server/src/infra/repositories/metrics.repository.ts +++ b/server/src/infra/repositories/metrics.repository.ts @@ -10,7 +10,7 @@ import { AssetEntity, AssetType } from '../entities'; @Injectable() export class MetricsRepository implements IMetricsRepository { constructor(@InjectRepository(AssetEntity) private assetRepository: Repository) {} - async sendMetrics(payload: Partial): Promise { + async sendMetrics(payload: MetricsDto): Promise { await axios.post('IMMICH-DATA-DOMAIN', payload); } diff --git a/web/src/lib/components/admin-page/settings/metrics-settings/metrics-settings.svelte b/web/src/lib/components/admin-page/settings/metrics-settings/metrics-settings.svelte index ec04ad0b73..ca2512a5bc 100644 --- a/web/src/lib/components/admin-page/settings/metrics-settings/metrics-settings.svelte +++ b/web/src/lib/components/admin-page/settings/metrics-settings/metrics-settings.svelte @@ -7,7 +7,6 @@ import { api, SystemConfigMetricsDto } from '@api'; import { isEqual } from 'lodash-es'; import { fade } from 'svelte/transition'; - import SettingAccordion from '../setting-accordion.svelte'; import SettingButtonsRow from '../setting-buttons-row.svelte'; import SettingSwitch from '../setting-switch.svelte'; import type { ResetOptions } from '$lib/utils/dipatch'; @@ -19,8 +18,6 @@ let savedConfig: SystemConfigMetricsDto; let defaultConfig: SystemConfigMetricsDto; - $: sharedMetrics = getSharedMetrics(config); - const handleReset = (detail: ResetOptions) => { if (detail.default) { resetToDefault(); @@ -44,8 +41,6 @@ ...current, metrics: { enabled: config.enabled, - serverInfo: config.serverInfo, - assetCount: config.assetCount, }, }, }); @@ -83,8 +78,8 @@ }); } - function getSharedMetrics(systemConfigMetricsDto: SystemConfigMetricsDto) { - return api.metricsApi.getMetrics({ systemConfigMetricsDto }).then((response) => response.data); + function getSharedMetrics() { + return api.metricsApi.getMetrics().then((response) => response.data); } @@ -92,61 +87,16 @@ {#await refreshConfig() then}
-
- - - -
- - - - - - - -
- - -
- - - - - -
+
+ {#if config.enabled} - {#await sharedMetrics} + {#await getSharedMetrics()} {:then metrics}
diff --git a/web/src/routes/admin/system-settings/+page.svelte b/web/src/routes/admin/system-settings/+page.svelte index 11ca0fd283..a1629da303 100644 --- a/web/src/routes/admin/system-settings/+page.svelte +++ b/web/src/routes/admin/system-settings/+page.svelte @@ -64,6 +64,13 @@
+ + + + - - - -