summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-07-02 16:02:32 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-07-02 16:02:32 +0900
commitaf3258dc79488b73435819e7799eb1515f15a6aa (patch)
tree7e6567ec44162784b1f96903ab2334edfa62b644
parentperf(frontend): MkImgWithBlurhashでblurhash描画に使うcanvasは再利用... (diff)
downloadmisskey-af3258dc79488b73435819e7799eb1515f15a6aa.tar.gz
misskey-af3258dc79488b73435819e7799eb1515f15a6aa.tar.bz2
misskey-af3258dc79488b73435819e7799eb1515f15a6aa.zip
perf(backend): make some features optionable
Resolve #11064 Resolve #11065
-rw-r--r--CHANGELOG.md4
-rw-r--r--locales/index.d.ts2
-rw-r--r--locales/ja-JP.yml2
-rw-r--r--packages/backend/assets/avatar.pngbin0 -> 13477 bytes
-rw-r--r--packages/backend/migration/1688280713783-add-meta-options.js13
-rw-r--r--packages/backend/src/daemons/ServerStatsService.ts12
-rw-r--r--packages/backend/src/models/entities/Meta.ts10
-rw-r--r--packages/backend/src/server/ServerService.ts15
-rw-r--r--packages/backend/src/server/api/endpoints/admin/meta.ts10
-rw-r--r--packages/backend/src/server/api/endpoints/admin/update-meta.ts10
-rw-r--r--packages/backend/src/server/api/endpoints/server-info.ts19
-rw-r--r--packages/frontend/src/pages/admin/other-settings.vue14
-rw-r--r--packages/frontend/src/widgets/server-metric/index.vue2
13 files changed, 105 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 681105fb7e..72c4f53d18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,10 @@
## 13.x.x (unreleased)
+### General
+- identicon生成を無効にしてパフォーマンスを向上させることができるようになりました
+- サーバーのマシン情報の公開を無効にしてパフォーマンスを向上させることができるようになりました
+
### Client
- Fix: サーバーメトリクスが90度傾いている
diff --git a/locales/index.d.ts b/locales/index.d.ts
index eed29f408c..af6b803278 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -1066,6 +1066,8 @@ export interface Locale {
"additionalEmojiDictionary": string;
"installed": string;
"branding": string;
+ "enableServerMachineStats": string;
+ "enableIdenticonGeneration": string;
"_initialAccountSetting": {
"accountCreated": string;
"letsStartAccountSetup": string;
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 8004e53575..e7202bfbb5 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1063,6 +1063,8 @@ goToMisskey: "Misskeyへ"
additionalEmojiDictionary: "絵文字の追加辞書"
installed: "インストール済み"
branding: "ブランディング"
+enableServerMachineStats: "サーバーのマシン情報を公開する"
+enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする"
_initialAccountSetting:
accountCreated: "アカウントの作成が完了しました!"
diff --git a/packages/backend/assets/avatar.png b/packages/backend/assets/avatar.png
new file mode 100644
index 0000000000..1b95a0c560
--- /dev/null
+++ b/packages/backend/assets/avatar.png
Binary files differ
diff --git a/packages/backend/migration/1688280713783-add-meta-options.js b/packages/backend/migration/1688280713783-add-meta-options.js
new file mode 100644
index 0000000000..12406fe085
--- /dev/null
+++ b/packages/backend/migration/1688280713783-add-meta-options.js
@@ -0,0 +1,13 @@
+export class AddMetaOptions1688280713783 {
+ name = 'AddMetaOptions1688280713783'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" ADD "enableServerMachineStats" boolean NOT NULL DEFAULT false`);
+ await queryRunner.query(`ALTER TABLE "meta" ADD "enableIdenticonGeneration" boolean NOT NULL DEFAULT true`);
+ }
+
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableIdenticonGeneration"`);
+ await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableServerMachineStats"`);
+ }
+}
diff --git a/packages/backend/src/daemons/ServerStatsService.ts b/packages/backend/src/daemons/ServerStatsService.ts
index 6cd71c0e2a..375fd5e516 100644
--- a/packages/backend/src/daemons/ServerStatsService.ts
+++ b/packages/backend/src/daemons/ServerStatsService.ts
@@ -3,6 +3,7 @@ import si from 'systeminformation';
import Xev from 'xev';
import * as osUtils from 'os-utils';
import { bindThis } from '@/decorators.js';
+import { MetaService } from '@/core/MetaService.js';
import type { OnApplicationShutdown } from '@nestjs/common';
const ev = new Xev();
@@ -14,9 +15,10 @@ const round = (num: number) => Math.round(num * 10) / 10;
@Injectable()
export class ServerStatsService implements OnApplicationShutdown {
- private intervalId: NodeJS.Timer;
+ private intervalId: NodeJS.Timer | null = null;
constructor(
+ private metaService: MetaService,
) {
}
@@ -24,7 +26,9 @@ export class ServerStatsService implements OnApplicationShutdown {
* Report server stats regularly
*/
@bindThis
- public start(): void {
+ public async start(): Promise<void> {
+ if (!(await this.metaService.fetch(true)).enableServerMachineStats) return;
+
const log = [] as any[];
ev.on('requestServerStatsLog', x => {
@@ -64,7 +68,9 @@ export class ServerStatsService implements OnApplicationShutdown {
@bindThis
public dispose(): void {
- clearInterval(this.intervalId);
+ if (this.intervalId) {
+ clearInterval(this.intervalId);
+ }
}
@bindThis
diff --git a/packages/backend/src/models/entities/Meta.ts b/packages/backend/src/models/entities/Meta.ts
index f799551f30..a251c0b31c 100644
--- a/packages/backend/src/models/entities/Meta.ts
+++ b/packages/backend/src/models/entities/Meta.ts
@@ -413,6 +413,16 @@ export class Meta {
})
public enableChartsForFederatedInstances: boolean;
+ @Column('boolean', {
+ default: false,
+ })
+ public enableServerMachineStats: boolean;
+
+ @Column('boolean', {
+ default: true,
+ })
+ public enableIdenticonGeneration: boolean;
+
@Column('jsonb', {
default: { },
})
diff --git a/packages/backend/src/server/ServerService.ts b/packages/backend/src/server/ServerService.ts
index c3d45e4ad6..1bae71617b 100644
--- a/packages/backend/src/server/ServerService.ts
+++ b/packages/backend/src/server/ServerService.ts
@@ -16,6 +16,7 @@ import { createTemp } from '@/misc/create-temp.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { LoggerService } from '@/core/LoggerService.js';
import { bindThis } from '@/decorators.js';
+import { MetaService } from '@/core/MetaService.js';
import { ActivityPubServerService } from './ActivityPubServerService.js';
import { NodeinfoServerService } from './NodeinfoServerService.js';
import { ApiServerService } from './api/ApiServerService.js';
@@ -45,6 +46,7 @@ export class ServerService implements OnApplicationShutdown {
@Inject(DI.emojisRepository)
private emojisRepository: EmojisRepository,
+ private metaService: MetaService,
private userEntityService: UserEntityService,
private apiServerService: ApiServerService,
private openApiServerService: OpenApiServerService,
@@ -161,11 +163,16 @@ export class ServerService implements OnApplicationShutdown {
});
fastify.get<{ Params: { x: string } }>('/identicon/:x', async (request, reply) => {
- const [temp, cleanup] = await createTemp();
- await genIdenticon(request.params.x, fs.createWriteStream(temp));
reply.header('Content-Type', 'image/png');
reply.header('Cache-Control', 'public, max-age=86400');
- return fs.createReadStream(temp).on('close', () => cleanup());
+
+ if ((await this.metaService.fetch()).enableIdenticonGeneration) {
+ const [temp, cleanup] = await createTemp();
+ await genIdenticon(request.params.x, fs.createWriteStream(temp));
+ return fs.createReadStream(temp).on('close', () => cleanup());
+ } else {
+ return reply.redirect('/static-assets/avatar.png');
+ }
});
fastify.get<{ Params: { code: string } }>('/verify-email/:code', async (request, reply) => {
@@ -224,7 +231,7 @@ export class ServerService implements OnApplicationShutdown {
@bindThis
public async dispose(): Promise<void> {
- await this.streamingApiServerService.detach();
+ await this.streamingApiServerService.detach();
await this.#fastify.close();
}
diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts
index 4cc1b6011f..28aec7a090 100644
--- a/packages/backend/src/server/api/endpoints/admin/meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/meta.ts
@@ -262,6 +262,14 @@ export const meta = {
type: 'boolean',
optional: false, nullable: false,
},
+ enableServerMachineStats: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
+ enableIdenticonGeneration: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
policies: {
type: 'object',
optional: false, nullable: false,
@@ -364,6 +372,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
enableActiveEmailValidation: instance.enableActiveEmailValidation,
enableChartsForRemoteUser: instance.enableChartsForRemoteUser,
enableChartsForFederatedInstances: instance.enableChartsForFederatedInstances,
+ enableServerMachineStats: instance.enableServerMachineStats,
+ enableIdenticonGeneration: instance.enableIdenticonGeneration,
policies: { ...DEFAULT_POLICIES, ...instance.policies },
};
});
diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
index 1de5e9efd3..5c9d8e3fac 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -96,6 +96,8 @@ export const paramDef = {
enableActiveEmailValidation: { type: 'boolean' },
enableChartsForRemoteUser: { type: 'boolean' },
enableChartsForFederatedInstances: { type: 'boolean' },
+ enableServerMachineStats: { type: 'boolean' },
+ enableIdenticonGeneration: { type: 'boolean' },
serverRules: { type: 'array', items: { type: 'string' } },
preservedUsernames: { type: 'array', items: { type: 'string' } },
},
@@ -399,6 +401,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
set.enableChartsForFederatedInstances = ps.enableChartsForFederatedInstances;
}
+ if (ps.enableServerMachineStats !== undefined) {
+ set.enableServerMachineStats = ps.enableServerMachineStats;
+ }
+
+ if (ps.enableIdenticonGeneration !== undefined) {
+ set.enableIdenticonGeneration = ps.enableIdenticonGeneration;
+ }
+
if (ps.serverRules !== undefined) {
set.serverRules = ps.serverRules;
}
diff --git a/packages/backend/src/server/api/endpoints/server-info.ts b/packages/backend/src/server/api/endpoints/server-info.ts
index 1620e8ae52..552441e430 100644
--- a/packages/backend/src/server/api/endpoints/server-info.ts
+++ b/packages/backend/src/server/api/endpoints/server-info.ts
@@ -2,9 +2,12 @@ import * as os from 'node:os';
import si from 'systeminformation';
import { Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
+import { MetaService } from '@/core/MetaService.js';
export const meta = {
requireCredential: false,
+ allowGet: true,
+ cacheSec: 60 * 1,
tags: ['meta'],
} as const;
@@ -19,8 +22,24 @@ export const paramDef = {
@Injectable()
export default class extends Endpoint<typeof meta, typeof paramDef> {
constructor(
+ private metaService: MetaService,
) {
super(meta, paramDef, async () => {
+ if (!(await this.metaService.fetch()).enableServerMachineStats) return {
+ machine: '?',
+ cpu: {
+ model: '?',
+ cores: 0,
+ },
+ mem: {
+ total: 0,
+ },
+ fs: {
+ total: 0,
+ used: 0,
+ },
+ };
+
const memStats = await si.mem();
const fsStats = await si.fsSize();
diff --git a/packages/frontend/src/pages/admin/other-settings.vue b/packages/frontend/src/pages/admin/other-settings.vue
index 15d720a070..d3e1d9efc1 100644
--- a/packages/frontend/src/pages/admin/other-settings.vue
+++ b/packages/frontend/src/pages/admin/other-settings.vue
@@ -4,6 +4,14 @@
<MkSpacer :contentMax="700" :marginMin="16" :marginMax="32">
<FormSuspense :p="init">
<div class="_gaps_s">
+ <MkSwitch v-model="enableServerMachineStats">
+ <template #label>{{ i18n.ts.enableServerMachineStats }}</template>
+ </MkSwitch>
+
+ <MkSwitch v-model="enableIdenticonGeneration">
+ <template #label>{{ i18n.ts.enableIdenticonGeneration }}</template>
+ </MkSwitch>
+
<MkSwitch v-model="enableChartsForRemoteUser">
<template #label>{{ i18n.ts.enableChartsForRemoteUser }}</template>
</MkSwitch>
@@ -27,17 +35,23 @@ import { i18n } from '@/i18n';
import { definePageMetadata } from '@/scripts/page-metadata';
import MkSwitch from '@/components/MkSwitch.vue';
+let enableServerMachineStats: boolean = $ref(false);
+let enableIdenticonGeneration: boolean = $ref(false);
let enableChartsForRemoteUser: boolean = $ref(false);
let enableChartsForFederatedInstances: boolean = $ref(false);
async function init() {
const meta = await os.api('admin/meta');
+ enableServerMachineStats = meta.enableServerMachineStats;
+ enableIdenticonGeneration = meta.enableIdenticonGeneration;
enableChartsForRemoteUser = meta.enableChartsForRemoteUser;
enableChartsForFederatedInstances = meta.enableChartsForFederatedInstances;
}
function save() {
os.apiWithDialog('admin/update-meta', {
+ enableServerMachineStats,
+ enableIdenticonGeneration,
enableChartsForRemoteUser,
enableChartsForFederatedInstances,
}).then(() => {
diff --git a/packages/frontend/src/widgets/server-metric/index.vue b/packages/frontend/src/widgets/server-metric/index.vue
index e019ff540b..1a78f4bcd6 100644
--- a/packages/frontend/src/widgets/server-metric/index.vue
+++ b/packages/frontend/src/widgets/server-metric/index.vue
@@ -62,7 +62,7 @@ const { widgetProps, configure, save } = useWidgetPropsManager(name,
const meta = ref(null);
-os.api('server-info', {}).then(res => {
+os.apiGet('server-info', {}).then(res => {
meta.value = res;
});