2024-07-21 02:26:03 +08:00
|
|
|
import { Autoload, Config, Init, Inject, Scope, ScopeEnum } from '@midwayjs/core';
|
2024-08-05 12:49:44 +08:00
|
|
|
import { PipelineService } from '../pipeline/service/pipeline-service.js';
|
2024-11-04 16:39:02 +08:00
|
|
|
import { logger } from '@certd/basic';
|
2024-10-03 22:03:49 +08:00
|
|
|
import { SysSettingsService } from '@certd/lib-server';
|
2024-12-23 18:11:06 +08:00
|
|
|
import { SiteInfoService } from '../monitor/index.js';
|
|
|
|
|
import { Cron } from '../cron/cron.js';
|
2023-01-29 13:44:19 +08:00
|
|
|
|
|
|
|
|
@Autoload()
|
2024-12-23 00:24:31 +08:00
|
|
|
@Scope(ScopeEnum.Request, { allowDowngrade: true })
|
2023-01-29 13:44:19 +08:00
|
|
|
export class AutoRegisterCron {
|
|
|
|
|
@Inject()
|
|
|
|
|
pipelineService: PipelineService;
|
|
|
|
|
|
2024-08-13 20:30:42 +08:00
|
|
|
@Config('cron.onlyAdminUser')
|
|
|
|
|
private onlyAdminUser: boolean;
|
2024-08-05 12:49:44 +08:00
|
|
|
|
2023-01-29 13:44:19 +08:00
|
|
|
// @Inject()
|
|
|
|
|
// echoPlugin: EchoPlugin;
|
2024-07-21 02:26:03 +08:00
|
|
|
@Config('cron.immediateTriggerOnce')
|
|
|
|
|
private immediateTriggerOnce = false;
|
2023-01-29 13:44:19 +08:00
|
|
|
|
2024-12-23 18:11:06 +08:00
|
|
|
@Config('cron.immediateTriggerSiteMonitor')
|
|
|
|
|
private immediateTriggerSiteMonitor = false;
|
|
|
|
|
|
2024-09-20 15:15:24 +08:00
|
|
|
@Inject()
|
|
|
|
|
sysSettingsService: SysSettingsService;
|
|
|
|
|
|
2024-12-23 18:11:06 +08:00
|
|
|
@Inject()
|
|
|
|
|
siteInfoService: SiteInfoService;
|
|
|
|
|
|
|
|
|
|
@Inject()
|
|
|
|
|
cron: Cron;
|
|
|
|
|
|
2023-01-29 13:44:19 +08:00
|
|
|
@Init()
|
|
|
|
|
async init() {
|
|
|
|
|
logger.info('加载定时trigger开始');
|
2024-08-13 20:30:42 +08:00
|
|
|
await this.pipelineService.onStartup(this.immediateTriggerOnce, this.onlyAdminUser);
|
2024-09-19 17:38:51 +08:00
|
|
|
logger.info('加载定时trigger完成');
|
2023-01-29 13:44:19 +08:00
|
|
|
//
|
|
|
|
|
// const meta = getClassMetadata(CLASS_KEY, this.echoPlugin);
|
|
|
|
|
// console.log('meta', meta);
|
|
|
|
|
// const metas = listPropertyDataFromClass(CLASS_KEY, this.echoPlugin);
|
|
|
|
|
// console.log('metas', metas);
|
2024-12-23 18:11:06 +08:00
|
|
|
this.registerSiteMonitorCron();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
registerSiteMonitorCron() {
|
|
|
|
|
const job = async () => {
|
|
|
|
|
logger.info('站点证书检查开始执行');
|
|
|
|
|
|
|
|
|
|
let offset = 0;
|
|
|
|
|
const limit = 50;
|
|
|
|
|
while (true) {
|
|
|
|
|
const res = await this.siteInfoService.page({
|
|
|
|
|
query: { disabled: false },
|
|
|
|
|
page: { offset, limit },
|
|
|
|
|
});
|
|
|
|
|
const { records } = res;
|
|
|
|
|
|
|
|
|
|
if (records.length === 0) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
offset += records.length;
|
|
|
|
|
for (const record of records) {
|
|
|
|
|
try {
|
|
|
|
|
await this.siteInfoService.doCheck(record, true);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
logger.error(`站点${record.name}检查出错:`, e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
logger.info('站点证书检查完成');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
this.cron.register({
|
|
|
|
|
name: 'siteMonitor',
|
|
|
|
|
cron: '0 0 0 * * *',
|
|
|
|
|
job,
|
|
|
|
|
});
|
|
|
|
|
if (this.immediateTriggerSiteMonitor) {
|
|
|
|
|
job();
|
|
|
|
|
}
|
2023-01-29 13:44:19 +08:00
|
|
|
}
|
|
|
|
|
}
|