mirror of https://github.com/Requarks/wiki.git
6 changed files with 156 additions and 4 deletions
Unified View
Diff Options
-
4README.md
-
91agent.js
-
43models/entries.js
-
4models/git.js
-
1package.json
-
17server.js
@ -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(); |
||||
|
}); |
Write
Preview
Loading…
Cancel
Save