use TimeService everywhere in the backend

This commit is contained in:
Hazelnoot 2025-10-01 19:11:33 -04:00
parent ed750fd990
commit 6cceca90f9
123 changed files with 550 additions and 285 deletions

View file

@ -7,6 +7,7 @@ import { Injectable } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import { ChartLoggerService } from '@/core/chart/ChartLoggerService.js';
import { TimeService, type TimerHandle } from '@/core/TimeService.js';
import Logger from '@/logger.js';
import { renderInlineError } from '@/misc/render-inline-error.js';
import FederationChart from './charts/federation.js';
@ -26,7 +27,7 @@ import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
export class ChartManagementService implements OnApplicationShutdown {
private charts;
private saveIntervalId: NodeJS.Timeout;
private saveIntervalId: TimerHandle;
private readonly logger: Logger;
constructor(
@ -42,6 +43,8 @@ export class ChartManagementService implements OnApplicationShutdown {
private perUserFollowingChart: PerUserFollowingChart,
private perUserDriveChart: PerUserDriveChart,
private apRequestChart: ApRequestChart,
private readonly timeService: TimeService,
chartLoggerService: ChartLoggerService,
) {
this.charts = [
@ -64,17 +67,17 @@ export class ChartManagementService implements OnApplicationShutdown {
@bindThis
public async start() {
// 20分おきにメモリ情報をDBに書き込み
this.saveIntervalId = setInterval(async () => {
this.saveIntervalId = this.timeService.startTimer(async () => {
for (const chart of this.charts) {
await chart.save();
}
this.logger.info('All charts saved');
}, 1000 * 60 * 20);
}, 1000 * 60 * 20, { repeated: true });
}
@bindThis
public async dispose(): Promise<void> {
clearInterval(this.saveIntervalId);
this.timeService.stopTimer(this.saveIntervalId);
if (process.env.NODE_ENV !== 'test') {
this.logger.info('Saving charts for shutdown...');
for (const chart of this.charts) {

View file

@ -54,12 +54,12 @@ export default class ActiveUsersChart extends Chart<typeof schema> { // eslint-d
const createdAt = this.idService.parse(user.id).date;
await this.commit({
'read': [user.id],
'registeredWithinWeek': (Date.now() - createdAt.getTime() < week) ? [user.id] : [],
'registeredWithinMonth': (Date.now() - createdAt.getTime() < month) ? [user.id] : [],
'registeredWithinYear': (Date.now() - createdAt.getTime() < year) ? [user.id] : [],
'registeredOutsideWeek': (Date.now() - createdAt.getTime() > week) ? [user.id] : [],
'registeredOutsideMonth': (Date.now() - createdAt.getTime() > month) ? [user.id] : [],
'registeredOutsideYear': (Date.now() - createdAt.getTime() > year) ? [user.id] : [],
'registeredWithinWeek': (this.timeService.now - createdAt.getTime() < week) ? [user.id] : [],
'registeredWithinMonth': (this.timeService.now - createdAt.getTime() < month) ? [user.id] : [],
'registeredWithinYear': (this.timeService.now - createdAt.getTime() < year) ? [user.id] : [],
'registeredOutsideWeek': (this.timeService.now - createdAt.getTime() > week) ? [user.id] : [],
'registeredOutsideMonth': (this.timeService.now - createdAt.getTime() > month) ? [user.id] : [],
'registeredOutsideYear': (this.timeService.now - createdAt.getTime() > year) ? [user.id] : [],
});
}