CartoDB-SQL-API/app/monitoring/health_check.js
2015-03-25 18:22:13 +01:00

76 lines
2.1 KiB
JavaScript

var Step = require('step'),
_ = require('underscore'),
fs = require('fs');
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 getManualDisable() {
fs.readFile(global.settings.disabled_file, this);
},
function handleDisabledFile(err, data) {
var next = this;
if (err) {
return next();
}
if (!!data) {
err = new Error(data);
err.http_status = 503;
throw err;
}
},
function getDBParams(err) {
if (err) {
throw err;
}
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);
}
);
};