Skip to content

Commit c0efad6

Browse files
enhance: stats apiの重い処理をスキップできるように
1 parent ae1d0b0 commit c0efad6

File tree

9 files changed

+59
-2
lines changed

9 files changed

+59
-2
lines changed

locales/index.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -5222,6 +5222,10 @@ export interface Locale extends ILocale {
52225222
* 注意事項を理解した上でオンにします。
52235223
*/
52245224
"acknowledgeNotesAndEnable": string;
5225+
/**
5226+
* 拡張されたサーバー統計APIを利用する
5227+
*/
5228+
"enableEnhancedServerStats": string;
52255229
"_accountSettings": {
52265230
/**
52275231
* コンテンツの表示にログインを必須にする

locales/ja-JP.yml

+1
Original file line numberDiff line numberDiff line change
@@ -1301,6 +1301,7 @@ lockdown: "ロックダウン"
13011301
pleaseSelectAccount: "アカウントを選択してください"
13021302
availableRoles: "利用可能なロール"
13031303
acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。"
1304+
enableEnhancedServerStats: "拡張されたサーバー統計APIを利用する"
13041305

13051306
_accountSettings:
13061307
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* SPDX-FileCopyrightText: syuilo and misskey-project
3+
* SPDX-License-Identifier: AGPL-3.0-only
4+
*/
5+
6+
export class EnableEnhancedServerStats1732635823870 {
7+
name = 'EnableEnhancedServerStats1732635823870'
8+
9+
async up(queryRunner) {
10+
await queryRunner.query(`ALTER TABLE "meta" ADD "enableEnhancedServerStats" boolean NOT NULL DEFAULT true`);
11+
}
12+
13+
async down(queryRunner) {
14+
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableEnhancedServerStats"`);
15+
}
16+
}

packages/backend/src/models/Meta.ts

+5
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,11 @@ export class MiMeta {
544544
})
545545
public enableIdenticonGeneration: boolean;
546546

547+
@Column('boolean', {
548+
default: true,
549+
})
550+
public enableEnhancedServerStats: boolean;
551+
547552
@Column('jsonb', {
548553
default: { },
549554
})

packages/backend/src/server/api/endpoints/admin/meta.ts

+5
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,10 @@ export const meta = {
356356
type: 'boolean',
357357
optional: false, nullable: false,
358358
},
359+
enableEnhancedServerStats: {
360+
type: 'boolean',
361+
optional: false, nullable: false,
362+
},
359363
enableIdenticonGeneration: {
360364
type: 'boolean',
361365
optional: false, nullable: false,
@@ -641,6 +645,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
641645
enableChartsForFederatedInstances: instance.enableChartsForFederatedInstances,
642646
enableStatsForFederatedInstances: instance.enableStatsForFederatedInstances,
643647
enableServerMachineStats: instance.enableServerMachineStats,
648+
enableEnhancedServerStats: instance.enableEnhancedServerStats,
644649
enableIdenticonGeneration: instance.enableIdenticonGeneration,
645650
bannedEmailDomains: instance.bannedEmailDomains,
646651
policies: { ...DEFAULT_POLICIES, ...instance.policies },

packages/backend/src/server/api/endpoints/admin/update-meta.ts

+5
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ export const paramDef = {
138138
enableChartsForFederatedInstances: { type: 'boolean' },
139139
enableStatsForFederatedInstances: { type: 'boolean' },
140140
enableServerMachineStats: { type: 'boolean' },
141+
enableEnhancedServerStats: { type: 'boolean' },
141142
enableIdenticonGeneration: { type: 'boolean' },
142143
serverRules: { type: 'array', items: { type: 'string' } },
143144
bannedEmailDomains: { type: 'array', items: { type: 'string' } },
@@ -587,6 +588,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
587588
set.enableServerMachineStats = ps.enableServerMachineStats;
588589
}
589590

591+
if (ps.enableEnhancedServerStats !== undefined) {
592+
set.enableEnhancedServerStats = ps.enableEnhancedServerStats;
593+
}
594+
590595
if (ps.enableIdenticonGeneration !== undefined) {
591596
set.enableIdenticonGeneration = ps.enableIdenticonGeneration;
592597
}

packages/backend/src/server/api/endpoints/stats.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { Inject, Injectable } from '@nestjs/common';
7-
import type { InstancesRepository, NoteReactionsRepository } from '@/models/_.js';
7+
import type { MiMeta, InstancesRepository, NoteReactionsRepository } from '@/models/_.js';
88
import { Endpoint } from '@/server/api/endpoint-base.js';
99
import { DI } from '@/di-symbols.js';
1010
import NotesChart from '@/core/chart/charts/notes.js';
@@ -60,6 +60,9 @@ export const paramDef = {
6060
@Injectable()
6161
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
6262
constructor(
63+
@Inject(DI.meta)
64+
private instanceMeta: MiMeta,
65+
6366
@Inject(DI.instancesRepository)
6467
private instancesRepository: InstancesRepository,
6568

@@ -83,7 +86,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
8386
//originalReactionsCount,
8487
instances,
8588
] = await Promise.all([
86-
this.noteReactionsRepository.count({ cache: 3600000 }), // 1 hour
89+
this.instanceMeta.enableEnhancedServerStats ? this.noteReactionsRepository.count({ cache: 3600000 }) : Promise.resolve(0), // 1 hour
8790
//this.noteReactionsRepository.count({ where: { userHost: IsNull() }, cache: 3600000 }),
8891
this.instancesRepository.count({ cache: 3600000 }),
8992
]);

packages/frontend/src/pages/admin/performance.vue

+16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ SPDX-License-Identifier: AGPL-3.0-only
1515
</MkSwitch>
1616
</div>
1717

18+
<div class="_panel" style="padding: 16px;">
19+
<MkSwitch v-model="enableEnhancedServerStats" @change="onChange_enableEnhancedServerStats">
20+
<template #label>{{ i18n.ts.enableEnhancedServerStats }}</template>
21+
<template #caption>{{ i18n.ts.turnOffToImprovePerformance }}</template>
22+
</MkSwitch>
23+
</div>
24+
1825
<div class="_panel" style="padding: 16px;">
1926
<MkSwitch v-model="enableIdenticonGeneration" @change="onChange_enableIdenticonGeneration">
2027
<template #label>{{ i18n.ts.enableIdenticonGeneration }}</template>
@@ -125,6 +132,7 @@ import MkFormFooter from '@/components/MkFormFooter.vue';
125132
const meta = await misskeyApi('admin/meta');
126133

127134
const enableServerMachineStats = ref(meta.enableServerMachineStats);
135+
const enableEnhancedServerStats = ref(meta.enableEnhancedServerStats);
128136
const enableIdenticonGeneration = ref(meta.enableIdenticonGeneration);
129137
const enableChartsForRemoteUser = ref(meta.enableChartsForRemoteUser);
130138
const enableStatsForFederatedInstances = ref(meta.enableStatsForFederatedInstances);
@@ -138,6 +146,14 @@ function onChange_enableServerMachineStats(value: boolean) {
138146
});
139147
}
140148

149+
function onChange_enableEnhancedServerStats(value: boolean) {
150+
os.apiWithDialog('admin/update-meta', {
151+
enableEnhancedServerStats: value,
152+
}).then(() => {
153+
fetchInstance(true);
154+
});
155+
}
156+
141157
function onChange_enableIdenticonGeneration(value: boolean) {
142158
os.apiWithDialog('admin/update-meta', {
143159
enableIdenticonGeneration: value,

packages/misskey-js/src/autogen/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -5179,6 +5179,7 @@ export type operations = {
51795179
enableChartsForFederatedInstances: boolean;
51805180
enableStatsForFederatedInstances: boolean;
51815181
enableServerMachineStats: boolean;
5182+
enableEnhancedServerStats: boolean;
51825183
enableIdenticonGeneration: boolean;
51835184
manifestJsonOverride: string;
51845185
policies: Record<string, never>;
@@ -9575,6 +9576,7 @@ export type operations = {
95759576
enableChartsForFederatedInstances?: boolean;
95769577
enableStatsForFederatedInstances?: boolean;
95779578
enableServerMachineStats?: boolean;
9579+
enableEnhancedServerStats?: boolean;
95789580
enableIdenticonGeneration?: boolean;
95799581
serverRules?: string[];
95809582
bannedEmailDomains?: string[];

0 commit comments

Comments
 (0)