jenkins-bot has submitted this change and it was merged.
Change subject: Cache db query results for 5 minutes
......................................................................
Cache db query results for 5 minutes
TODO: sync auto-refresh interval with cache duration
Change-Id: I7565c5ef21659bcaa63b61603117cae285fd273d
---
M defaults.js
M node_modules
M routes/data.js
M src/components/boards/bigEnglish/bigEnglishBoard.js
4 files changed, 43 insertions(+), 12 deletions(-)
Approvals:
Awight: Looks good to me, approved
jenkins-bot: Verified
diff --git a/defaults.js b/defaults.js
index 016acde..4c93e6b 100644
--- a/defaults.js
+++ b/defaults.js
@@ -12,5 +12,6 @@
// given in providerBackendURL. This can be useful for SSL behind
firewalls
consumerKey: 'kKq6LbU4ctDUzubSUdHJ7Pn9NvVWwQ2f',
consumerSecret: 'JfGs4nnfyoRQ9i9JQeTYP7geCEKQrenX',
- sessionSecret: 'ds87naowiy3icaywri73tcin7eyyeI8634I71NYFIEA764'
+ sessionSecret: 'ds87naowiy3icaywri73tcin7eyyeI8634I71NYFIEA764',
+ cacheDuration: 300000 // 5 min in ms
};
diff --git a/node_modules b/node_modules
index 9f71c38..f7d9d58 160000
--- a/node_modules
+++ b/node_modules
-Subproject commit 9f71c38597921daa0b926f4044f5a49a1a13e56a
+Subproject commit f7d9d58629d35f63eb5a4a8380fa246475be8340
diff --git a/routes/data.js b/routes/data.js
index 423a3b0..a063c94 100644
--- a/routes/data.js
+++ b/routes/data.js
@@ -2,7 +2,11 @@
odataParser = require( 'odata-parser' ),
mysql = require ( 'mysql'),
config = require( '../config.js' ),
- util = require( 'util');
+ util = require( 'util'),
+ cache = require( 'memory-cache' ),
+ urlParser = require( 'url' ),
+ querystringParser = require( 'querystring' ),
+ logger = require( '../logger.js' );
/**
* Throws an error if an value is invalid for the given column
@@ -168,7 +172,8 @@
module.exports = function(req, res) {
var widget = widgets[req.params.widget],
- qs = require( 'url' ).parse(req.url).query,
+ qs = urlParser.parse( req.url ).query,
+ parsedQs = querystringParser.parse( qs ),
connection,
sqlQuery = '',
parsedFilters,
@@ -177,7 +182,9 @@
values = [],
joins = [],
joinClause = '',
- i;
+ i,
+ result,
+ cacheKey;
if ( !config.debug &&
( !req.session || !req.session.passport ||
!req.session.passport.user )
@@ -191,6 +198,19 @@
return;
}
+ cacheKey = '/data/' + req.params.widget;
+ if ( parsedQs.$filter ) {
+ cacheKey += '-' + parsedQs.$filter;
+ }
+
+ if ( !parsedQs.cache || parsedQs.cache === 'false' ) {
+ result = cache.get( cacheKey );
+ if ( result ) {
+ logger.debug( 'Serving results from cache key ' +
cacheKey );
+ res.json( result );
+ return;
+ }
+ }
sqlQuery = widget.query;
if ( widget.defaultFilter || ( qs && qs !== '' ) ) {
try {
@@ -229,11 +249,14 @@
return;
}
});
- connection.query( sqlQuery, values, function( error, results ) {
+ connection.query( sqlQuery, values, function( error, dbResults ) {
if ( error ) {
res.json( { error: 'Query error: ' + error } );
return;
}
- res.json( { results: results, sqlQuery: sqlQuery } );
+ result = { results: dbResults, sqlQuery: sqlQuery };
+ logger.debug( 'Storing results at cache key ' + cacheKey );
+ cache.put( req.url, result, config.cacheDuration );
+ res.json( result );
});
};
diff --git a/src/components/boards/bigEnglish/bigEnglishBoard.js
b/src/components/boards/bigEnglish/bigEnglishBoard.js
index 9c0b106..114b6b7 100644
--- a/src/components/boards/bigEnglish/bigEnglishBoard.js
+++ b/src/components/boards/bigEnglish/bigEnglishBoard.js
@@ -83,16 +83,23 @@
self.raised(runningTotal);
};
- // Reload the data
- self.reloadBigEnglish = function(){
- $.get( '/data/big-english' , function ( dataget ) {
+ // Reload the data. For the automatic reload, we're fine
getting
+ // something from the cache.
+ self.reloadBigEnglish = function( automatic ){
+ var url = '/data/big-english';
+ if ( !automatic ) {
+ url += '/?cache=false';
+ }
+ $.get( url , function ( dataget ) {
self.loadData( dataget.results );
});
+ // Do it every 5 minutes as well
+ setTimeout( function () {
+ self.reloadBigEnglish( true );
+ }, 300000 );
};
- // Do it every 5 minutes as well
- setTimeout(self.reloadBigEnglish, 300000);
- self.reloadBigEnglish();
+ self.reloadBigEnglish( true );
}
return { viewModel: BigEnglishBoardViewModel, template: template };
--
To view, visit https://gerrit.wikimedia.org/r/177455
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I7565c5ef21659bcaa63b61603117cae285fd273d
Gerrit-PatchSet: 2
Gerrit-Project: wikimedia/fundraising/dash
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: Ejegg <[email protected]>
Gerrit-Reviewer: Reedy <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits