mirror of https://github.com/Requarks/wiki.git
NGPixel
8 years ago
6 changed files with 156 additions and 4 deletions
Split 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