@jambonz/time-series 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +99 -0
- package/package.json +1 -1
- package/test/unit-tests.js +19 -0
package/index.js
CHANGED
|
@@ -75,6 +75,15 @@ const schemas = {
|
|
|
75
75
|
tags: [
|
|
76
76
|
'service_provider_sid'
|
|
77
77
|
]
|
|
78
|
+
},
|
|
79
|
+
app_call_counts: {
|
|
80
|
+
measurement: 'app_call_counts',
|
|
81
|
+
fields: {
|
|
82
|
+
calls_in_progress: Influx.FieldType.INTEGER,
|
|
83
|
+
},
|
|
84
|
+
tags: [
|
|
85
|
+
'application_sid'
|
|
86
|
+
]
|
|
78
87
|
}
|
|
79
88
|
};
|
|
80
89
|
|
|
@@ -96,6 +105,30 @@ const writeData = async(client) => {
|
|
|
96
105
|
}
|
|
97
106
|
};
|
|
98
107
|
|
|
108
|
+
/* for application */
|
|
109
|
+
const createCallCountsQueryApp = ({page, page_size, days, start, end}) => {
|
|
110
|
+
let sql = 'SELECT * from app_call_counts WHERE application_sid = $application_sid ';
|
|
111
|
+
if (days) sql += 'AND time > $timestamp ';
|
|
112
|
+
else {
|
|
113
|
+
if (start) sql += 'AND time >= $start ';
|
|
114
|
+
if (end) sql += 'AND time <= $end ';
|
|
115
|
+
}
|
|
116
|
+
sql += ' ORDER BY time DESC';
|
|
117
|
+
if (page_size) sql += ' LIMIT $page_size';
|
|
118
|
+
if (page) sql += ' OFFSET $offset';
|
|
119
|
+
return sql;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const createCallCountsCountQueryApp = ({days, start, end}) => {
|
|
123
|
+
let sql = 'SELECT COUNT(calls_in_progress) from app_call_counts WHERE application_sid = $application_sid ';
|
|
124
|
+
if (days) sql += 'AND time > $timestamp ';
|
|
125
|
+
else {
|
|
126
|
+
if (start) sql += 'AND time >= $start ';
|
|
127
|
+
if (end) sql += 'AND time <= $end ';
|
|
128
|
+
}
|
|
129
|
+
return sql;
|
|
130
|
+
};
|
|
131
|
+
|
|
99
132
|
/* for Service Provider */
|
|
100
133
|
const createCallCountsQuerySP = ({page, page_size, days, start, end}) => {
|
|
101
134
|
let sql = 'SELECT * from sp_call_counts WHERE service_provider_sid = $service_provider_sid ';
|
|
@@ -302,6 +335,58 @@ const writeCallCountSP = async(client, count) => {
|
|
|
302
335
|
return;
|
|
303
336
|
};
|
|
304
337
|
|
|
338
|
+
const writeCallCountApp = async(client, count) => {
|
|
339
|
+
if (!client.locals.initialized) await initDatabase(client, 'app_call_counts');
|
|
340
|
+
const {application_sid, ...fields} = count;
|
|
341
|
+
const data = {
|
|
342
|
+
measurement: 'app_call_counts',
|
|
343
|
+
fields,
|
|
344
|
+
tags: {
|
|
345
|
+
application_sid
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
client.locals.data = [...client.locals.data, ...[data]];
|
|
349
|
+
if (client.locals.data.length >= client.locals.commitSize) {
|
|
350
|
+
await writeData(client);
|
|
351
|
+
}
|
|
352
|
+
return;
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
const queryCallCountsApp = async(client, opts) => {
|
|
356
|
+
if (!client.locals.initialized) await initDatabase(client, 'app_call_counts');
|
|
357
|
+
const response = {
|
|
358
|
+
total: 0,
|
|
359
|
+
page_size: opts.page_size,
|
|
360
|
+
page: opts.page,
|
|
361
|
+
data: []
|
|
362
|
+
};
|
|
363
|
+
const params = generateBindParameters(opts);
|
|
364
|
+
const sqlTotal = createCallCountsCountQueryApp(opts);
|
|
365
|
+
const obj = await client.queryRaw(sqlTotal, { placeholders: params});
|
|
366
|
+
//console.log(`sqlTotal: ${sqlTotal}, results: ${JSON.stringify(obj)}`);
|
|
367
|
+
if (!obj.results || !obj.results[0].series) return response;
|
|
368
|
+
response.total = obj.results[0].series[0].values[0][1];
|
|
369
|
+
|
|
370
|
+
const sql = createCallCountsQueryApp(opts);
|
|
371
|
+
const res = await client.queryRaw(sql, { placeholders: params});
|
|
372
|
+
//console.log(`sql: ${sqlTotal}, results: ${JSON.stringify(res)}`);
|
|
373
|
+
if (res.results[0].series && res.results[0].series.length) {
|
|
374
|
+
const {columns, values} = res.results[0].series[0];
|
|
375
|
+
const data = values.map((v) => {
|
|
376
|
+
const obj = {};
|
|
377
|
+
v.forEach((val, idx) => {
|
|
378
|
+
v.forEach((val, idx) => {
|
|
379
|
+
const key = columns[idx];
|
|
380
|
+
obj[key] = val;
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
return obj;
|
|
384
|
+
});
|
|
385
|
+
response.data = data;
|
|
386
|
+
}
|
|
387
|
+
return response;
|
|
388
|
+
};
|
|
389
|
+
|
|
305
390
|
const queryCallCountsSP = async(client, opts) => {
|
|
306
391
|
if (!client.locals.initialized) await initDatabase(client, 'sp_call_counts');
|
|
307
392
|
const response = {
|
|
@@ -642,6 +727,8 @@ module.exports = (logger, opts) => {
|
|
|
642
727
|
const alertClient = new Influx.InfluxDB({database: 'alerts', schemas: schemas.alerts, ...opts});
|
|
643
728
|
const callCountClient = new Influx.InfluxDB({database: 'call_counts', schemas: schemas.call_counts, ...opts});
|
|
644
729
|
const callCountSPClient = new Influx.InfluxDB({database: 'sp_call_counts', schemas: schemas.sp_call_counts, ...opts});
|
|
730
|
+
// eslint-disable-next-line max-len
|
|
731
|
+
const callCountAppClient = new Influx.InfluxDB({database: 'app_call_counts', schemas: schemas.app_call_counts, ...opts});
|
|
645
732
|
|
|
646
733
|
cdrClient.locals = {
|
|
647
734
|
db: 'cdrs',
|
|
@@ -659,6 +746,14 @@ module.exports = (logger, opts) => {
|
|
|
659
746
|
commitInterval: opts.commitInterval || 10,
|
|
660
747
|
data: []
|
|
661
748
|
};
|
|
749
|
+
callCountAppClient.locals = {
|
|
750
|
+
db: 'app_call_counts',
|
|
751
|
+
initialized: false,
|
|
752
|
+
writing: false,
|
|
753
|
+
commitSize: opts.commitSize || 1,
|
|
754
|
+
commitInterval: opts.commitInterval || 10,
|
|
755
|
+
data: []
|
|
756
|
+
};
|
|
662
757
|
callCountSPClient.locals = {
|
|
663
758
|
db: 'sp_call_counts',
|
|
664
759
|
initialized: false,
|
|
@@ -678,14 +773,18 @@ module.exports = (logger, opts) => {
|
|
|
678
773
|
|
|
679
774
|
if (opts.commitSize > 1 && opts.commitInterval && opts.commitInterval > 2) {
|
|
680
775
|
setInterval(writeData.bind(null, callCountClient), opts.commitInterval * 1000);
|
|
776
|
+
setInterval(writeData.bind(null, callCountSPClient), opts.commitInterval * 1000);
|
|
777
|
+
setInterval(writeData.bind(null, callCountAppClient), opts.commitInterval * 1000);
|
|
681
778
|
setInterval(writeData.bind(null, cdrClient), opts.commitInterval * 1000);
|
|
682
779
|
setInterval(writeData.bind(null, alertClient), opts.commitInterval * 1000);
|
|
683
780
|
}
|
|
684
781
|
|
|
685
782
|
return {
|
|
686
783
|
writeCallCount: writeCallCount.bind(null, callCountClient),
|
|
784
|
+
writeCallCountApp: writeCallCountApp.bind(null, callCountAppClient),
|
|
687
785
|
writeCallCountSP: writeCallCountSP.bind(null, callCountSPClient),
|
|
688
786
|
queryCallCounts: queryCallCounts.bind(null, callCountClient),
|
|
787
|
+
queryCallCountsApp: queryCallCountsApp.bind(null, callCountAppClient),
|
|
689
788
|
queryCallCountsSP: queryCallCountsSP.bind(null, callCountSPClient),
|
|
690
789
|
writeCdrs: writeCdrs.bind(null, cdrClient),
|
|
691
790
|
queryCdrsSP: queryCdrsSP.bind(null, cdrClient),
|
package/package.json
CHANGED
package/test/unit-tests.js
CHANGED
|
@@ -5,8 +5,10 @@ const consoleLogger = {error: console.error, info: console.log, debug: console.l
|
|
|
5
5
|
const {
|
|
6
6
|
writeCallCount,
|
|
7
7
|
writeCallCountSP,
|
|
8
|
+
writeCallCountApp,
|
|
8
9
|
queryCallCounts,
|
|
9
10
|
queryCallCountsSP,
|
|
11
|
+
queryCallCountsApp,
|
|
10
12
|
writeCdrs,
|
|
11
13
|
queryCdrs,
|
|
12
14
|
queryCdrsSP,
|
|
@@ -203,6 +205,18 @@ test('write timeseries data', async(t) => {
|
|
|
203
205
|
});
|
|
204
206
|
t.pass('wrote call counts for service provider');
|
|
205
207
|
|
|
208
|
+
result = await writeCallCountApp(
|
|
209
|
+
{
|
|
210
|
+
calls_in_progress: 20,
|
|
211
|
+
application_sid: 'zzzzz'
|
|
212
|
+
});
|
|
213
|
+
result = await writeCallCountApp(
|
|
214
|
+
{
|
|
215
|
+
calls_in_progress: 21,
|
|
216
|
+
application_sid: 'zzzzz'
|
|
217
|
+
});
|
|
218
|
+
t.pass('wrote call counts for application');
|
|
219
|
+
|
|
206
220
|
result = await queryCallCountsSP({service_provider_sid: 'zzzzz', page: 1, page_size: 25, days: 7});
|
|
207
221
|
//console.log(JSON.stringify(result));
|
|
208
222
|
t.ok(result.data.length === 2, 'queried call counts by service provider sid');
|
|
@@ -210,4 +224,9 @@ test('write timeseries data', async(t) => {
|
|
|
210
224
|
result = await queryCallCounts({account_sid: 'yyyy', page: 1, page_size: 25, days: 7});
|
|
211
225
|
//console.log(JSON.stringify(result));
|
|
212
226
|
t.ok(result.data.length === 2, 'queried call counts by account_sid');
|
|
227
|
+
|
|
228
|
+
result = await queryCallCountsApp({application_sid: 'zzzzz', page: 1, page_size: 25, days: 7});
|
|
229
|
+
//console.log(JSON.stringify(result));
|
|
230
|
+
t.ok(result.data.length === 2 && result.data[0].calls_in_progress === 21, 'queried call counts by application_sid');
|
|
231
|
+
|
|
213
232
|
});
|