jenkins-bot has submitted this change and it was merged.
Change subject: Customizable headers, custom vega, doc cleanup
......................................................................
Customizable headers, custom vega, doc cleanup
* Allow header customization in config.yaml, for example:
headers:
'Cache-Control': 'public, s-maxage=200, max-age=200'
errorHeaders:
'Cache-Control': 'public, s-maxage=30, max-age=30'
* Minimum Vega ver requirement is now 2.5.2,
and it will be a custom build to ensure same version as
the one used by the Graph extension in the browser.
* Cleaned up documentation
Bug: T134542
Bug: T134575
Change-Id: Ic5b91408accac73dcd53f9f67010e8aff1e44b49
---
M config.dev.yaml
M lib/vega.js
M package.json
M routes/graphoid-v1.js
M routes/graphoid-v2.js
5 files changed, 84 insertions(+), 32 deletions(-)
Approvals:
Yurik: Looks good to me, approved
jenkins-bot: Verified
diff --git a/config.dev.yaml b/config.dev.yaml
index 2a946f6..03a2db1 100644
--- a/config.dev.yaml
+++ b/config.dev.yaml
@@ -56,3 +56,11 @@
# Error if it takes longer than this to handle the request
timeout: -1
+
+ # Headers to send in all replies
+ headers:
+ 'Cache-Control': 'public, s-maxage=200, max-age=200'
+
+ # Headers to send in case of an error. If not set, will use headers from
above
+ errorHeaders:
+ 'Cache-Control': 'public, s-maxage=30, max-age=30'
diff --git a/lib/vega.js b/lib/vega.js
index 3b4c83c..7ad93a9 100644
--- a/lib/vega.js
+++ b/lib/vega.js
@@ -27,10 +27,10 @@
* @param spec graph specification
* @param format string format - png or svg
* @param response object to send/stream the results to. If not given,
returns [value, isLegacy]
- * @param cache string to set 'Cache-Control' header
+ * @param {Object} headers sets response headers like 'Cache-Control'
* @returns {*} promise
*/
-module.exports.render = function(domain, spec, format, response, cache) {
+module.exports.render = function(domain, spec, format, response, headers) {
var isSvg = format === 'svg',
resultVersion;
@@ -57,8 +57,8 @@
return [result, resultVersion];
}
response.status(200).type(format);
- if (cache) {
- response.header('Cache-Control', cache);
+ if (headers) {
+ response.header(headers);
}
response.header('VegaVersion', resultVersion);
if (isSvg) {
diff --git a/package.json b/package.json
index daf9eaa..f999dd5 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,7 @@
"underscore": "^1.8.3",
"vega-1x": "git+http://[email protected]/nyurik/vega-1x",
"graph-shared": "git+http://[email protected]/nyurik/graph-shared",
- "vega": "^2.4.0"
+ "vega": "git+http://[email protected]/nyurik/vega"
},
"devDependencies": {
"extend": "^3.0.0",
diff --git a/routes/graphoid-v1.js b/routes/graphoid-v1.js
index 6dfc25d..8c457da 100644
--- a/routes/graphoid-v1.js
+++ b/routes/graphoid-v1.js
@@ -1,15 +1,10 @@
'use strict';
-var BBPromise = require('bluebird');
+var Promise = require('bluebird');
var preq = require('preq');
var sUtil = require('../lib/util');
var vega = require('../lib/vega');
-
-/**
- * The main router object
- */
-var router = sUtil.router();
/**
* Main log function
@@ -25,6 +20,18 @@
* Limit request to 10 seconds by default
*/
var timeout = 10000;
+
+/**
+ * Cache header to set on the responses
+ * @type {Object}
+ */
+var headers;
+
+/**
+ * Cache header to set on the responses
+ * @type {Object}
+ */
+var errorHeaders;
/*
@@ -54,14 +61,14 @@
// Adapted from https://www.promisejs.org/patterns/
function delay(time) {
- return new BBPromise(function (fulfill) {
+ return new Promise(function (fulfill) {
setTimeout(fulfill, time);
});
}
function failOnTimeout(promise, time) {
return time <= 0 ? promise :
- BBPromise.race([promise, delay(time).then(function () {
+ Promise.race([promise, delay(time).then(function () {
throw 'timeout'; // we later compare on this value
})]);
}
@@ -172,7 +179,7 @@
function renderOnCanvas(state) {
var start = Date.now();
return vega
- .render(state.domain, state.graphData, 'png', state.response, 'public,
s-maxage=30, max-age=30')
+ .render(state.domain, state.graphData, 'png', state.response, headers)
.then(function () {
metrics.endTiming('total.vega', start);
})
@@ -190,7 +197,7 @@
var start = Date.now();
var state = {request: req, response: res};
- var render = BBPromise
+ var render = Promise
.resolve(state)
.then(validateRequest)
.then(downloadGraphDef)
@@ -225,16 +232,27 @@
res
.status(400)
- .header('Cache-Control', 'public, s-maxage=30, max-age=30')
+ .header(errorHeaders)
.json(msg);
metrics.increment(mx);
req.logger.log(msg, l);
});
}
-router.get('/:format/:title/:revid/:id', renderByHash);
-
-function init(app) {
+/**
+ * Initialize a route
+ * @param {Object} app
+ * @param {Object} app.logger
+ * @param {function} app.logger.log
+ * @param {Object} app.conf
+ * @param {number} app.conf.timeout
+ * @param {Object} app.conf.headers
+ * @param {Object} app.conf.errorHeaders
+ * @param {Object} app.metrics
+ * @param {function} app.metrics.increment
+ * @returns {{path: string, api_version: number, router: Router}}
+ */
+module.exports = function(app) {
// The very first operation should set up our logger
log = app.logger.log.bind(app.logger);
@@ -245,14 +263,13 @@
var conf = app.conf;
timeout = conf.timeout || timeout;
+ headers = conf.headers || {'Cache-Control': 'public, s-maxage=300,
max-age=300'};
+ errorHeaders = conf.errorHeaders || headers;
vega.initVega(log, conf);
-}
-
-module.exports = function(app) {
-
- init(app);
+ var router = sUtil.router();
+ router.get('/:format/:title/:revid/:id', renderByHash);
return {
path: '/',
diff --git a/routes/graphoid-v2.js b/routes/graphoid-v2.js
index bf5a854..f01fe77 100644
--- a/routes/graphoid-v2.js
+++ b/routes/graphoid-v2.js
@@ -1,7 +1,7 @@
'use strict';
var _ = require('underscore');
-var BBPromise = require('bluebird');
+var Promise = require('bluebird');
var preq = require('preq');
var sUtil = require('../lib/util');
var vega = require('../lib/vega');
@@ -24,9 +24,15 @@
/**
* Cache header to set on the responses
- * @type {string}
+ * @type {Object}
*/
-var cacheControlHdr = 'public, s-maxage=30, max-age=30';
+var headers;
+
+/**
+ * Cache header to set on the responses
+ * @type {Object}
+ */
+var errorHeaders;
/*
* Utility functions
@@ -41,14 +47,14 @@
// Adapted from https://www.promisejs.org/patterns/
function delay(time) {
- return new BBPromise(function (fulfill) {
+ return new Promise(function (fulfill) {
setTimeout(fulfill, time);
});
}
function failOnTimeout(promise, time) {
return time <= 0 ? promise :
- BBPromise.race([promise, delay(time).then(function () {
+ Promise.race([promise, delay(time).then(function () {
throw 'timeout'; // we later compare on this value
})]);
}
@@ -94,6 +100,12 @@
return state;
}
+/**
+ *
+ * @param {String} state.request.headers.title
+ * @param {String} state.request.headers.revisionid
+ * @returns {*|{value, done}}
+ */
function renderRequest(state) {
var start = Date.now();
// headers always received in lower case
@@ -104,7 +116,7 @@
state.response.header('RevisionId', state.request.headers.revisionid);
}
return vega
- .render(state.domain, state.graphData, state.format, state.response,
cacheControlHdr)
+ .render(state.domain, state.graphData, state.format, state.response,
headers)
.then(function () {
metrics.endTiming('total.vega', start);
}).catch(function (err) {
@@ -122,7 +134,7 @@
var start = Date.now();
var state = {request: req, response: res};
- var render = BBPromise
+ var render = Promise
.resolve(state)
.then(validateRequest)
.then(renderRequest);
@@ -154,13 +166,26 @@
res
.status(400)
- .header('Cache-Control', cacheControlHdr)
+ .header(errorHeaders)
.json(msg);
metrics.increment(mx);
req.logger.log(msg, l);
});
}
+/**
+ * Initialize a route
+ * @param {Object} app
+ * @param {Object} app.logger
+ * @param {function} app.logger.log
+ * @param {Object} app.conf
+ * @param {number} app.conf.timeout
+ * @param {Object} app.conf.headers
+ * @param {Object} app.conf.errorHeaders
+ * @param {Object} app.metrics
+ * @param {function} app.metrics.increment
+ * @returns {{path: string, api_version: number, router: Router}}
+ */
module.exports = function(app) {
// The very first operation should set up our logger
@@ -172,6 +197,8 @@
var conf = app.conf;
timeout = conf.timeout || timeout;
+ headers = conf.headers || {'Cache-Control': 'public, s-maxage=300,
max-age=300'};
+ errorHeaders = conf.errorHeaders || headers;
vega.initVega(log, conf);
--
To view, visit https://gerrit.wikimedia.org/r/287231
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic5b91408accac73dcd53f9f67010e8aff1e44b49
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/services/graphoid
Gerrit-Branch: master
Gerrit-Owner: Yurik <[email protected]>
Gerrit-Reviewer: Yurik <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits