diff --git a/CHANGELOG.md b/CHANGELOG.md index fd56700e1f..ef8da8837d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ - Fix: 絵文字管理画面で一部の絵文字が表示されない問題を修正 ### Server +- Enhance: `/stats` APIの重い処理をスキップできるようにするオプションを追加 + - 処理がスキップされた部分の値は`0`となります - Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 ) - Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正 (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737) diff --git a/locales/index.d.ts b/locales/index.d.ts index 63878d3d47..ee4496e9d6 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5222,6 +5222,10 @@ export interface Locale extends ILocale { * 注意事項を理解した上でオンにします。 */ "acknowledgeNotesAndEnable": string; + /** + * 拡張されたサーバー統計APIを利用する + */ + "enableEnhancedServerStats": string; "_accountSettings": { /** * コンテンツの表示にログインを必須にする diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index d78bd4ee65..6bd2c3bd0a 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1301,6 +1301,7 @@ lockdown: "ロックダウン" pleaseSelectAccount: "アカウントを選択してください" availableRoles: "利用可能なロール" acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。" +enableEnhancedServerStats: "拡張されたサーバー統計APIを利用する" _accountSettings: requireSigninToViewContents: "コンテンツの表示にログインを必須にする" diff --git a/packages/backend/migration/1732635823870-EnableEnhancedServerStats.js b/packages/backend/migration/1732635823870-EnableEnhancedServerStats.js new file mode 100644 index 0000000000..51e692c487 --- /dev/null +++ b/packages/backend/migration/1732635823870-EnableEnhancedServerStats.js @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class EnableEnhancedServerStats1732635823870 { + name = 'EnableEnhancedServerStats1732635823870' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "enableEnhancedServerStats" boolean NOT NULL DEFAULT true`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableEnhancedServerStats"`); + } +} diff --git a/packages/backend/src/models/Meta.ts b/packages/backend/src/models/Meta.ts index ad5e31ad6f..97875ade07 100644 --- a/packages/backend/src/models/Meta.ts +++ b/packages/backend/src/models/Meta.ts @@ -544,6 +544,11 @@ export class MiMeta { }) public enableIdenticonGeneration: boolean; + @Column('boolean', { + default: true, + }) + public enableEnhancedServerStats: boolean; + @Column('jsonb', { default: { }, }) diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 64e3cc33bd..933deeac62 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -356,6 +356,10 @@ export const meta = { type: 'boolean', optional: false, nullable: false, }, + enableEnhancedServerStats: { + type: 'boolean', + optional: false, nullable: false, + }, enableIdenticonGeneration: { type: 'boolean', optional: false, nullable: false, @@ -641,6 +645,7 @@ export default class extends Endpoint { // eslint- enableChartsForFederatedInstances: instance.enableChartsForFederatedInstances, enableStatsForFederatedInstances: instance.enableStatsForFederatedInstances, enableServerMachineStats: instance.enableServerMachineStats, + enableEnhancedServerStats: instance.enableEnhancedServerStats, enableIdenticonGeneration: instance.enableIdenticonGeneration, bannedEmailDomains: instance.bannedEmailDomains, 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 38ef0d1de8..350805e449 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -138,6 +138,7 @@ export const paramDef = { enableChartsForFederatedInstances: { type: 'boolean' }, enableStatsForFederatedInstances: { type: 'boolean' }, enableServerMachineStats: { type: 'boolean' }, + enableEnhancedServerStats: { type: 'boolean' }, enableIdenticonGeneration: { type: 'boolean' }, serverRules: { type: 'array', items: { type: 'string' } }, bannedEmailDomains: { type: 'array', items: { type: 'string' } }, @@ -587,6 +588,10 @@ export default class extends Endpoint { // eslint- set.enableServerMachineStats = ps.enableServerMachineStats; } + if (ps.enableEnhancedServerStats !== undefined) { + set.enableEnhancedServerStats = ps.enableEnhancedServerStats; + } + if (ps.enableIdenticonGeneration !== undefined) { set.enableIdenticonGeneration = ps.enableIdenticonGeneration; } diff --git a/packages/backend/src/server/api/endpoints/stats.ts b/packages/backend/src/server/api/endpoints/stats.ts index 1e6983177f..b3b6e7daaf 100644 --- a/packages/backend/src/server/api/endpoints/stats.ts +++ b/packages/backend/src/server/api/endpoints/stats.ts @@ -4,7 +4,7 @@ */ import { Inject, Injectable } from '@nestjs/common'; -import type { InstancesRepository, NoteReactionsRepository } from '@/models/_.js'; +import type { MiMeta, InstancesRepository, NoteReactionsRepository } from '@/models/_.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { DI } from '@/di-symbols.js'; import NotesChart from '@/core/chart/charts/notes.js'; @@ -60,6 +60,9 @@ export const paramDef = { @Injectable() export default class extends Endpoint { // eslint-disable-line import/no-default-export constructor( + @Inject(DI.meta) + private instanceMeta: MiMeta, + @Inject(DI.instancesRepository) private instancesRepository: InstancesRepository, @@ -83,7 +86,7 @@ export default class extends Endpoint { // eslint- //originalReactionsCount, instances, ] = await Promise.all([ - this.noteReactionsRepository.count({ cache: 3600000 }), // 1 hour + this.instanceMeta.enableEnhancedServerStats ? this.noteReactionsRepository.count({ cache: 3600000 }) : Promise.resolve(0), // 1 hour //this.noteReactionsRepository.count({ where: { userHost: IsNull() }, cache: 3600000 }), this.instancesRepository.count({ cache: 3600000 }), ]); diff --git a/packages/frontend/src/pages/admin/performance.vue b/packages/frontend/src/pages/admin/performance.vue index 12338f0bf9..f9bd003237 100644 --- a/packages/frontend/src/pages/admin/performance.vue +++ b/packages/frontend/src/pages/admin/performance.vue @@ -15,6 +15,13 @@ SPDX-License-Identifier: AGPL-3.0-only +
+ + + + +
+
@@ -125,6 +132,7 @@ import MkFormFooter from '@/components/MkFormFooter.vue'; const meta = await misskeyApi('admin/meta'); const enableServerMachineStats = ref(meta.enableServerMachineStats); +const enableEnhancedServerStats = ref(meta.enableEnhancedServerStats); const enableIdenticonGeneration = ref(meta.enableIdenticonGeneration); const enableChartsForRemoteUser = ref(meta.enableChartsForRemoteUser); const enableStatsForFederatedInstances = ref(meta.enableStatsForFederatedInstances); @@ -138,6 +146,14 @@ function onChange_enableServerMachineStats(value: boolean) { }); } +function onChange_enableEnhancedServerStats(value: boolean) { + os.apiWithDialog('admin/update-meta', { + enableEnhancedServerStats: value, + }).then(() => { + fetchInstance(true); + }); +} + function onChange_enableIdenticonGeneration(value: boolean) { os.apiWithDialog('admin/update-meta', { enableIdenticonGeneration: value, diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 42ca05e057..4ce7b8fbed 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -5179,6 +5179,7 @@ export type operations = { enableChartsForFederatedInstances: boolean; enableStatsForFederatedInstances: boolean; enableServerMachineStats: boolean; + enableEnhancedServerStats: boolean; enableIdenticonGeneration: boolean; manifestJsonOverride: string; policies: Record; @@ -9575,6 +9576,7 @@ export type operations = { enableChartsForFederatedInstances?: boolean; enableStatsForFederatedInstances?: boolean; enableServerMachineStats?: boolean; + enableEnhancedServerStats?: boolean; enableIdenticonGeneration?: boolean; serverRules?: string[]; bannedEmailDomains?: string[];