kibana-riya
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
69 lines (57 loc) • 2.29 kB
JavaScript
;
var _ = require('lodash');
var fetch = require('node-fetch');
var moment = require('moment');
var Datasource = require('../lib/classes/datasource');
module.exports = new Datasource('worldbank', {
args: [{
name: 'code', // countries/all/indicators/SP.POP.TOTL
types: ['string', 'null'],
help: 'Worldbank API path.' + ' This is usually everything after the domain, before the querystring. Eg: ' + '/en/countries/ind;chn/indicators/DPANUSSPF.'
}],
aliases: ['wb'],
help: '\n [experimental]\n Pull data from http://data.worldbank.org/ using path to series.\n The worldbank provides mostly yearly data, and often has no data for the current year.\n Try offset=-1y if you get no data for recent time ranges.',
fn: function worldbank(args, tlConfig) {
// http://api.worldbank.org/en/countries/ind;chn/indicators/DPANUSSPF?date=2000:2006&MRV=5
var config = _.defaults(args.byName, {
code: 'countries/wld/indicators/SP.POP.TOTL'
});
var time = {
min: moment(tlConfig.time.from).format('YYYY'),
max: moment(tlConfig.time.to).format('YYYY')
};
var URL = 'http://api.worldbank.org/' + config.code + '?date=' + time.min + ':' + time.max + '&format=json' + '&per_page=1000';
return fetch(URL).then(function (resp) {
return resp.json();
}).then(function (resp) {
var hasData = false;
var respSeries = resp[1];
var deduped = {};
var description;
_.each(respSeries, function (bucket) {
if (bucket.value != null) hasData = true;
description = bucket.country.value + ' ' + bucket.indicator.value;
deduped[bucket.date] = bucket.value;
});
var data = _.compact(_.map(deduped, function (val, date) {
// Discard nulls
if (val == null) return;
return [moment(date, 'YYYY').valueOf(), Number(val)];
}));
if (!hasData) throw new Error('Worldbank request succeeded, but there was no data for ' + config.code);
return {
type: 'seriesList',
list: [{
data: data,
type: 'series',
label: description,
_meta: {
worldbank_request: URL
}
}]
};
})['catch'](function (e) {
throw e;
});
}
});