@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jambonz/time-series",
3
- "version": "0.2.1",
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,
@@ -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
- //npm tesconsole.log(JSON.stringify(result));
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
  });