UNPKG

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

77 lines (66 loc) 2.33 kB
'use strict'; var _ = require('lodash'); var fetch = require('node-fetch'); var moment = require('moment'); fetch.Promise = require('bluebird'); //var parseDateMath = require('../utils/date_math.js'); var Datasource = require('../lib/classes/datasource'); module.exports = new Datasource('quandl', { dataSource: true, args: [{ name: 'code', types: ['string', 'null'], help: 'The quandl code to plot. You can find these on quandl.com.' }, { name: 'position', types: ['number', 'null'], help: 'Some quandl sources return multiple series, which one should I use? 1 based index.' }], help: '\n [experimental]\n Pull data from quandl.com using the quandl code. Set "timelion:quandl.key" to your free API key in Kibana\'s\n Advanced Settings. The API has a really low rate limit without a key.', fn: function quandlFn(args, tlConfig) { var intervalMap = { '1d': 'daily', '1w': 'weekly', '1M': 'monthly', '1y': 'annual' }; var config = _.defaults(args.byName, { code: 'WIKI/AAPL', position: 1, interval: intervalMap[tlConfig.time.interval], apikey: tlConfig.settings['timelion:quandl.key'] }); if (!config.interval) { throw new Error('quandl() unsupported interval: ' + tlConfig.time.interval + '. quandl() supports: ' + _.keys(intervalMap).join(', ')); } var time = { min: moment.utc(tlConfig.time.from).format('YYYY-MM-DD'), max: moment.utc(tlConfig.time.to).format('YYYY-MM-DD') }; // POSITIONS // 1. open // 2. high // 3. low // 4. close // 5. volume var URL = 'https://www.quandl.com/api/v1/datasets/' + config.code + '.json' + '?sort_order=asc' + '&trim_start=' + time.min + '&trim_end=' + time.max + '&collapse=' + config.interval + '&auth_token=' + config.apikey; return fetch(URL).then(function (resp) { return resp.json(); }).then(function (resp) { var data = _.map(resp.data, function (bucket) { return [moment(bucket[0]).valueOf(), bucket[config.position]]; }); return { type: 'seriesList', list: [{ data: data, type: 'series', fit: 'nearest', label: resp.name }] }; })['catch'](function (e) { throw e; }); } });