1 | const request = require('superagent');
|
2 | const now = require('nano-time');
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | const 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 |
|
51 | module.exports = writeToInflux;
|