mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-03 23:14:13 +00:00 
			
		
		
		
	merge: Sync charts one-at-a-time to reduce database contention and timeouts (!830)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/830 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Charlotte <timo.herngreen@gmail.com>
This commit is contained in:
		
						commit
						0c123d04d6
					
				
					 4 changed files with 32 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -63,9 +63,9 @@ export class ChartManagementService implements OnApplicationShutdown {
 | 
			
		|||
	@bindThis
 | 
			
		||||
	public async start() {
 | 
			
		||||
		// 20分おきにメモリ情報をDBに書き込み
 | 
			
		||||
		this.saveIntervalId = setInterval(() => {
 | 
			
		||||
		this.saveIntervalId = setInterval(async () => {
 | 
			
		||||
			for (const chart of this.charts) {
 | 
			
		||||
				chart.save();
 | 
			
		||||
				await chart.save();
 | 
			
		||||
			}
 | 
			
		||||
			this.logger.info('All charts saved');
 | 
			
		||||
		}, 1000 * 60 * 20);
 | 
			
		||||
| 
						 | 
				
			
			@ -75,9 +75,9 @@ export class ChartManagementService implements OnApplicationShutdown {
 | 
			
		|||
	public async dispose(): Promise<void> {
 | 
			
		||||
		clearInterval(this.saveIntervalId);
 | 
			
		||||
		if (process.env.NODE_ENV !== 'test') {
 | 
			
		||||
			await Promise.all(
 | 
			
		||||
				this.charts.map(chart => chart.save()),
 | 
			
		||||
			);
 | 
			
		||||
			for (const chart of this.charts) {
 | 
			
		||||
				await chart.save();
 | 
			
		||||
			}
 | 
			
		||||
			this.logger.info('All charts saved');
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,20 +48,18 @@ export class CleanChartsProcessorService {
 | 
			
		|||
	public async process(): Promise<void> {
 | 
			
		||||
		this.logger.info('Clean charts...');
 | 
			
		||||
 | 
			
		||||
		await Promise.all([
 | 
			
		||||
			this.federationChart.clean(),
 | 
			
		||||
			this.notesChart.clean(),
 | 
			
		||||
			this.usersChart.clean(),
 | 
			
		||||
			this.activeUsersChart.clean(),
 | 
			
		||||
			this.instanceChart.clean(),
 | 
			
		||||
			this.perUserNotesChart.clean(),
 | 
			
		||||
			this.perUserPvChart.clean(),
 | 
			
		||||
			this.driveChart.clean(),
 | 
			
		||||
			this.perUserReactionsChart.clean(),
 | 
			
		||||
			this.perUserFollowingChart.clean(),
 | 
			
		||||
			this.perUserDriveChart.clean(),
 | 
			
		||||
			this.apRequestChart.clean(),
 | 
			
		||||
		]);
 | 
			
		||||
		await this.federationChart.clean();
 | 
			
		||||
		await this.notesChart.clean();
 | 
			
		||||
		await this.usersChart.clean();
 | 
			
		||||
		await this.activeUsersChart.clean();
 | 
			
		||||
		await this.instanceChart.clean();
 | 
			
		||||
		await this.perUserNotesChart.clean();
 | 
			
		||||
		await this.perUserPvChart.clean();
 | 
			
		||||
		await this.driveChart.clean();
 | 
			
		||||
		await this.perUserReactionsChart.clean();
 | 
			
		||||
		await this.perUserFollowingChart.clean();
 | 
			
		||||
		await this.perUserDriveChart.clean();
 | 
			
		||||
		await this.apRequestChart.clean();
 | 
			
		||||
 | 
			
		||||
		this.logger.succ('All charts successfully cleaned.');
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,11 +31,9 @@ export class ResyncChartsProcessorService {
 | 
			
		|||
 | 
			
		||||
		// TODO: ユーザーごとのチャートも更新する
 | 
			
		||||
		// TODO: インスタンスごとのチャートも更新する
 | 
			
		||||
		await Promise.all([
 | 
			
		||||
			this.driveChart.resync(),
 | 
			
		||||
			this.notesChart.resync(),
 | 
			
		||||
			this.usersChart.resync(),
 | 
			
		||||
		]);
 | 
			
		||||
		await this.driveChart.resync();
 | 
			
		||||
		await this.notesChart.resync();
 | 
			
		||||
		await this.usersChart.resync();
 | 
			
		||||
 | 
			
		||||
		this.logger.succ('All charts successfully resynced.');
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,20 +48,18 @@ export class TickChartsProcessorService {
 | 
			
		|||
	public async process(): Promise<void> {
 | 
			
		||||
		this.logger.info('Tick charts...');
 | 
			
		||||
 | 
			
		||||
		await Promise.all([
 | 
			
		||||
			this.federationChart.tick(false),
 | 
			
		||||
			this.notesChart.tick(false),
 | 
			
		||||
			this.usersChart.tick(false),
 | 
			
		||||
			this.activeUsersChart.tick(false),
 | 
			
		||||
			this.instanceChart.tick(false),
 | 
			
		||||
			this.perUserNotesChart.tick(false),
 | 
			
		||||
			this.perUserPvChart.tick(false),
 | 
			
		||||
			this.driveChart.tick(false),
 | 
			
		||||
			this.perUserReactionsChart.tick(false),
 | 
			
		||||
			this.perUserFollowingChart.tick(false),
 | 
			
		||||
			this.perUserDriveChart.tick(false),
 | 
			
		||||
			this.apRequestChart.tick(false),
 | 
			
		||||
		]);
 | 
			
		||||
		await this.federationChart.tick(false);
 | 
			
		||||
		await this.notesChart.tick(false);
 | 
			
		||||
		await this.usersChart.tick(false);
 | 
			
		||||
		await this.activeUsersChart.tick(false);
 | 
			
		||||
		await this.instanceChart.tick(false);
 | 
			
		||||
		await this.perUserNotesChart.tick(false);
 | 
			
		||||
		await this.perUserPvChart.tick(false);
 | 
			
		||||
		await this.driveChart.tick(false);
 | 
			
		||||
		await this.perUserReactionsChart.tick(false);
 | 
			
		||||
		await this.perUserFollowingChart.tick(false);
 | 
			
		||||
		await this.perUserDriveChart.tick(false);
 | 
			
		||||
		await this.apRequestChart.tick(false);
 | 
			
		||||
 | 
			
		||||
		this.logger.succ('All charts successfully ticked.');
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue