From 3f2ef63976decb9e828abb23efc296288f75f2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Oct 2017 11:38:54 +0100 Subject: [PATCH] Extract cache channel to its own method --- lib/cartodb/controllers/named_maps.js | 85 +++++++++++++++------------ 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/lib/cartodb/controllers/named_maps.js b/lib/cartodb/controllers/named_maps.js index 55790bbf..ffea03a2 100644 --- a/lib/cartodb/controllers/named_maps.js +++ b/lib/cartodb/controllers/named_maps.js @@ -39,43 +39,56 @@ NamedMapsController.prototype.register = function(app) { ); }; -NamedMapsController.prototype.sendResponse = function(req, res, body, headers, namedMapProvider) { +NamedMapsController.prototype.sendResponse = function(req, res, body, headers) { + const { namedMapProvider } = res.locals; + this.surrogateKeysCache.tag(res, new NamedMapsCacheEntry(res.locals.user, namedMapProvider.getTemplateName())); res.set('Content-Type', headers['content-type'] || headers['Content-Type'] || 'image/png'); res.set('Cache-Control', 'public,max-age=7200,must-revalidate'); - var self = this; - - step( - function getAffectedTablesAndLastUpdatedTime() { - namedMapProvider.getAffectedTablesAndLastUpdatedTime(this); - }, - function sendResponse(err, result) { - req.profiler.done('affectedTables'); - if (err) { - global.logger.log('ERROR generating cache channel: ' + err); - } - if (!result || !!result.tables) { - // we increase cache control as we can invalidate it - res.set('Cache-Control', 'public,max-age=31536000'); - - var lastModifiedDate; - if (Number.isFinite(result.lastUpdatedTime)) { - lastModifiedDate = new Date(result.getLastUpdatedAt()); - } else { - lastModifiedDate = new Date(); - } - res.set('Last-Modified', lastModifiedDate.toUTCString()); - - res.set('X-Cache-Channel', result.getCacheChannel()); - if (result.tables.length > 0) { - self.surrogateKeysCache.tag(res, result); - } - } - res.status(200); - res.send(body); + this.setCacheChannel(req, res, (err) => { + if (err) { + global.logger.log('ERROR generating cache channel: ' + err); } - ); + + res.status(200); + res.send(body); + }); +}; + +NamedMapsController.prototype.setCacheChannel = function(req, res, callback) { + const { namedMapProvider } = res.locals; + + this.getAffectedTables(namedMapProvider, (err, result) => { + + req.profiler.done('affectedTables'); + if (err) { + global.logger.log('ERROR generating cache channel: ' + err); + } + if (!result || !!result.tables) { + // we increase cache control as we can invalidate it + res.set('Cache-Control', 'public,max-age=31536000'); + + var lastModifiedDate; + if (Number.isFinite(result.lastUpdatedTime)) { + lastModifiedDate = new Date(result.getLastUpdatedAt()); + } else { + lastModifiedDate = new Date(); + } + res.set('Last-Modified', lastModifiedDate.toUTCString()); + + res.set('X-Cache-Channel', result.getCacheChannel()); + if (result.tables.length > 0) { + this.surrogateKeysCache.tag(res, result); + } + } + + callback(); + }); +}; + +NamedMapsController.prototype.getAffectedTables = function(namedMapProvider, callback) { + namedMapProvider.getAffectedTablesAndLastUpdatedTime(callback); }; NamedMapsController.prototype.tile = function(req, res, next) { @@ -97,7 +110,7 @@ NamedMapsController.prototype.tile = function(req, res, next) { }, function getTile(err, _namedMapProvider) { assert.ifError(err); - namedMapProvider = _namedMapProvider; + res.locals.namedMapProvider = namedMapProvider = _namedMapProvider; self.tileBackend.getTile(namedMapProvider, req.params, this); }, function handleImage(err, tile, headers, stats) { @@ -106,7 +119,7 @@ NamedMapsController.prototype.tile = function(req, res, next) { err.label = 'NAMED_MAP_TILE'; next(err); } else { - self.sendResponse(req, res, tile, headers, namedMapProvider); + self.sendResponse(req, res, tile, headers); } } ); @@ -136,7 +149,7 @@ NamedMapsController.prototype.staticMap = function(req, res, next) { function prepareLayerVisibility(err, _namedMapProvider) { assert.ifError(err); - namedMapProvider = _namedMapProvider; + res.locals.namedMapProvider = namedMapProvider = _namedMapProvider; self.prepareLayerFilterFromPreviewLayers(cdbUser, req, res.locals, namedMapProvider, this); }, @@ -179,7 +192,7 @@ NamedMapsController.prototype.staticMap = function(req, res, next) { err.label = 'STATIC_VIZ_MAP'; next(err); } else { - self.sendResponse(req, res, image, headers, namedMapProvider); + self.sendResponse(req, res, image, headers); } } );