adding logging functionality to locate some bugs preventing cron usage.

This commit is contained in:
Andrew Davidson 2016-06-20 09:38:23 -04:00
parent 1f589df24c
commit 90d8b5901b

View file

@ -13,18 +13,49 @@
var fs = require('fs');
var execSync = require('child_process').execSync;
// Logging boilerplate functionality
var logger = exports;
logger.debugLevel = 'warn';
logger.logFile = '/var/log/spam-scripts/spam-summary.log';
logger.log = function (level, message) {
var levels = ['error', 'warn', 'info'];
if (levels.indexOf(level) <= levels.indexOf(logger.debugLevel)) {
if (typeof message !== 'string') {
message = JSON.stringify(message);
};
if (logger.logFile) {
fs.appendFile(logger.logFile,
new Date().toISOString() +
' ' +
level +
': ' +
message +
'\n',
function (err) {
if (err) console.log(err);
});
}
else {
console.log(level+': '+message);
}
}
}
// Constant definition
var spamFolder = "/srv/mail/andrew@amdavidson.com/maildir/.Spam/cur/";
var sendTo = "andrew@amdavidson.com";
// Variable definition
var emails = new Array();
var summary = "Subject: Spam Summary " + new Date().toISOString() + "\n";
var summary = "Subject: Spam Summary " + new Date().toISOString() + "\n\n";
logger.log('warn', 'Starting spam-summary.js');
// Read all emails in specified directory, parse for
// date, from, return-path, subject, and spam score.
filenames = fs.readdirSync(spamFolder)
logger.log('info', 'Reading spam folder.');
filenames = fs.readdirSync(spamFolder);
logger.log('info', 'Starting email parse');
filenames.forEach(function(filename) {
data = fs.readFileSync(spamFolder + filename);
email = {};
@ -37,17 +68,20 @@ filenames.forEach(function(filename) {
email.score = /score=([\-\+]?[0-9]*(\.[0-9]+)?)/.exec(
/X-Spam-Status: (.+)/.exec(data)[1])[1];
} catch (e) {
logger.log('warn', 'Email score could not be extracted.');
email.score = "0.0";
}
emails.push(email);
});
// Sort by spam socre
logger.log('info', 'Sorting spam');
emails.sort(function (a, b) {
return parseFloat(a.score) - parseFloat(b.score)
});
// Construct a summary
logger.log('info', 'Building email summary');
for (var i=0; i < 25; i++) {
summary += i + ": " + emails[i].date + "\n\t" + emails[i].from + "\n\t" +
emails[i].subject + "\n\tScore: " + emails[i].score + "\n\n";
@ -55,4 +89,7 @@ for (var i=0; i < 25; i++) {
summary += "\n\n";
// Send summary via email
var child = execSync("sendmail " + sendTo, {input: summary});
logger.log('info', 'Sending email with summary');
var child = execSync("/usr/bin/env sendmail " + sendTo, {input: summary});
logger.log('warn', 'spam-summary.js completed.');