Proper endpoint to check node status from analysis

This commit is contained in:
Raul Ochoa
2016-04-14 10:59:51 +02:00
parent 28400f4544
commit 09687b3811
2 changed files with 71 additions and 4 deletions
+49
View File
@@ -0,0 +1,49 @@
var PSQL = require('cartodb-psql');
function AnalysisBackend() {
}
module.exports = AnalysisBackend;
AnalysisBackend.prototype.getNodeStatus = function (params, callback) {
var nodeId = params.nodeId;
var statusQuery = 'SELECT node_id, status, updated_at FROM cdb_analysis_catalog where node_id = \'' + nodeId + '\'';
var pg = new PSQL(dbParamsFromReqParams(params));
pg.query(statusQuery, function(err, result) {
if (err) {
return callback(err, result);
}
result = result || {};
var rows = result.rows || [];
return callback(null, rows[0] || {
node_id: nodeId,
status: 'unknown'
});
}, true); // use read-only transaction
};
function dbParamsFromReqParams(params) {
var dbParams = {};
if ( params.dbuser ) {
dbParams.user = params.dbuser;
}
if ( params.dbpassword ) {
dbParams.pass = params.dbpassword;
}
if ( params.dbhost ) {
dbParams.host = params.dbhost;
}
if ( params.dbport ) {
dbParams.port = params.dbport;
}
if ( params.dbname ) {
dbParams.dbname = params.dbname;
}
return dbParams;
}
+22 -4
View File
@@ -8,6 +8,7 @@ var cors = require('../middleware/cors');
var userMiddleware = require('../middleware/user');
var DataviewBackend = require('../backends/dataview');
var AnalysisBackend = require('../backends/analysis');
var MapStoreMapConfigProvider = require('../models/mapconfig/map_store_provider');
@@ -41,6 +42,7 @@ function LayergroupController(authApi, pgConnection, mapStore, tileBackend, prev
this.layergroupAffectedTables = layergroupAffectedTables;
this.dataviewBackend = new DataviewBackend();
this.analysisBackend = new AnalysisBackend();
}
util.inherits(LayergroupController, BaseController);
@@ -97,10 +99,26 @@ LayergroupController.prototype.register = function(app) {
};
LayergroupController.prototype.analysisNodeStatus = function(req, res) {
this.sendResponse(req, res, {
node_id: req.params.nodeId,
status: 'ready'
}, 200);
var self = this;
step(
function setupParams() {
self.req2params(req, this);
},
function retrieveNodeStatus(err) {
assert.ifError(err);
self.analysisBackend.getNodeStatus(req.params, this);
},
function finish(err, nodeStatus, stats) {
req.profiler.add(stats || {});
if (err) {
self.sendError(req, res, err, 'GET NODE STATUS');
} else {
self.sendResponse(req, res, nodeStatus, 200);
}
}
);
};
LayergroupController.prototype.dataview = function(req, res) {