Skip to content

Instantly share code, notes, and snippets.

@birme
Created July 17, 2017 13:22
Show Gist options
  • Save birme/d6bb854200625ab88d290ed20a4ebfff to your computer and use it in GitHub Desktop.
Save birme/d6bb854200625ab88d290ed20a4ebfff to your computer and use it in GitHub Desktop.
lambda-grafana-adapter
const request = require('request');
const DATA_API = 'https://data.example.com/api';
const DATA_API_KEY = process.env.API_KEY;
exports.search = function(event, context, callback) {
const targets = [ 'ID1', 'ID2', 'ID3' ];
callback(null, targets);
};
exports.query = function(event, context, callback) {
const targets = event.targets;
let requestPromises = [];
let response = [];
let range = parseRange(event.range.from, event.range.to);
targets.forEach((target) => {
const p = new Promise((resolve, reject) => {
let queryUrl = '/v1/data/datapoints.json';
queryUrl += '?range=' + range;
queryUrl += '&id=' + target.target;
request({
url: DATA_API + queryUrl,
headers: {
Authorization: 'Bearer ' + DATA_API_KEY
}
}, (error, resp, body) => {
if (resp.statusCode != 200) {
const errObj = JSON.parse(body);
reject(errObj);
} else {
const data = JSON.parse(body);
respone.push({
target: target.target,
datapoints: data.points // [ value, unixts ]
});
resolve();
}
})
});
requestPromises.push(p);
});
Promise.all(requestPromises).then(function() {
callback(null, response);
}).catch(function(error) {
callback(error);
})
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment