obdfcascrape/helpers/watcher.js
Martin Donnelly be5d3eae07 init
2019-05-05 20:13:56 +01:00

61 lines
1.5 KiB
JavaScript

// UATU
const CronJob = require('cron').CronJob;
const pm2 = require('pm2');
const logger = require('log4js').getLogger('WATCHER');
const nodeFree = require('node-free');
// load env variables from file
require('dotenv').config();
logger.level = 'trace';
function formatBytes(bytes, decimals = 2) {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) } ${ sizes[i]}`;
}
async function logMemory() {
pm2.list((err, processDescriptionList) => {
if (err)
logger.error(err);
else
for (const item of processDescriptionList) {
// logger.debug(JSON.stringify(item));
const { pid, name, monit } = item;
const { memory, cpu } = monit;
if (name !== 'watcher')
logger.info(`${name} :: PID:${pid} :: MEMORY:${formatBytes(memory)} :: CPU:${cpu}`);
}
});
logger.info(`Total:${formatBytes(nodeFree.total())} :: Used:${formatBytes(nodeFree.used())} :: Free:${formatBytes(nodeFree.free())}`);
}
async function run() {
pm2.connect(() => {
logMemory();
});
new CronJob('*/5 * * * *', async () => {
await logMemory();
}, null, true);
logger.info('Watcher Launched');
}
process.once('uncaughtException', function caught(err) {
logger.error('Uncaught', err);
});
run();