60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
const fs = require('fs-extra');
|
|
const { isEmpty } = require('./util');
|
|
const config = require('./config');
|
|
const debug = require('debug')('server-connect:cron');
|
|
|
|
exports.start = () => {
|
|
if (!config.cron || isEmpty('app/schedule')) return;
|
|
|
|
debug('Start schedule');
|
|
|
|
processEntries('app/schedule');
|
|
};
|
|
|
|
function processEntries(path) {
|
|
const schedule = require('node-schedule');
|
|
const entries = fs.readdirSync(path, { withFileTypes: true });
|
|
|
|
for (let entry of entries) {
|
|
if (entry.isFile() && entry.name.endsWith('.json')) {
|
|
try {
|
|
const job = fs.readJSONSync(`${path}/${entry.name}`);
|
|
const rule = job.settings.options.rule;
|
|
|
|
debug(`Adding schedule ${entry.name}`);
|
|
|
|
if (rule == '@reboot') {
|
|
setImmediate(exec(job.exec));
|
|
} else {
|
|
schedule.scheduleJob(rule, exec(job.exec))
|
|
}
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
} else if (entry.isDirectory()) {
|
|
processEntries(`${path}/${entry.name}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function exec(action) {
|
|
return async () => {
|
|
const App = require('../core/app');
|
|
const app = new App({
|
|
params: {},
|
|
session: {},
|
|
cookies: {},
|
|
signedCookies: {},
|
|
query: {},
|
|
headers: {}
|
|
}, {
|
|
headersSent: false,
|
|
set() {},
|
|
status() { return this; },
|
|
send() { this.headersSent = true; },
|
|
json() { this.headersSent = true; },
|
|
redirect() { this.headersSent = true; }
|
|
});
|
|
return app.define(action, true);
|
|
}
|
|
} |