mempool/backend/src/tasks/lightning/stats-updater.service.ts

58 lines
1.6 KiB
TypeScript
Raw Normal View History

2022-08-03 12:13:55 +02:00
import DB from '../../database';
2022-07-06 13:20:37 +02:00
import logger from '../../logger';
import lightningApi from '../../api/lightning/lightning-api-factory';
import LightningStatsImporter from './sync-tasks/stats-importer';
2022-04-19 17:37:06 +04:00
class LightningStatsUpdater {
2022-07-09 17:45:34 +02:00
hardCodedStartTime = '2018-01-12';
2022-04-19 17:37:06 +04:00
public async $startService(): Promise<void> {
logger.info('Starting Lightning Stats service');
2022-04-19 17:37:06 +04:00
LightningStatsImporter.$run();
2022-08-03 12:13:55 +02:00
setTimeout(() => {
this.$runTasks();
}, this.timeUntilMidnight());
}
2022-05-01 03:01:27 +04:00
private timeUntilMidnight(): number {
const date = new Date();
this.setDateMidnight(date);
date.setUTCHours(24);
return date.getTime() - new Date().getTime();
}
private setDateMidnight(date: Date): void {
date.setUTCHours(0);
date.setUTCMinutes(0);
date.setUTCSeconds(0);
date.setUTCMilliseconds(0);
2022-07-04 12:00:16 +02:00
}
private async $runTasks(): Promise<void> {
await this.$logStatsDaily();
setTimeout(() => {
this.$runTasks();
}, this.timeUntilMidnight());
2022-04-19 17:37:06 +04:00
}
private async $logStatsDaily(): Promise<void> {
const date = new Date();
this.setDateMidnight(date);
date.setUTCHours(24);
2022-04-29 03:57:27 +04:00
2022-08-03 12:13:55 +02:00
const [rows] = await DB.query(`SELECT UNIX_TIMESTAMP(MAX(added)) as lastAdded from lightning_stats`);
if ((rows[0].lastAdded ?? 0) === date.getTime() / 1000) {
return;
}
logger.info(`Running lightning daily stats log...`);
const networkGraph = await lightningApi.$getNetworkGraph();
2022-08-03 12:13:55 +02:00
LightningStatsImporter.computeNetworkStats(date.getTime() / 1000, networkGraph);
}
2022-04-19 17:37:06 +04:00
}
export default new LightningStatsUpdater();