mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	sync charts one-at-a-time to reduce database contention and timeouts
This commit is contained in:
		
							parent
							
								
									e2352839e4
								
							
						
					
					
						commit
						0b40f2734e
					
				
					 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