@jambonz/time-series 0.2.1 → 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 +101 -0
- package/package.json +1 -1
- package/test/unit-tests.js +22 -3
package/index.js
CHANGED
|
@@ -25,6 +25,7 @@ const schemas = {
|
|
|
25
25
|
measurement: 'cdrs',
|
|
26
26
|
fields: {
|
|
27
27
|
call_sid: Influx.FieldType.STRING,
|
|
28
|
+
application_sid: Influx.FieldType.STRING,
|
|
28
29
|
from: Influx.FieldType.STRING,
|
|
29
30
|
to: Influx.FieldType.STRING,
|
|
30
31
|
sip_callid: Influx.FieldType.STRING,
|
|
@@ -74,6 +75,15 @@ const schemas = {
|
|
|
74
75
|
tags: [
|
|
75
76
|
'service_provider_sid'
|
|
76
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
|
+
]
|
|
77
87
|
}
|
|
78
88
|
};
|
|
79
89
|
|
|
@@ -95,6 +105,30 @@ const writeData = async(client) => {
|
|
|
95
105
|
}
|
|
96
106
|
};
|
|
97
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
|
+
|
|
98
132
|
/* for Service Provider */
|
|
99
133
|
const createCallCountsQuerySP = ({page, page_size, days, start, end}) => {
|
|
100
134
|
let sql = 'SELECT * from sp_call_counts WHERE service_provider_sid = $service_provider_sid ';
|
|
@@ -301,6 +335,58 @@ const writeCallCountSP = async(client, count) => {
|
|
|
301
335
|
return;
|
|
302
336
|
};
|
|
303
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
|
+
|
|
304
390
|
const queryCallCountsSP = async(client, opts) => {
|
|
305
391
|
if (!client.locals.initialized) await initDatabase(client, 'sp_call_counts');
|
|
306
392
|
const response = {
|
|
@@ -450,6 +536,7 @@ const queryCdrs = async(client, opts) => {
|
|
|
450
536
|
|
|
451
537
|
const sql = createCdrQuery(opts);
|
|
452
538
|
const res = await client.queryRaw(sql, { placeholders: params});
|
|
539
|
+
//console.log(JSON.stringify(res.results[0]));
|
|
453
540
|
if (res.results[0].series && res.results[0].series.length) {
|
|
454
541
|
const {columns, values} = res.results[0].series[0];
|
|
455
542
|
const data = values.map((v) => {
|
|
@@ -640,6 +727,8 @@ module.exports = (logger, opts) => {
|
|
|
640
727
|
const alertClient = new Influx.InfluxDB({database: 'alerts', schemas: schemas.alerts, ...opts});
|
|
641
728
|
const callCountClient = new Influx.InfluxDB({database: 'call_counts', schemas: schemas.call_counts, ...opts});
|
|
642
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});
|
|
643
732
|
|
|
644
733
|
cdrClient.locals = {
|
|
645
734
|
db: 'cdrs',
|
|
@@ -657,6 +746,14 @@ module.exports = (logger, opts) => {
|
|
|
657
746
|
commitInterval: opts.commitInterval || 10,
|
|
658
747
|
data: []
|
|
659
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
|
+
};
|
|
660
757
|
callCountSPClient.locals = {
|
|
661
758
|
db: 'sp_call_counts',
|
|
662
759
|
initialized: false,
|
|
@@ -676,14 +773,18 @@ module.exports = (logger, opts) => {
|
|
|
676
773
|
|
|
677
774
|
if (opts.commitSize > 1 && opts.commitInterval && opts.commitInterval > 2) {
|
|
678
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);
|
|
679
778
|
setInterval(writeData.bind(null, cdrClient), opts.commitInterval * 1000);
|
|
680
779
|
setInterval(writeData.bind(null, alertClient), opts.commitInterval * 1000);
|
|
681
780
|
}
|
|
682
781
|
|
|
683
782
|
return {
|
|
684
783
|
writeCallCount: writeCallCount.bind(null, callCountClient),
|
|
784
|
+
writeCallCountApp: writeCallCountApp.bind(null, callCountAppClient),
|
|
685
785
|
writeCallCountSP: writeCallCountSP.bind(null, callCountSPClient),
|
|
686
786
|
queryCallCounts: queryCallCounts.bind(null, callCountClient),
|
|
787
|
+
queryCallCountsApp: queryCallCountsApp.bind(null, callCountAppClient),
|
|
687
788
|
queryCallCountsSP: queryCallCountsSP.bind(null, callCountSPClient),
|
|
688
789
|
writeCdrs: writeCdrs.bind(null, cdrClient),
|
|
689
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,
|
|
@@ -33,7 +35,6 @@ test('write timeseries data', async(t) => {
|
|
|
33
35
|
trunk: 'device',
|
|
34
36
|
service_provider_sid: 'zzzzz',
|
|
35
37
|
account_sid: 'xxxx',
|
|
36
|
-
call_sid: 'foo'
|
|
37
38
|
},
|
|
38
39
|
{
|
|
39
40
|
from: 'me2',
|
|
@@ -51,12 +52,13 @@ test('write timeseries data', async(t) => {
|
|
|
51
52
|
trunk: 'twilio',
|
|
52
53
|
service_provider_sid: 'zzzzz',
|
|
53
54
|
account_sid: 'yyyy',
|
|
54
|
-
call_sid: 'bar'
|
|
55
|
+
call_sid: 'bar',
|
|
56
|
+
application_sid: 'app-sid'
|
|
55
57
|
}]);
|
|
56
58
|
t.pass('wrote cdr');
|
|
57
59
|
|
|
58
60
|
result = await queryCdrs({account_sid: 'xxxx', page: 1, page_size:25});
|
|
59
|
-
//
|
|
61
|
+
//console.log(JSON.stringify(result));
|
|
60
62
|
t.ok(result.data.length === 1, 'queried cdrs by account sid')
|
|
61
63
|
|
|
62
64
|
result = await queryCdrs({account_sid: 'yyyy', trunk: 'twilio', page: 1, page_size:25});
|
|
@@ -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
|
});
|