mirror of https://github.com/requarks/wiki
parent
e8ebf9d231
commit
59feacd846
@ -0,0 +1,91 @@
|
|||||||
|
// ===========================================
|
||||||
|
// REQUARKS WIKI - Background Agent
|
||||||
|
// 1.0.0
|
||||||
|
// Licensed under AGPLv3
|
||||||
|
// ===========================================
|
||||||
|
|
||||||
|
global.ROOTPATH = __dirname;
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Load modules
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
global.winston = require('winston');
|
||||||
|
winston.info('[AGENT] Requarks Wiki BgAgent is initializing...');
|
||||||
|
|
||||||
|
var appconfig = require('./models/config')('./config.yml');
|
||||||
|
|
||||||
|
global.git = require('./models/git').init(appconfig, true);
|
||||||
|
global.entries = require('./models/entries').init(appconfig);
|
||||||
|
global.mark = require('./models/markdown');
|
||||||
|
|
||||||
|
var _ = require('lodash');
|
||||||
|
var moment = require('moment');
|
||||||
|
var Promise = require('bluebird');
|
||||||
|
var cron = require('cron').CronJob;
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Start Cron
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
var jobIsBusy = false;
|
||||||
|
var job = new cron({
|
||||||
|
cronTime: '0 */5 * * * *',
|
||||||
|
onTick: () => {
|
||||||
|
|
||||||
|
// Make sure we don't start two concurrent jobs
|
||||||
|
|
||||||
|
if(jobIsBusy) {
|
||||||
|
winston.warn('[AGENT] Previous job has not completed gracefully or is still running! Skipping for now. (This is not normal, you should investigate)');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
jobIsBusy = true;
|
||||||
|
|
||||||
|
// Prepare async job collector
|
||||||
|
|
||||||
|
let jobs = [];
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Compile Jobs
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
//-> Resync with Git remote
|
||||||
|
|
||||||
|
jobs.push(git.resync().then(() => {
|
||||||
|
|
||||||
|
//-> Purge outdated cache
|
||||||
|
|
||||||
|
return entries.purgeStaleCache();
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Run
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
Promise.all(jobs).then(() => {
|
||||||
|
winston.info('[AGENT] All jobs completed successfully! Going to sleep for now... [' + moment().toISOString() + ']');
|
||||||
|
}).catch((err) => {
|
||||||
|
winston.error('[AGENT] One or more jobs have failed [' + moment().toISOString() + ']: ', err);
|
||||||
|
}).finally(() => {
|
||||||
|
jobIsBusy = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
start: true,
|
||||||
|
timeZone: 'UTC'
|
||||||
|
});
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Shutdown gracefully
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
process.on('disconnect', () => {
|
||||||
|
winston.warn('[AGENT] Lost connection to main server. Exiting... [' + moment().toISOString() + ']');
|
||||||
|
job.stop();
|
||||||
|
process.exit();
|
||||||
|
});
|
||||||
|
|
||||||
|
process.on('exit', () => {
|
||||||
|
job.stop();
|
||||||
|
});
|
Loading…
Reference in new issue