CartoDB-SQL-API/app/monitoring/health_check.js
2014-08-27 17:43:28 +02:00

57 lines
1.7 KiB
JavaScript

var Step = require('step'),
_ = require('underscore');
function HealthCheck(metadataBackend, psqlClass) {
this.metadataBackend = metadataBackend;
this.psqlClass = psqlClass;
}
module.exports = HealthCheck;
HealthCheck.prototype.check = function(username, query, callback) {
var self = this,
startTime,
result = {
redis: {},
postgresql: {}
};
Step(
function getDBParams() {
startTime = Date.now();
self.metadataBackend.getAllUserDBParams(username, this);
},
function runQuery(err, dbParams) {
result.redis.ok = !err;
result.redis.elapsed = Date.now() - startTime;
if (err) {
throw err;
}
result.redis.count = Object.keys(dbParams).length;
var psql = new self.psqlClass({
host: dbParams.dbhost,
port: global.settings.db_port,
dbname: dbParams.dbname,
user: _.template(global.settings.db_user, {user_id: dbParams.dbuser}),
pass: _.template(global.settings.db_user_pass, {
user_id: dbParams.dbuser,
user_password: dbParams.dbpass
})
});
startTime = Date.now();
psql.query(query, this);
},
function handleQuery(err, resultSet) {
result.postgresql.ok = !err;
if (!err) {
result.postgresql.elapsed = Date.now() - startTime;
result.postgresql.count = resultSet.rows.length;
}
callback(err, result);
}
);
};