parametrizzato l'uri di mongodb e redis

aggiunto check di connessione redis
aggiunti controlli errore
This commit is contained in:
Michele Fadda 2015-05-27 10:32:31 +02:00
parent 97eb604bdb
commit 5bdfe04d82

View file

@ -1,29 +1,59 @@
#!/usr/bin/env node #!/usr/bin/env node
var Redis = require('ioredis'); var Redis = require('redis');
var MongoClient = require('mongodb').MongoClient var MongoClient = require('mongodb').MongoClient
var redis, mongodb, lastlogin; var redis, mongodb, lastlogin, mongoUri, redisUri;
var mongoReplicaSet = 'mongodb://mongo-1.mail.tiscali.sys:27018,mongo-3.mail.tiscali.sys:27018,mongo-5.mail.tiscali.sys:27018/dovecot';
var quit = function() { var args = process.argv.slice(2);
};
redis = new Redis('redis://redis-ll.mail.tiscali.sys:6379/0'); args.forEach(function(val, index, array){
switch(val) {
case '-mongo':
if(args[index+1].search('mongodb://') >= 0) {
mongoUri = args[index+1];
} else {
mongoUri = 'mongodb://'+args[index+1];
}
break;
case '-redis':
if(args[index+1].match(/\S+:\d+/)) {
redisUri = args[index+1];
} else {
console.log("Wrong redis URI");
process.exit(0);
}
break;
}
});
MongoClient.connect(mongoReplicaSet, function(err, db){ mongoUri = mongoUri || 'mongodb://127.0.0.1:27018/dovecot';
redisUri = redisUri || 'redis-ll.mail.tiscali.sys:6379';
console.log("Connecting redis: ", redisUri);
redis = Redis.createClient(redisUri.split(':')[1], redisUri.split(':')[0]) //new Redis(redisUri);
redis.on("error", function (err) {
console.log("Error redis" + err);
process.exit(-99);
});
console.log("Connecting mongodb: ", mongoUri);
MongoClient.connect(mongoUri, function(err, db){
if(err){ if(err){
console.log("err"); console.log("Mongo connect error:", err);
if (redis ) { if (redis ) {
redis.quit(); redis.end();
}; };
process.exit(-1); process.exit(-99);
} }
lastlogin = db.collection('lastlogin'); lastlogin = db.collection('lastlogin');
var quit = function(){ var quit = function(){
redis.quit(); redis.end();
db.close(); db.close();
process.exit(0); process.exit(0);
} }
@ -34,55 +64,61 @@ MongoClient.connect(mongoReplicaSet, function(err, db){
console.log("readUsers"); console.log("readUsers");
redis.spop('llindex', function(err, user){ redis.spop('llindex', function(err, user){
if( err ) { if( err ) {
console.log(err); console.log("Error redis spop llindex: ", err);
quit(); quit();
process.exit(-1); process.exit(-1);
} }
if( user ) { if( user ) {
console.log("readLogs"); console.log("readLogs");
redis.llen(user, function(err, llen){ redis.llen(user, function(err, llen){
if (err) {
console.log("Error redis llen "+user+": ", err)
quit();
process.exit(-2);
} else {
console.log("logslen: ", llen);
console.log("logslen: ", 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.
// Legge una riga di log, la elimina da redis e la inserisce su mongo. var readLogs = function(lindex, user, len) {
// Viene eseguito n-1 volte, con n = numero di righe di log. if (lindex == len ){
var readLogs = function(lindex, user, len) { // raggiunto il numero di righe da leggere, riparte con un altro user ( se esiste )
if (lindex == len ){ console.log("Done: ", user, lindex);
// raggiunto il numero di righe da leggere, riparte con un altro user ( se esiste ) readUsers();
console.log("Done: ", user, lindex); } else {
readUsers(); console.log("rpop log: ", user);
} else { redis.rpop(user, function(err, log){
console.log("rpop log: ", user); if ( err ) {
redis.rpop(user, function(err, log){ console.log("Error redis rpop "+user+": ",err);
if ( err ) { quit();
console.log(err); process.exit(-3);
quit();
process.exit(-1);
}
console.log("log: ", log);
// imap:1432630259:10.39.75.60
var slog = log.split(':');
lastlogin.insert({
user: user,
protocol: slog[0],
date: slog[1],
ip: slog[2],
}, function(err, r){
if(err){
console.log("insert error: ",err);
redis.rpush(user, log, function(err, result){
quit();
});
} else { } else {
// Salvato il log su mongo, legge il successivo. console.log("log: ", log);
console.log("Saved: ", log, lindex); // imap:1432630259:10.39.75.60
readLogs(lindex+1, user, len); var slog = log.split(':');
lastlogin.insert({
user: user,
protocol: slog[0],
date: new Date(slog[1]+"000"),
ip: slog[2],
}, function(err, r){
if(err){
console.log("insert error: ",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);
readLogs(lindex+1, user, len);
}
});
} }
}); })
}) };
}; };
}; }
// Legge il primo record per lo user "user" per llen-1 volte. // Legge il primo record per lo user "user" per llen-1 volte.
readLogs(0, user, llen-1); readLogs(0, user, llen-1);