1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.parseSingle = exports.parse = exports.assertNoErrors = exports.ResultError = void 0;
|
4 | const grammar_1 = require("./grammar");
|
5 |
|
6 |
|
7 |
|
8 | class ResultError extends Error {
|
9 | constructor(message) {
|
10 | super();
|
11 | this.message = `Error from InfluxDB: ${message}`;
|
12 | }
|
13 | }
|
14 | exports.ResultError = ResultError;
|
15 | function groupMethod(matcher) {
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | const srcKeys = this.groupsTagsKeys;
|
22 | const dstKeys = Object.keys(matcher);
|
23 | if (srcKeys.length === 0 || srcKeys.length !== dstKeys.length) {
|
24 | return [];
|
25 | }
|
26 | L: for (let row of this.groupRows) {
|
27 |
|
28 | for (let src of srcKeys) {
|
29 | if (row.tags[src] !== matcher[src]) {
|
30 | continue L;
|
31 | }
|
32 | }
|
33 | return row.rows;
|
34 | }
|
35 | return [];
|
36 | }
|
37 | function groupsMethod() {
|
38 | return this.groupRows;
|
39 | }
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | function parseInner(series = [], precision) {
|
51 | const results = [];
|
52 | results.groupsTagsKeys =
|
53 | series.length && series[0].tags ? Object.keys(series[0].tags) : [];
|
54 | const tags = results.groupsTagsKeys;
|
55 | let nextGroup = [];
|
56 | results.groupRows = new Array(series.length);
|
57 | for (let i = 0; i < series.length; i += 1, results.length) {
|
58 | const { columns = [], values = [] } = series[i];
|
59 | for (let value of values) {
|
60 | const obj = {};
|
61 | for (let j = 0; j < columns.length; j += 1) {
|
62 | if (columns[j] === "time") {
|
63 | obj.time = grammar_1.isoOrTimeToDate(value[j], precision);
|
64 | }
|
65 | else {
|
66 | obj[columns[j]] = value[j];
|
67 | }
|
68 | }
|
69 | for (let tag of tags) {
|
70 | obj[tag] = series[i].tags[tag];
|
71 | }
|
72 | results.push(obj);
|
73 | nextGroup.push(obj);
|
74 | }
|
75 | results.groupRows[i] = {
|
76 | name: series[i].name,
|
77 | rows: nextGroup,
|
78 | tags: series[i].tags || {},
|
79 | };
|
80 | nextGroup = [];
|
81 | }
|
82 | results.group = groupMethod;
|
83 | results.groups = groupsMethod;
|
84 | return results;
|
85 | }
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 | function assertNoErrors(res) {
|
92 | for (let result of res.results) {
|
93 | const { error } = result;
|
94 | if (error) {
|
95 | throw new ResultError(error);
|
96 | }
|
97 | }
|
98 | return res;
|
99 | }
|
100 | exports.assertNoErrors = assertNoErrors;
|
101 |
|
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 |
|
110 | function parse(res, precision) {
|
111 | assertNoErrors(res);
|
112 | if (res.results.length === 1) {
|
113 |
|
114 | return parseInner(res.results[0].series, precision);
|
115 | }
|
116 | return res.results.map((result) => parseInner(result.series, precision));
|
117 | }
|
118 | exports.parse = parse;
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 | function parseSingle(res, precision) {
|
126 | assertNoErrors(res);
|
127 | if (res.results.length !== 1) {
|
128 | throw new Error("node-influx expected the results length to equal 1, but " +
|
129 | `it was ${0}. Please report this here: https://git.io/influx-err`);
|
130 | }
|
131 | return parseInner(res.results[0].series, precision);
|
132 | }
|
133 | exports.parseSingle = parseSingle;
|