@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jambonz/time-series",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
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,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
  });