UNPKG

1.55 kBJavaScriptView Raw
1const request = require('superagent');
2const now = require('nano-time');
3
4/**
5 * Store data to influxdb
6 * @param {Object} data params
7 * @param {string} data.url link to http endpoint
8 * @param {string} data.db database name
9 * @param {string} data.meas measurement name
10 * @param {Object} data.tags tags to add
11 * @param {Object} data.values values to send
12 * @param {number} data.timestamp time in nanoseconds
13 * @param {number} data.retry superagent retries
14 * @param {Object|number} data.timeout superagent timeout
15 */
16const writeToInflux = async ({
17 url, db, meas, tags, values,
18 timestamp = now(),
19 retry = 3,
20 timeout = {response: 10000, deadline: 20000},
21}) => {
22 const sendTags = Object.entries(tags).map(elem => elem.join('=')).join();
23 const sendData = Object.entries(values).map(elem => {
24 const [, prop] = elem;
25 elem[1] = typeof prop === 'string' ? `"${prop}"` : prop;
26 return elem.join('=');
27 }).join();
28
29 try {
30 await request
31 .post(`${url}/write`)
32 .query({db})
33 .send(`${meas},${sendTags} ${sendData} ${timestamp}`)
34 .retry(retry)
35 .timeout(timeout);
36
37 } catch (err) {
38 throw new Error([
39 'Error sending data to influx:',
40 `URL: ${url}`,
41 `DB: ${db}`,
42 `Measurement: ${meas}`,
43 `Tags: ${sendTags}`,
44 `Values: ${sendData}`,
45 `Timestamp: ${timestamp}`,
46 err,
47 ].join('\n'));
48 }
49};
50
51module.exports = writeToInflux;