[MediaWiki-commits] [Gerrit] Fixed jslint issues, minor code reorg - change (mediawiki...graphoid)
Yurik has uploaded a new change for review. https://gerrit.wikimedia.org/r/202238 Change subject: Fixed jslint issues, minor code reorg .. Fixed jslint issues, minor code reorg Bug: T93911 Change-Id: I3aebf32e4037f888ac64ba6001814b734851923f --- M routes/v1.js 1 file changed, 102 insertions(+), 103 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/graphoid refs/changes/38/202238/1 diff --git a/routes/v1.js b/routes/v1.js index 0ec036d..46c5721 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -1,6 +1,6 @@ 'use strict'; -var Promise = require('bluebird'); +var BBPromise = require('bluebird'); var preq = require('preq'); var domino = require('domino'); var sUtil = require('../lib/util'); @@ -43,48 +43,66 @@ var serverRe = null; -function init(app) { +/* + * Utility functions + */ -// The very first operation should set up our logger -log = app.logger.log.bind(app.logger); -metrics = app.metrics; +function Err(message, metrics) { +this.message = message; +this.metrics = metrics; +} +Err.prototype = Object.create(Error.prototype); +Err.prototype.constructor = Err; -// Uncomment to console.log metrics calls -//metrics = wrapMetrics(app.metrics); +// NOTE: there are a few libraries that do this +function merge() { +var result = {}, +args = Array.prototype.slice.apply(arguments); +args.forEach(function (arg) { +Object.getOwnPropertyNames(arg).forEach(function (prop) { +result[prop] = arg[prop]; +}); +}); -log('info/init', 'starting v1' ); -metrics.increment('v1.init'); +return result; +} -try{ -// Simplify debugging when vega is not available -vega = require('vega'); -} catch(err) { -log('fatal/vega', err); +// Adapted from https://www.promisejs.org/patterns/ +function delay(time) { +return new BBPromise(function (fulfill) { +setTimeout(fulfill, time); +}); +} + +function failOnTimeout(promise, time) { +return time = 0 ? promise : + BBPromise.race([promise, delay(time).then(function () { +throw 'timeout'; // we later compare on this value +})]); +} + +/** + * When enabled, logs metrics functions calls + * @param obj + * @returns {{increment: *, endTiming: *}} + */ +function wrapMetrics(obj) { +function logWrap(name){ +return function(){ +console.log(name + JSON.stringify([].slice.call(arguments))); +return obj[name].apply(obj, arguments); +}; } - -var conf = app.conf; -var domains = conf.domains || domains; -timeout = conf.timeout || timeout; -defaultProtocol = conf.defaultProtocol || defaultProtocol; -if (!defaultProtocol.endsWith(':')) { -// colon in YAML has special meaning, allow it to be skipped -defaultProtocol = defaultProtocol + ':'; +var result = {}; +for (var id in obj) { +try { +if (typeof(obj[id]) === function) { +result[id] = logWrap(id); +} +} catch (err) {} } - -var validDomains = domains; -if (conf.domainMap Object.getOwnPropertyNames(conf.domainMap).length 0) { -domainMap = conf.domainMap; -validDomains = validDomains.concat(Object.getOwnPropertyNames(domainMap)) -} - -if (validDomains.length == 0) { -log('fatal/config', 'Config must have non-empty domains (list) and/or domainMap (dict)'); -process.exit(1); -} - -serverRe = new RegExp('^([-a-z0-9]+\\.)?(m\\.|zero\\.)?(' + validDomains.join('|') + ')$'); -initVega(domains); +return result; } @@ -220,7 +238,7 @@ state.log.calls = []; // http://stackoverflow.com/questions/24660096/correct-way-to-write-loops-for-promise -var loopAsync = Promise.method(function (action, condition, value) { +var loopAsync = BBPromise.method(function (action, condition, value) { var req = condition(value); if (req) { return action(req).then(loopAsync.bind(null, action, condition)); @@ -299,7 +317,7 @@ } function renderOnCanvas(state) { -return new Promise(function (fulfill, reject){ +return new BBPromise(function (fulfill, reject){ if (!vega) { // If vega is down, keep reporting it throw new Err('fatal/vega', 'vega.missing'); @@ -339,7 +357,7 @@ var start = Date.now(); var state = {request: req, response: res}; -var render = Promise +var render = BBPromise .resolve(state) .then(validateRequest) .then(downloadGraphDef) @@ -379,6 +397,51 @@ }); +function init(app) { + +// The very first operation should set up our logger +log = app.logger.log.bind(app.logger); +metrics = app.metrics; + +// Uncomment to console.log metrics calls +//metrics = wrapMetrics(app.metrics); + + +log('info/init',
[MediaWiki-commits] [Gerrit] Fixed jslint issues, minor code reorg - change (mediawiki...graphoid)
Yurik has submitted this change and it was merged. Change subject: Fixed jslint issues, minor code reorg .. Fixed jslint issues, minor code reorg Bug: T93911 Change-Id: I3aebf32e4037f888ac64ba6001814b734851923f --- M routes/v1.js 1 file changed, 102 insertions(+), 103 deletions(-) Approvals: Yurik: Verified; Looks good to me, approved diff --git a/routes/v1.js b/routes/v1.js index 0ec036d..46c5721 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -1,6 +1,6 @@ 'use strict'; -var Promise = require('bluebird'); +var BBPromise = require('bluebird'); var preq = require('preq'); var domino = require('domino'); var sUtil = require('../lib/util'); @@ -43,48 +43,66 @@ var serverRe = null; -function init(app) { +/* + * Utility functions + */ -// The very first operation should set up our logger -log = app.logger.log.bind(app.logger); -metrics = app.metrics; +function Err(message, metrics) { +this.message = message; +this.metrics = metrics; +} +Err.prototype = Object.create(Error.prototype); +Err.prototype.constructor = Err; -// Uncomment to console.log metrics calls -//metrics = wrapMetrics(app.metrics); +// NOTE: there are a few libraries that do this +function merge() { +var result = {}, +args = Array.prototype.slice.apply(arguments); +args.forEach(function (arg) { +Object.getOwnPropertyNames(arg).forEach(function (prop) { +result[prop] = arg[prop]; +}); +}); -log('info/init', 'starting v1' ); -metrics.increment('v1.init'); +return result; +} -try{ -// Simplify debugging when vega is not available -vega = require('vega'); -} catch(err) { -log('fatal/vega', err); +// Adapted from https://www.promisejs.org/patterns/ +function delay(time) { +return new BBPromise(function (fulfill) { +setTimeout(fulfill, time); +}); +} + +function failOnTimeout(promise, time) { +return time = 0 ? promise : + BBPromise.race([promise, delay(time).then(function () { +throw 'timeout'; // we later compare on this value +})]); +} + +/** + * When enabled, logs metrics functions calls + * @param obj + * @returns {{increment: *, endTiming: *}} + */ +function wrapMetrics(obj) { +function logWrap(name){ +return function(){ +console.log(name + JSON.stringify([].slice.call(arguments))); +return obj[name].apply(obj, arguments); +}; } - -var conf = app.conf; -var domains = conf.domains || domains; -timeout = conf.timeout || timeout; -defaultProtocol = conf.defaultProtocol || defaultProtocol; -if (!defaultProtocol.endsWith(':')) { -// colon in YAML has special meaning, allow it to be skipped -defaultProtocol = defaultProtocol + ':'; +var result = {}; +for (var id in obj) { +try { +if (typeof(obj[id]) === function) { +result[id] = logWrap(id); +} +} catch (err) {} } - -var validDomains = domains; -if (conf.domainMap Object.getOwnPropertyNames(conf.domainMap).length 0) { -domainMap = conf.domainMap; -validDomains = validDomains.concat(Object.getOwnPropertyNames(domainMap)) -} - -if (validDomains.length == 0) { -log('fatal/config', 'Config must have non-empty domains (list) and/or domainMap (dict)'); -process.exit(1); -} - -serverRe = new RegExp('^([-a-z0-9]+\\.)?(m\\.|zero\\.)?(' + validDomains.join('|') + ')$'); -initVega(domains); +return result; } @@ -220,7 +238,7 @@ state.log.calls = []; // http://stackoverflow.com/questions/24660096/correct-way-to-write-loops-for-promise -var loopAsync = Promise.method(function (action, condition, value) { +var loopAsync = BBPromise.method(function (action, condition, value) { var req = condition(value); if (req) { return action(req).then(loopAsync.bind(null, action, condition)); @@ -299,7 +317,7 @@ } function renderOnCanvas(state) { -return new Promise(function (fulfill, reject){ +return new BBPromise(function (fulfill, reject){ if (!vega) { // If vega is down, keep reporting it throw new Err('fatal/vega', 'vega.missing'); @@ -339,7 +357,7 @@ var start = Date.now(); var state = {request: req, response: res}; -var render = Promise +var render = BBPromise .resolve(state) .then(validateRequest) .then(downloadGraphDef) @@ -379,6 +397,51 @@ }); +function init(app) { + +// The very first operation should set up our logger +log = app.logger.log.bind(app.logger); +metrics = app.metrics; + +// Uncomment to console.log metrics calls +//metrics = wrapMetrics(app.metrics); + + +log('info/init', 'starting v1' ); +metrics.increment('v1.init'); + +try{ +//