Remove PostgreSQL from health checks

This way the health checks will only check for Redis and Mapnik
initialization.
An empty tile without layers or datasources is generated.
This commit is contained in:
Alejandro Martínez
2015-01-13 11:29:19 +01:00
parent db9d350cae
commit 96bcd14bb8
7 changed files with 10 additions and 166 deletions
@@ -154,9 +154,6 @@ var config = {
,health: {
enabled: false,
username: 'localhost',
query: "SELECT 1::int as interactivity_id, '0101000020110F0000EE866678CE876D41466F35C2EC1150C1'::geometry as geom, 'Lorem ipsum dolor sit amet' as label",
srid: 3857,
geometry_field: 'geom',
z: 0,
x: 0,
y: 0
@@ -163,9 +163,6 @@ var config = {
,health: {
enabled: true,
username: 'localhost',
query: "SELECT 1::int as interactivity_id, '0101000020110F0000EE866678CE876D41466F35C2EC1150C1'::geometry as geom, 'Lorem ipsum dolor sit amet' as label",
srid: 3857,
geometry_field: 'geom',
z: 0,
x: 0,
y: 0
-3
View File
@@ -163,9 +163,6 @@ var config = {
,health: {
enabled: false,
username: 'localhost',
query: "SELECT 1::int as interactivity_id, '0101000020110F0000EE866678CE876D41466F35C2EC1150C1'::geometry as geom, 'Lorem ipsum dolor sit amet' as label",
srid: 3857,
geometry_field: 'geom',
z: 0,
x: 0,
y: 0
-3
View File
@@ -150,9 +150,6 @@ var config = {
,health: {
enabled: false,
username: 'localhost',
query: "SELECT 1::int as interactivity_id, '0101000020110F0000EE866678CE876D41466F35C2EC1150C1'::geometry as geom, 'Lorem ipsum dolor sit amet' as label",
srid: 3857,
geometry_field: 'geom',
z: 0,
x: 0,
y: 0
+4 -42
View File
@@ -34,67 +34,29 @@ HealthCheck.prototype.check = function(config, callback) {
redis: {
ok: false
},
postgresql: {
ok: false
},
mapnik: {
ok: false
},
tile: {
ok: false
}
},
mapnikXmlParams = _.extend({
dbport: global.environment.postgres.port
}, config);
};
mapnikXmlParams = config;
Step(
function getDBParams() {
startTime = Date.now();
self.metadataBackend.getAllUserDBParams(config.username, this);
},
function runQuery(err, dbParams) {
function loadMapnik(err, dbParams) {
if (err) {
throw err;
}
result.redis = {
ok: !err,
elapsed: Date.now() - startTime,
size: Object.keys(dbParams).length
};
dbParams.dbuser = _.template(global.environment.postgres_auth_user, {user_id: dbParams.dbuser});
mapnikXmlParams = _.extend(mapnikXmlParams, dbParams);
startTime = Date.now();
self.queryTablesApi.getAffectedTablesInQuery(config.username, {
user: dbParams.dbuser,
pass: dbParams.dbpass,
host: dbParams.dbhost,
port: global.environment.postgres.port,
dbname: dbParams.dbname,
api_key: dbParams.apikey
}, config.query, this);
},
function handleAffectedTablesQuery(err, affectedTables) {
if (err) {
throw err;
}
result.postgresql = {
ok: !err,
elapsed: Date.now() - startTime,
size: affectedTables.length
};
this();
},
function loadMapnik(err) {
if (err) {
throw err;
}
mapnikOptions.xml = xmlTemplate(mapnikXmlParams);
startTime = Date.now();
@@ -126,4 +88,4 @@ HealthCheck.prototype.check = function(config, callback) {
callback(err, result);
}
);
};
};
+3 -44
View File
@@ -1,45 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map[]>
<Map srs="+init=epsg:3857" buffer-size="128" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
<Parameters>
<Parameter name="format">png8:m=h</Parameter>
<Parameter name="interactivity_layer">layer0</Parameter>
<Parameter name="interactivity_fields">interactivity_id</Parameter>
</Parameters>
<Style name="layer0-labels" filter-mode="first">
<Rule>
<TextSymbolizer face-name="DejaVu Sans Book" size="18" label-position-tolerance="10" fill="#000000" halo-fill="#ffffff" halo-radius="1" dy="-10" allow-overlap="true" placement="point" placement-type="simple" ><![CDATA[[label]]]></TextSymbolizer>
</Rule>
</Style>
<Style name="layer0" filter-mode="first">
<Rule>
<MarkersSymbolizer fill-opacity="0.9" stroke="#ffffff" stroke-width="2" stroke-opacity="1" placement="point" marker-type="ellipse" width="16" fill="#cc3333" allow-overlap="true" />
</Rule>
</Style>
<Layer name="layer0"
srs="+init=epsg:{{=it.srid}}">
<StyleName>layer0</StyleName>
<StyleName>layer0-labels</StyleName>
<Datasource>
<Parameter name="type"><![CDATA[postgis]]></Parameter>
<Parameter name="user"><![CDATA[{{=it.dbuser}}]]></Parameter>
<Parameter name="password"><![CDATA[]]></Parameter>
<Parameter name="host"><![CDATA[{{=it.dbhost}}]]></Parameter>
<Parameter name="port"><![CDATA[{{=it.dbport}}]]></Parameter>
<Parameter name="dbname"><![CDATA[{{=it.dbname}}]]></Parameter>
<Parameter name="extent"><![CDATA[-20037508.3,-20037508.3,20037508.3,20037508.3]]></Parameter>
<Parameter name="row_limit"><![CDATA[0]]></Parameter>
<Parameter name="simplify_geometries"><![CDATA[true]]></Parameter>
<Parameter name="persist_connection"><![CDATA[false]]></Parameter>
<Parameter name="asynchronous_request"><![CDATA[false]]></Parameter>
<Parameter name="max_size"><![CDATA[500]]></Parameter>
<Parameter name="geometry_field"><![CDATA[{{=it.geometry_field}}]]></Parameter>
<Parameter name="srid"><![CDATA[{{=it.srid}}]]></Parameter>
<Parameter name="table"><![CDATA[({{=it.query}}) as cdbq]]></Parameter>
</Datasource>
</Layer>
<Map
background-color="#c33"
srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
</Map>
+3 -68
View File
@@ -8,19 +8,12 @@ var server = new CartodbWindshaft(serverOptions);
var SQLAPIEmu = require(__dirname + '/../support/SQLAPIEmu.js');
[true, false].forEach(function(cdbQueryTablesFromPostgresEnabledValue) {
global.environment.enabledFeatures = {cdbQueryTablesFromPostgres: cdbQueryTablesFromPostgresEnabledValue};
suite('health checks - postgres=' + cdbQueryTablesFromPostgresEnabledValue, function () {
suite('health checks', function () {
beforeEach(function (done) {
global.environment.health = {
enabled: true,
username: 'localhost',
query: "SELECT 1::int as interactivity_id, '0101000020110F0000EE866678CE876D41466F35C2EC1150C1'::geometry as geom, 'Lorem ipsum dolor sit amet' as label",
srid: 3857,
geometry_field: 'geom',
z: 0,
x: 0,
y: 0
@@ -28,18 +21,6 @@ var SQLAPIEmu = require(__dirname + '/../support/SQLAPIEmu.js');
done();
});
if (!cdbQueryTablesFromPostgresEnabledValue) {
var sqlApiServer;
before(function (done) {
sqlApiServer = new SQLAPIEmu(global.environment.sqlapi.port, done);
});
after(function (done) {
sqlApiServer.close(done);
});
}
var healthCheckRequest = {
url: '/health',
method: 'GET',
@@ -48,27 +29,6 @@ var SQLAPIEmu = require(__dirname + '/../support/SQLAPIEmu.js');
}
};
test('returns 200 and ok=true with disabled configuration', function (done) {
global.environment.health.enabled = false;
assert.response(server,
healthCheckRequest,
{
status: 200
},
function (res, err) {
assert.ok(!err);
var parsed = JSON.parse(res.body);
assert.equal(parsed.enabled, false);
assert.ok(parsed.ok);
done();
}
);
});
test('returns 200 and ok=true with enabled configuration', function (done) {
assert.response(server,
healthCheckRequest,
@@ -76,6 +36,7 @@ var SQLAPIEmu = require(__dirname + '/../support/SQLAPIEmu.js');
status: 200
},
function (res, err) {
console.log(res.body);
assert.ok(!err);
var parsed = JSON.parse(res.body);
@@ -111,31 +72,5 @@ var SQLAPIEmu = require(__dirname + '/../support/SQLAPIEmu.js');
);
});
test.skip('fails for wrong query', function (done) {
global.environment.health.query = 'select wadus query';
assert.response(server,
healthCheckRequest,
{
status: 503
},
function (res, err) {
assert.ok(!err);
var parsed = JSON.parse(res.body);
assert.equal(parsed.enabled, true);
assert.equal(parsed.ok, false);
assert.ok(parsed.result.redis.ok);
assert.equal(parsed.result.postgresql.ok, false);
done();
}
);
});
});
});
});