diff --git a/llmongo.js b/llmongo.js index 47895e2..fa7fefa 100755 --- a/llmongo.js +++ b/llmongo.js @@ -1,10 +1,33 @@ #!/usr/bin/env node var Redis = require('redis'); - var MongoClient = require('mongodb').MongoClient +var fs = require('fs') +var Console = require('console').Console; -var redis, mongodb, lastlogin, mongoUri, redisUri; +var redis, mongodb, lastlogin, mongoUri, redisUri, logname; + +var pathname = process.argv[1].slice(0, process.argv[1].lastIndexOf('/')); + +function Logger(path) { + this.writestream = fs.createWriteStream(path+'/log/llmongo.log', { flags: 'a'}); + this.mylog = new Console(this.writestream, this.writestream); +} + +Logger.prototype.log = function(){ + var args = Array.prototype.slice.call(arguments); + var string = args[0]; + args.shift(); + console.log(string + " - " + args ); + if (args.length > 0) { + this.mylog.log.apply(this, ["%s "+string,(new Date()).toJSON()].concat(args)); + } else { + this.mylog.log("%s "+string,(new Date()).toJSON()); + } + +} + +logger = new Logger(pathname); var args = process.argv.slice(2); @@ -21,7 +44,7 @@ args.forEach(function(val, index, array){ if(args[index+1].match(/\S+:\d+/)) { redisUri = args[index+1]; } else { - console.log("Wrong redis URI"); + logger.log("Wrong redis URI"); process.exit(0); } break; @@ -31,20 +54,20 @@ args.forEach(function(val, index, array){ mongoUri = mongoUri || 'mongodb://127.0.0.1:27018/dovecot'; redisUri = redisUri || 'redis-ll.mail.tiscali.sys:6379'; -console.log("Connecting redis: ", redisUri); +logger.log("Connecting redis: %s", redisUri); redis = Redis.createClient(redisUri.split(':')[1], redisUri.split(':')[0]) //new Redis(redisUri); redis.on("error", function (err) { - console.log("Error redis" + err); + logger.log("Error redis %s", err); process.exit(-99); }); -console.log("Connecting mongodb: ", mongoUri); +logger.log("Connecting mongodb: %s", mongoUri); MongoClient.connect(mongoUri, function(err, db){ if(err){ - console.log("Mongo connect error:", err); + logger.log("Mongo connect error: %s", err); if (redis ) { redis.end(); }; @@ -52,7 +75,7 @@ MongoClient.connect(mongoUri, function(err, db){ } lastlogin = db.collection('lastlogin'); - var quit = function(){ + function quit(){ redis.end(); db.close(); process.exit(0); @@ -60,44 +83,44 @@ MongoClient.connect(mongoUri, function(err, db){ // Legge uno user dal SET llindex e lo elimina; viene eseguita fino a quando ci sono users. // Calcola quante righe di lastlogin ci sono e chiama la funzione ricorsiva readLogs - var readUsers = function() { - console.log("readUsers"); + function readUsers() { + logger.log("readUsers"); redis.spop('llindex', function(err, user){ if( err ) { - console.log("Error redis spop llindex: ", err); + logger.log("Error redis spop llindex: %s", err); quit(); process.exit(-1); } if( user ) { - console.log("readLogs"); + logger.log("readLogs"); redis.llen(user, function(err, llen){ if (err) { - console.log("Error redis llen "+user+": ", err) + logger.log("Error redis llen %s: ",user, err) quit(); process.exit(-2); } else { - console.log("logslen: ", llen); + logger.log("logslen: %s", llen); // Legge una riga di log, la elimina da redis e la inserisce su mongo. // Viene eseguito n-1 volte, con n = numero di righe di log. - var readLogs = function(lindex, user, len) { + function readLogs(lindex, user, len) { if (lindex == len ){ // raggiunto il numero di righe da leggere, riparte con un altro user ( se esiste ) - console.log("Done: ", user, lindex); + logger.log("Done: %s - ", user, lindex); readUsers(); } else { - console.log("rpop log: ", user); + logger.log("rpop log: %s", user); redis.rpop(user, function(err, log){ if ( err ) { - console.log("Error redis rpop "+user+": ",err); + logger.log("Error redis rpop %s: ",user,err); quit(); process.exit(-3); } else { - console.log("log: ", log); + logger.log("log: %s", log); // imap:1432630259:10.39.75.60 var slog = log.split(':'); var data = new Date(parseInt(slog[1]+"000")); - console.log("Data: ", data, slog[1]); + // logger.log("Data: %s ", data, slog[1]); lastlogin.insert({ user: user, protocol: slog[0], @@ -105,14 +128,14 @@ MongoClient.connect(mongoUri, function(err, db){ ip: slog[2], }, function(err, r){ if(err){ - console.log("insert error: ",err); + logger.log("insert error: %s", err); redis.rpush(user, log, function(err, result){ quit(); process.exit(-4); }); } else { // Salvato il log su mongo, legge il successivo. - console.log("Saved: ", log, lindex); + logger.log("Saved: %s - ", log, user, lindex); readLogs(lindex+1, user, len); } }); @@ -127,7 +150,7 @@ MongoClient.connect(mongoUri, function(err, db){ }); } else { // Se non ci sono piu' users, chiude i DB ed esce. - console.log("quit readUsers"); + logger.log("quit readUsers"); quit(); } });