summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-03-24 19:08:08 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-03-24 19:08:08 +0900
commit31f3f5f0f04b438b7cf12295303dc9adde28f82f (patch)
treefb5b9bc5b96dd2cf545bb87750e97640efab8569
parentenhance(backend): use :heart: for reaction fallback (diff)
downloadsharkey-31f3f5f0f04b438b7cf12295303dc9adde28f82f.tar.gz
sharkey-31f3f5f0f04b438b7cf12295303dc9adde28f82f.tar.bz2
sharkey-31f3f5f0f04b438b7cf12295303dc9adde28f82f.zip
enhance(backend): リモートサーバーのチャート生成を無効にするオプションを追加
-rw-r--r--CHANGELOG.md1
-rw-r--r--locales/ja-JP.yml1
-rw-r--r--packages/backend/migration/1679652081809-enableChartsForFederatedInstances.js11
-rw-r--r--packages/backend/src/core/DriveService.ts8
-rw-r--r--packages/backend/src/core/NoteCreateService.ts6
-rw-r--r--packages/backend/src/core/NoteDeleteService.ts6
-rw-r--r--packages/backend/src/core/UserFollowingService.ts26
-rw-r--r--packages/backend/src/core/activitypub/models/ApPersonService.ts10
-rw-r--r--packages/backend/src/models/entities/Meta.ts5
-rw-r--r--packages/backend/src/queue/processors/DeliverProcessorService.ts11
-rw-r--r--packages/backend/src/queue/processors/InboxProcessorService.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/meta.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/update-meta.ts5
-rw-r--r--packages/frontend/src/pages/admin/settings.vue7
14 files changed, 87 insertions, 20 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e89f0ca707..1c792b537b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,7 @@
### Server
- リモートユーザーのチャート生成を無効にするオプションを追加
+- リモートサーバーのチャート生成を無効にするオプションを追加
- ドライブのチャートはローカルユーザーのみ生成するように
- 空のアンテナが作成できるのを修正
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 356b93c696..cf4ede30b6 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -981,6 +981,7 @@ retryAllQueuesNow: "すべてのキューを今すぐ再試行"
retryAllQueuesConfirmTitle: "今すぐ再試行しますか?"
retryAllQueuesConfirmText: "一時的にサーバーの負荷が増大することがあります。"
enableChartsForRemoteUser: "リモートユーザーのチャートを生成"
+enableChartsForFederatedInstances: "リモートサーバーのチャートを生成"
showClipButtonInNoteFooter: "ノートのアクションにクリップを追加"
_achievements:
diff --git a/packages/backend/migration/1679652081809-enableChartsForFederatedInstances.js b/packages/backend/migration/1679652081809-enableChartsForFederatedInstances.js
new file mode 100644
index 0000000000..0733339841
--- /dev/null
+++ b/packages/backend/migration/1679652081809-enableChartsForFederatedInstances.js
@@ -0,0 +1,11 @@
+export class enableChartsForFederatedInstances1679652081809 {
+ name = 'enableChartsForFederatedInstances1679652081809'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" ADD "enableChartsForFederatedInstances" boolean NOT NULL DEFAULT true`);
+ }
+
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "enableChartsForFederatedInstances"`);
+ }
+}
diff --git a/packages/backend/src/core/DriveService.ts b/packages/backend/src/core/DriveService.ts
index 7e991cfd9e..c6258474ec 100644
--- a/packages/backend/src/core/DriveService.ts
+++ b/packages/backend/src/core/DriveService.ts
@@ -624,7 +624,9 @@ export class DriveService {
// ローカルユーザーのみ
this.perUserDriveChart.update(file, true);
} else {
- this.instanceChart.updateDrive(file, true);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateDrive(file, true);
+ }
}
return file;
@@ -712,7 +714,9 @@ export class DriveService {
// ローカルユーザーのみ
this.perUserDriveChart.update(file, false);
} else {
- this.instanceChart.updateDrive(file, false);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateDrive(file, false);
+ }
}
}
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index b9bb0bcbd0..7d08053761 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -444,9 +444,11 @@ export class NoteCreateService implements OnApplicationShutdown {
// Register host
if (this.userEntityService.isRemoteUser(user)) {
- this.federatedInstanceService.fetch(user.host).then(i => {
+ this.federatedInstanceService.fetch(user.host).then(async i => {
this.instancesRepository.increment({ id: i.id }, 'notesCount', 1);
- this.instanceChart.updateNote(i.host, note, true);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateNote(i.host, note, true);
+ }
});
}
diff --git a/packages/backend/src/core/NoteDeleteService.ts b/packages/backend/src/core/NoteDeleteService.ts
index 93cb68bbfe..dd878f7bba 100644
--- a/packages/backend/src/core/NoteDeleteService.ts
+++ b/packages/backend/src/core/NoteDeleteService.ts
@@ -105,9 +105,11 @@ export class NoteDeleteService {
}
if (this.userEntityService.isRemoteUser(user)) {
- this.federatedInstanceService.fetch(user.host).then(i => {
+ this.federatedInstanceService.fetch(user.host).then(async i => {
this.instancesRepository.decrement({ id: i.id }, 'notesCount', 1);
- this.instanceChart.updateNote(i.host, note, false);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateNote(i.host, note, false);
+ }
});
}
}
diff --git a/packages/backend/src/core/UserFollowingService.ts b/packages/backend/src/core/UserFollowingService.ts
index 1c85504353..b51b553c70 100644
--- a/packages/backend/src/core/UserFollowingService.ts
+++ b/packages/backend/src/core/UserFollowingService.ts
@@ -17,6 +17,7 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
import { bindThis } from '@/decorators.js';
import { UserBlockingService } from '@/core/UserBlockingService.js';
+import { MetaService } from '@/core/MetaService.js';
import Logger from '../logger.js';
const logger = new Logger('following/create');
@@ -57,6 +58,7 @@ export class UserFollowingService {
private idService: IdService,
private queueService: QueueService,
private globalEventService: GlobalEventService,
+ private metaService: MetaService,
private notificationService: NotificationService,
private federatedInstanceService: FederatedInstanceService,
private webhookService: WebhookService,
@@ -200,14 +202,18 @@ export class UserFollowingService {
//#region Update instance stats
if (this.userEntityService.isRemoteUser(follower) && this.userEntityService.isLocalUser(followee)) {
- this.federatedInstanceService.fetch(follower.host).then(i => {
+ this.federatedInstanceService.fetch(follower.host).then(async i => {
this.instancesRepository.increment({ id: i.id }, 'followingCount', 1);
- this.instanceChart.updateFollowing(i.host, true);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateFollowing(i.host, true);
+ }
});
} else if (this.userEntityService.isLocalUser(follower) && this.userEntityService.isRemoteUser(followee)) {
- this.federatedInstanceService.fetch(followee.host).then(i => {
+ this.federatedInstanceService.fetch(followee.host).then(async i => {
this.instancesRepository.increment({ id: i.id }, 'followersCount', 1);
- this.instanceChart.updateFollowers(i.host, true);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateFollowers(i.host, true);
+ }
});
}
//#endregion
@@ -320,14 +326,18 @@ export class UserFollowingService {
//#region Update instance stats
if (this.userEntityService.isRemoteUser(follower) && this.userEntityService.isLocalUser(followee)) {
- this.federatedInstanceService.fetch(follower.host).then(i => {
+ this.federatedInstanceService.fetch(follower.host).then(async i => {
this.instancesRepository.decrement({ id: i.id }, 'followingCount', 1);
- this.instanceChart.updateFollowing(i.host, false);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateFollowing(i.host, false);
+ }
});
} else if (this.userEntityService.isLocalUser(follower) && this.userEntityService.isRemoteUser(followee)) {
- this.federatedInstanceService.fetch(followee.host).then(i => {
+ this.federatedInstanceService.fetch(followee.host).then(async i => {
this.instancesRepository.decrement({ id: i.id }, 'followersCount', 1);
- this.instanceChart.updateFollowers(i.host, false);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.updateFollowers(i.host, false);
+ }
});
}
//#endregion
diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts
index d06958da0c..41f7eafa41 100644
--- a/packages/backend/src/core/activitypub/models/ApPersonService.ts
+++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts
@@ -30,6 +30,7 @@ import { StatusError } from '@/misc/status-error.js';
import type { UtilityService } from '@/core/UtilityService.js';
import type { UserEntityService } from '@/core/entities/UserEntityService.js';
import { bindThis } from '@/decorators.js';
+import { MetaService } from '@/core/MetaService.js';
import { getApId, getApType, getOneApHrefNullable, isActor, isCollection, isCollectionOrOrderedCollection, isPropertyValue } from '../type.js';
import { extractApHashtags } from './tag.js';
import type { OnModuleInit } from '@nestjs/common';
@@ -50,6 +51,7 @@ export class ApPersonService implements OnModuleInit {
private userEntityService: UserEntityService;
private idService: IdService;
private globalEventService: GlobalEventService;
+ private metaService: MetaService;
private federatedInstanceService: FederatedInstanceService;
private fetchInstanceMetadataService: FetchInstanceMetadataService;
private userCacheService: UserCacheService;
@@ -92,6 +94,7 @@ export class ApPersonService implements OnModuleInit {
//private userEntityService: UserEntityService,
//private idService: IdService,
//private globalEventService: GlobalEventService,
+ //private metaService: MetaService,
//private federatedInstanceService: FederatedInstanceService,
//private fetchInstanceMetadataService: FetchInstanceMetadataService,
//private userCacheService: UserCacheService,
@@ -112,6 +115,7 @@ export class ApPersonService implements OnModuleInit {
this.userEntityService = this.moduleRef.get('UserEntityService');
this.idService = this.moduleRef.get('IdService');
this.globalEventService = this.moduleRef.get('GlobalEventService');
+ this.metaService = this.moduleRef.get('MetaService');
this.federatedInstanceService = this.moduleRef.get('FederatedInstanceService');
this.fetchInstanceMetadataService = this.moduleRef.get('FetchInstanceMetadataService');
this.userCacheService = this.moduleRef.get('UserCacheService');
@@ -327,10 +331,12 @@ export class ApPersonService implements OnModuleInit {
}
// Register host
- this.federatedInstanceService.fetch(host).then(i => {
+ this.federatedInstanceService.fetch(host).then(async i => {
this.instancesRepository.increment({ id: i.id }, 'usersCount', 1);
- this.instanceChart.newUser(i.host);
this.fetchInstanceMetadataService.fetchInstanceMetadata(i);
+ if ((await this.metaService.fetch()).enableChartsForFederatedInstances) {
+ this.instanceChart.newUser(i.host);
+ }
});
this.usersChart.update(user!, true);
diff --git a/packages/backend/src/models/entities/Meta.ts b/packages/backend/src/models/entities/Meta.ts
index c7c60b6405..2e4f90b57f 100644
--- a/packages/backend/src/models/entities/Meta.ts
+++ b/packages/backend/src/models/entities/Meta.ts
@@ -396,6 +396,11 @@ export class Meta {
})
public enableChartsForRemoteUser: boolean;
+ @Column('boolean', {
+ default: true,
+ })
+ public enableChartsForFederatedInstances: boolean;
+
@Column('jsonb', {
default: { },
})
diff --git a/packages/backend/src/queue/processors/DeliverProcessorService.ts b/packages/backend/src/queue/processors/DeliverProcessorService.ts
index 34e1ddfc84..f637bf8818 100644
--- a/packages/backend/src/queue/processors/DeliverProcessorService.ts
+++ b/packages/backend/src/queue/processors/DeliverProcessorService.ts
@@ -88,10 +88,12 @@ export class DeliverProcessorService {
}
this.fetchInstanceMetadataService.fetchInstanceMetadata(i);
-
- this.instanceChart.requestSent(i.host, true);
this.apRequestChart.deliverSucc();
this.federationChart.deliverd(i.host, true);
+
+ if (meta.enableChartsForFederatedInstances) {
+ this.instanceChart.requestSent(i.host, true);
+ }
});
return 'Success';
@@ -107,9 +109,12 @@ export class DeliverProcessorService {
});
}
- this.instanceChart.requestSent(i.host, false);
this.apRequestChart.deliverFail();
this.federationChart.deliverd(i.host, false);
+
+ if (meta.enableChartsForFederatedInstances) {
+ this.instanceChart.requestSent(i.host, false);
+ }
});
if (res instanceof StatusError) {
diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts
index 41fe06b7c3..ed7f38d013 100644
--- a/packages/backend/src/queue/processors/InboxProcessorService.ts
+++ b/packages/backend/src/queue/processors/InboxProcessorService.ts
@@ -184,9 +184,12 @@ export class InboxProcessorService {
this.fetchInstanceMetadataService.fetchInstanceMetadata(i);
- this.instanceChart.requestReceived(i.host);
this.apRequestChart.inbox();
this.federationChart.inbox(i.host);
+
+ if (meta.enableChartsForFederatedInstances) {
+ this.instanceChart.requestReceived(i.host);
+ }
});
// アクティビティを処理
diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts
index cf21e1bd8f..fc318a621a 100644
--- a/packages/backend/src/server/api/endpoints/admin/meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/meta.ts
@@ -243,6 +243,10 @@ export const meta = {
type: 'boolean',
optional: false, nullable: false,
},
+ enableChartsForFederatedInstances: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
policies: {
type: 'object',
optional: false, nullable: false,
@@ -341,6 +345,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
enableIpLogging: instance.enableIpLogging,
enableActiveEmailValidation: instance.enableActiveEmailValidation,
enableChartsForRemoteUser: instance.enableChartsForRemoteUser,
+ enableChartsForFederatedInstances: instance.enableChartsForFederatedInstances,
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 78a398d6b5..11de29bf83 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -93,6 +93,7 @@ export const paramDef = {
enableIpLogging: { type: 'boolean' },
enableActiveEmailValidation: { type: 'boolean' },
enableChartsForRemoteUser: { type: 'boolean' },
+ enableChartsForFederatedInstances: { type: 'boolean' },
},
required: [],
} as const;
@@ -382,6 +383,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
set.enableChartsForRemoteUser = ps.enableChartsForRemoteUser;
}
+ if (ps.enableChartsForFederatedInstances !== undefined) {
+ set.enableChartsForFederatedInstances = ps.enableChartsForFederatedInstances;
+ }
+
await this.metaService.update(set);
this.moderationLogService.insertModerationLog(me, 'updateMeta');
});
diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue
index ce6a14600c..65e64930d5 100644
--- a/packages/frontend/src/pages/admin/settings.vue
+++ b/packages/frontend/src/pages/admin/settings.vue
@@ -47,6 +47,10 @@
<MkSwitch v-model="enableChartsForRemoteUser">
<template #label>{{ i18n.ts.enableChartsForRemoteUser }}</template>
</MkSwitch>
+
+ <MkSwitch v-model="enableChartsForFederatedInstances">
+ <template #label>{{ i18n.ts.enableChartsForFederatedInstances }}</template>
+ </MkSwitch>
</div>
</FormSection>
@@ -180,6 +184,7 @@ let enableRegistration: boolean = $ref(false);
let emailRequiredForSignup: boolean = $ref(false);
let enableServiceWorker: boolean = $ref(false);
let enableChartsForRemoteUser: boolean = $ref(false);
+let enableChartsForFederatedInstances: boolean = $ref(false);
let swPublicKey: any = $ref(null);
let swPrivateKey: any = $ref(null);
let deeplAuthKey: string = $ref('');
@@ -204,6 +209,7 @@ async function init() {
emailRequiredForSignup = meta.emailRequiredForSignup;
enableServiceWorker = meta.enableServiceWorker;
enableChartsForRemoteUser = meta.enableChartsForRemoteUser;
+ enableChartsForFederatedInstances = meta.enableChartsForFederatedInstances;
swPublicKey = meta.swPublickey;
swPrivateKey = meta.swPrivateKey;
deeplAuthKey = meta.deeplAuthKey;
@@ -229,6 +235,7 @@ function save() {
emailRequiredForSignup,
enableServiceWorker,
enableChartsForRemoteUser,
+ enableChartsForFederatedInstances,
swPublicKey,
swPrivateKey,
deeplAuthKey,