Use a more aggressive cache control header for node status endpoint
This commit is contained in:
parent
73aa159b98
commit
c77ea49594
@ -116,7 +116,10 @@ LayergroupController.prototype.analysisNodeStatus = function(req, res) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
self.sendError(req, res, err, 'GET NODE STATUS');
|
self.sendError(req, res, err, 'GET NODE STATUS');
|
||||||
} else {
|
} else {
|
||||||
self.sendResponse(req, res, nodeStatus, 200);
|
self.sendResponse(req, res, nodeStatus, 200, {
|
||||||
|
'Cache-Control': 'public,max-age=5',
|
||||||
|
'Last-Modified': new Date().toUTCString()
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -304,4 +304,27 @@ describe('analysis-layers', function() {
|
|||||||
testClient.drain(done);
|
testClient.drain(done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should response with custom cache headers for node status endpoints', function(done) {
|
||||||
|
var useCase = useCases[1];
|
||||||
|
|
||||||
|
// No API key here
|
||||||
|
var testClient = new TestClient(useCase.mapConfig, 1234);
|
||||||
|
|
||||||
|
testClient.getNodeStatus('HEAD', function(err, response, nodeStatus) {
|
||||||
|
assert.ok(!err, err);
|
||||||
|
|
||||||
|
assert.equal(nodeStatus.status, 'ready');
|
||||||
|
|
||||||
|
var headers = response.headers;
|
||||||
|
|
||||||
|
assert.equal(headers['cache-control'], 'public,max-age=5');
|
||||||
|
|
||||||
|
var lastModified = new Date(headers['last-modified']);
|
||||||
|
var tenSecondsInMs = 1e5;
|
||||||
|
assert.ok(Date.now() - lastModified.getTime() < tenSecondsInMs);
|
||||||
|
|
||||||
|
testClient.drain(done);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
var qs = require('querystring');
|
var qs = require('querystring');
|
||||||
var step = require('step');
|
var step = require('step');
|
||||||
|
var urlParser = require('url');
|
||||||
|
|
||||||
var mapnik = require('windshaft').mapnik;
|
var mapnik = require('windshaft').mapnik;
|
||||||
|
|
||||||
@ -379,6 +380,94 @@ TestClient.prototype.getLayergroup = function(expectedResponse, callback) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TestClient.prototype.getNodeStatus = function(nodeName, callback) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var url = '/api/v1/map';
|
||||||
|
|
||||||
|
if (this.apiKey) {
|
||||||
|
url += '?' + qs.stringify({api_key: this.apiKey});
|
||||||
|
}
|
||||||
|
|
||||||
|
var layergroupId;
|
||||||
|
var nodes = {};
|
||||||
|
step(
|
||||||
|
function createLayergroup() {
|
||||||
|
var next = this;
|
||||||
|
assert.response(server,
|
||||||
|
{
|
||||||
|
url: url,
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
host: 'localhost',
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
data: JSON.stringify(self.mapConfig)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
status: 200,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json; charset=utf-8'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
function(res, err) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
var parsedBody = JSON.parse(res.body);
|
||||||
|
|
||||||
|
nodes = parsedBody.metadata.analyses.reduce(function(nodes, analysis) {
|
||||||
|
return Object.keys(analysis.nodes).reduce(function(nodes, nodeName) {
|
||||||
|
var node = analysis.nodes[nodeName];
|
||||||
|
nodes[nodeName] = node.url.http;
|
||||||
|
return nodes;
|
||||||
|
}, nodes);
|
||||||
|
}, nodes);
|
||||||
|
|
||||||
|
return next(null, parsedBody.layergroupid);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
function getNodeStatusResult(err, _layergroupId) {
|
||||||
|
assert.ifError(err);
|
||||||
|
|
||||||
|
var next = this;
|
||||||
|
layergroupId = _layergroupId;
|
||||||
|
|
||||||
|
url = urlParser.parse(nodes[nodeName]).path;
|
||||||
|
|
||||||
|
if (self.apiKey) {
|
||||||
|
url += '?' + qs.stringify({api_key: self.apiKey});
|
||||||
|
}
|
||||||
|
|
||||||
|
var request = {
|
||||||
|
url: url,
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
host: 'localhost'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var expectedResponse = {
|
||||||
|
status: 200,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json; charset=utf-8'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
assert.response(server, request, expectedResponse, function(res, err) {
|
||||||
|
assert.ifError(err);
|
||||||
|
next(null, res, JSON.parse(res.body));
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function finish(err, res, image) {
|
||||||
|
self.keysToDelete['map_cfg|' + LayergroupToken.parse(layergroupId).token] = 0;
|
||||||
|
self.keysToDelete['user:localhost:mapviews:global'] = 5;
|
||||||
|
return callback(err, res, image);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
TestClient.prototype.drain = function(callback) {
|
TestClient.prototype.drain = function(callback) {
|
||||||
helper.deleteRedisKeys(this.keysToDelete, callback);
|
helper.deleteRedisKeys(this.keysToDelete, callback);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user