@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jambonz/time-series",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "write and query data to time series daetabase",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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
  });