@jambonz/time-series 0.2.2 → 0.2.4
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 -0
package/index.js
CHANGED
|
@@ -75,6 +75,17 @@ 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
|
+
'service_provider_sid',
|
|
86
|
+
'account_sid',
|
|
87
|
+
'application_sid'
|
|
88
|
+
]
|
|
78
89
|
}
|
|
79
90
|
};
|
|
80
91
|
|
|
@@ -96,6 +107,30 @@ const writeData = async(client) => {
|
|
|
96
107
|
}
|
|
97
108
|
};
|
|
98
109
|
|
|
110
|
+
/* for application */
|
|
111
|
+
const createCallCountsQueryApp = ({page, page_size, days, start, end}) => {
|
|
112
|
+
let sql = 'SELECT * from app_call_counts WHERE application_sid = $application_sid ';
|
|
113
|
+
if (days) sql += 'AND time > $timestamp ';
|
|
114
|
+
else {
|
|
115
|
+
if (start) sql += 'AND time >= $start ';
|
|
116
|
+
if (end) sql += 'AND time <= $end ';
|
|
117
|
+
}
|
|
118
|
+
sql += ' ORDER BY time DESC';
|
|
119
|
+
if (page_size) sql += ' LIMIT $page_size';
|
|
120
|
+
if (page) sql += ' OFFSET $offset';
|
|
121
|
+
return sql;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const createCallCountsCountQueryApp = ({days, start, end}) => {
|
|
125
|
+
let sql = 'SELECT COUNT(calls_in_progress) from app_call_counts WHERE application_sid = $application_sid ';
|
|
126
|
+
if (days) sql += 'AND time > $timestamp ';
|
|
127
|
+
else {
|
|
128
|
+
if (start) sql += 'AND time >= $start ';
|
|
129
|
+
if (end) sql += 'AND time <= $end ';
|
|
130
|
+
}
|
|
131
|
+
return sql;
|
|
132
|
+
};
|
|
133
|
+
|
|
99
134
|
/* for Service Provider */
|
|
100
135
|
const createCallCountsQuerySP = ({page, page_size, days, start, end}) => {
|
|
101
136
|
let sql = 'SELECT * from sp_call_counts WHERE service_provider_sid = $service_provider_sid ';
|
|
@@ -302,6 +337,58 @@ const writeCallCountSP = async(client, count) => {
|
|
|
302
337
|
return;
|
|
303
338
|
};
|
|
304
339
|
|
|
340
|
+
const writeCallCountApp = async(client, count) => {
|
|
341
|
+
if (!client.locals.initialized) await initDatabase(client, 'app_call_counts');
|
|
342
|
+
const {application_sid, ...fields} = count;
|
|
343
|
+
const data = {
|
|
344
|
+
measurement: 'app_call_counts',
|
|
345
|
+
fields,
|
|
346
|
+
tags: {
|
|
347
|
+
application_sid
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
client.locals.data = [...client.locals.data, ...[data]];
|
|
351
|
+
if (client.locals.data.length >= client.locals.commitSize) {
|
|
352
|
+
await writeData(client);
|
|
353
|
+
}
|
|
354
|
+
return;
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
const queryCallCountsApp = async(client, opts) => {
|
|
358
|
+
if (!client.locals.initialized) await initDatabase(client, 'app_call_counts');
|
|
359
|
+
const response = {
|
|
360
|
+
total: 0,
|
|
361
|
+
page_size: opts.page_size,
|
|
362
|
+
page: opts.page,
|
|
363
|
+
data: []
|
|
364
|
+
};
|
|
365
|
+
const params = generateBindParameters(opts);
|
|
366
|
+
const sqlTotal = createCallCountsCountQueryApp(opts);
|
|
367
|
+
const obj = await client.queryRaw(sqlTotal, { placeholders: params});
|
|
368
|
+
//console.log(`sqlTotal: ${sqlTotal}, results: ${JSON.stringify(obj)}`);
|
|
369
|
+
if (!obj.results || !obj.results[0].series) return response;
|
|
370
|
+
response.total = obj.results[0].series[0].values[0][1];
|
|
371
|
+
|
|
372
|
+
const sql = createCallCountsQueryApp(opts);
|
|
373
|
+
const res = await client.queryRaw(sql, { placeholders: params});
|
|
374
|
+
//console.log(`sql: ${sqlTotal}, results: ${JSON.stringify(res)}`);
|
|
375
|
+
if (res.results[0].series && res.results[0].series.length) {
|
|
376
|
+
const {columns, values} = res.results[0].series[0];
|
|
377
|
+
const data = values.map((v) => {
|
|
378
|
+
const obj = {};
|
|
379
|
+
v.forEach((val, idx) => {
|
|
380
|
+
v.forEach((val, idx) => {
|
|
381
|
+
const key = columns[idx];
|
|
382
|
+
obj[key] = val;
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
return obj;
|
|
386
|
+
});
|
|
387
|
+
response.data = data;
|
|
388
|
+
}
|
|
389
|
+
return response;
|
|
390
|
+
};
|
|
391
|
+
|
|
305
392
|
const queryCallCountsSP = async(client, opts) => {
|
|
306
393
|
if (!client.locals.initialized) await initDatabase(client, 'sp_call_counts');
|
|
307
394
|
const response = {
|
|
@@ -642,6 +729,8 @@ module.exports = (logger, opts) => {
|
|
|
642
729
|
const alertClient = new Influx.InfluxDB({database: 'alerts', schemas: schemas.alerts, ...opts});
|
|
643
730
|
const callCountClient = new Influx.InfluxDB({database: 'call_counts', schemas: schemas.call_counts, ...opts});
|
|
644
731
|
const callCountSPClient = new Influx.InfluxDB({database: 'sp_call_counts', schemas: schemas.sp_call_counts, ...opts});
|
|
732
|
+
// eslint-disable-next-line max-len
|
|
733
|
+
const callCountAppClient = new Influx.InfluxDB({database: 'app_call_counts', schemas: schemas.app_call_counts, ...opts});
|
|
645
734
|
|
|
646
735
|
cdrClient.locals = {
|
|
647
736
|
db: 'cdrs',
|
|
@@ -659,6 +748,14 @@ module.exports = (logger, opts) => {
|
|
|
659
748
|
commitInterval: opts.commitInterval || 10,
|
|
660
749
|
data: []
|
|
661
750
|
};
|
|
751
|
+
callCountAppClient.locals = {
|
|
752
|
+
db: 'app_call_counts',
|
|
753
|
+
initialized: false,
|
|
754
|
+
writing: false,
|
|
755
|
+
commitSize: opts.commitSize || 1,
|
|
756
|
+
commitInterval: opts.commitInterval || 10,
|
|
757
|
+
data: []
|
|
758
|
+
};
|
|
662
759
|
callCountSPClient.locals = {
|
|
663
760
|
db: 'sp_call_counts',
|
|
664
761
|
initialized: false,
|
|
@@ -678,14 +775,18 @@ module.exports = (logger, opts) => {
|
|
|
678
775
|
|
|
679
776
|
if (opts.commitSize > 1 && opts.commitInterval && opts.commitInterval > 2) {
|
|
680
777
|
setInterval(writeData.bind(null, callCountClient), opts.commitInterval * 1000);
|
|
778
|
+
setInterval(writeData.bind(null, callCountSPClient), opts.commitInterval * 1000);
|
|
779
|
+
setInterval(writeData.bind(null, callCountAppClient), opts.commitInterval * 1000);
|
|
681
780
|
setInterval(writeData.bind(null, cdrClient), opts.commitInterval * 1000);
|
|
682
781
|
setInterval(writeData.bind(null, alertClient), opts.commitInterval * 1000);
|
|
683
782
|
}
|
|
684
783
|
|
|
685
784
|
return {
|
|
686
785
|
writeCallCount: writeCallCount.bind(null, callCountClient),
|
|
786
|
+
writeCallCountApp: writeCallCountApp.bind(null, callCountAppClient),
|
|
687
787
|
writeCallCountSP: writeCallCountSP.bind(null, callCountSPClient),
|
|
688
788
|
queryCallCounts: queryCallCounts.bind(null, callCountClient),
|
|
789
|
+
queryCallCountsApp: queryCallCountsApp.bind(null, callCountAppClient),
|
|
689
790
|
queryCallCountsSP: queryCallCountsSP.bind(null, callCountSPClient),
|
|
690
791
|
writeCdrs: writeCdrs.bind(null, cdrClient),
|
|
691
792
|
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,21 @@ 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
|
+
service_provider_sid: 'zzzzz',
|
|
212
|
+
application_sid: 'zzzzz'
|
|
213
|
+
});
|
|
214
|
+
result = await writeCallCountApp(
|
|
215
|
+
{
|
|
216
|
+
calls_in_progress: 21,
|
|
217
|
+
service_provider_sid: 'zzzzz',
|
|
218
|
+
account_sid: 'zzzzz',
|
|
219
|
+
application_sid: 'zzzzz'
|
|
220
|
+
});
|
|
221
|
+
t.pass('wrote call counts for application');
|
|
222
|
+
|
|
206
223
|
result = await queryCallCountsSP({service_provider_sid: 'zzzzz', page: 1, page_size: 25, days: 7});
|
|
207
224
|
//console.log(JSON.stringify(result));
|
|
208
225
|
t.ok(result.data.length === 2, 'queried call counts by service provider sid');
|
|
@@ -210,4 +227,9 @@ test('write timeseries data', async(t) => {
|
|
|
210
227
|
result = await queryCallCounts({account_sid: 'yyyy', page: 1, page_size: 25, days: 7});
|
|
211
228
|
//console.log(JSON.stringify(result));
|
|
212
229
|
t.ok(result.data.length === 2, 'queried call counts by account_sid');
|
|
230
|
+
|
|
231
|
+
result = await queryCallCountsApp({application_sid: 'zzzzz', page: 1, page_size: 25, days: 7});
|
|
232
|
+
//console.log(JSON.stringify(result));
|
|
233
|
+
t.ok(result.data.length === 2 && result.data[0].calls_in_progress === 21, 'queried call counts by application_sid');
|
|
234
|
+
|
|
213
235
|
});
|