diff --git a/lib/routes.js b/lib/routes.js index 899c68fd..9564eb15 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -28,12 +28,14 @@ const CLOCK_SKEW = 60 * 1000 const REQUEST_TTL = 3 * 60 * 1000 const THROTTLE_LOGS_QUERY = 30 * 1000 const THROTTLE_CLOCK_SKEW = 60 * 1000 +const SETTINGS_CACHE_REFRESH = 60 * 60 * 1000 const pids = {} const reboots = {} const restartServicesMap = {} const canGetLastSeenMap = {} const canLogClockSkewMap = {} +const settingsCache = {} const devMode = argv.dev || options.http @@ -427,6 +429,7 @@ localApp.post('/restartServices', (req, res) => { }) localApp.post('/dbChange', (req, res, next) => { + settingsCache.cache = null return settingsLoader.loadLatest() .then(poller.reload) .then(() => logger.info('Config reloaded')) @@ -463,9 +466,23 @@ function populateSettings (req, res, next) { oldVersionId = versionId } - if (!versionId) { + // Clear cache every hour + if (Date.now() - settingsCache.timestamp > SETTINGS_CACHE_REFRESH) { + settingsCache.cache = null + } + + if (!versionId && settingsCache.cache) { + req.settings = settingsCache.cache + return next() + } + + if (!versionId && !settingsCache.cache) { return settingsLoader.loadLatest() - .then(settings => { req.settings = settings }) + .then(settings => { + settingsCache.cache = settings + settingsCache.timestamp = Date.now() + req.settings = settings + }) .then(() => next()) .catch(next) }