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';
|
2022-08-01 17:48:04 +02:00
|
|
|
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
|
|
|
|
2022-08-01 17:48:04 +02:00
|
|
|
public async $startService(): Promise<void> {
|
2022-07-06 21:43:47 +02:00
|
|
|
logger.info('Starting Lightning Stats service');
|
2022-04-19 17:37:06 +04:00
|
|
|
|
2022-08-01 17:48:04 +02:00
|
|
|
LightningStatsImporter.$run();
|
2022-08-03 12:13:55 +02:00
|
|
|
|
2022-07-06 21:43:47 +02:00
|
|
|
setTimeout(() => {
|
2022-07-10 20:01:15 +02:00
|
|
|
this.$runTasks();
|
|
|
|
}, this.timeUntilMidnight());
|
|
|
|
}
|
2022-05-01 03:01:27 +04:00
|
|
|
|
2022-07-10 20:01:15 +02: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
|
|
|
}
|
|
|
|
|
2022-07-10 20:01:15 +02:00
|
|
|
private async $runTasks(): Promise<void> {
|
2022-08-01 18:21:45 +02:00
|
|
|
await this.$logStatsDaily();
|
2022-07-10 20:01:15 +02:00
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
this.$runTasks();
|
|
|
|
}, this.timeUntilMidnight());
|
2022-04-19 17:37:06 +04:00
|
|
|
}
|
|
|
|
|
2022-08-01 18:21:45 +02: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;
|
|
|
|
}
|
|
|
|
|
2022-08-01 18:21:45 +02:00
|
|
|
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-27 02:52:23 +04:00
|
|
|
}
|
2022-04-19 17:37:06 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
export default new LightningStatsUpdater();
|