@things-factory/integration-influxdb 7.0.0-alpha.25 → 7.0.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"influxdb.js","sourceRoot":"","sources":["../../../server/engine/connector/influxdb.ts"],"names":[],"mappings":";;;AAAA,iEAAsD;AAEtD,uEAA2F;AAE3F,MAAa,iBAAiB;IAC5B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IACjE,CAAC;IAED,uBAAuB,CAAC,MAAM,EAAE,cAAc;;QAC5C,IAAI;YACF,MAAM,UAAU,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;YAExF,OAAO,CAAC,CAAC,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,eAAe,MAAK,QAAQ,CAAC,CAAA;SAC5D;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,KAAK,CAAA;SACb;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,IAAI,EACF,QAAQ,EACR,MAAM,EAAE,EAAE,KAAK,EAAE,EAClB,GAAG,UAAU,CAAA;QAEd,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,0BAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;YAErD,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAE3D,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,gBAAgB,CAAC,CAAA;SAC7G;QAAC,OAAO,EAAE,EAAE;YACX,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,qBAAqB,CAAC,CAAA;YACjH,MAAM,EAAE,CAAA;SACT;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAsB;QACrC,IAAI,EAAE,MAAM,EAAE,GAAG,oCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;QACvE,MAAM,CAAC,KAAK,EAAE,CAAA;QAEd,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,IAAI,mBAAmB,CAAC,CAAA;IAC1F,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,gBAAgB;aACxB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,UAAU,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,0CAA0C,CAAA;IACnD,CAAC;CACF;AA3DD,8CA2DC;AAED,oCAAiB,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAA","sourcesContent":["import { InfluxDB } from '@influxdata/influxdb-client'\n\nimport { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class InfluxDBConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('influxdb connections are ready')\n }\n\n checkConnectionInstance(domain, connectionName): boolean {\n try {\n const connection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n\n return !!(connection?.client?.connectionState !== 'online')\n } catch (e) {\n return false\n }\n }\n\n async connect(connection) {\n var {\n endpoint,\n params: { token }\n } = connection\n\n try {\n const client = new InfluxDB({ url: endpoint, token })\n\n ConnectionManager.addConnectionInstance(connection, client)\n\n ConnectionManager.logger.info(`influxdb connection(${connection.name}:${connection.endpoint}) is connected`)\n } catch (ex) {\n ConnectionManager.logger.info(`influxdb connection(${connection.name}:${connection.endpoint}) failed to connect`)\n throw ex\n }\n }\n\n async disconnect(connection: Connection) {\n var { client } = ConnectionManager.removeConnectionInstance(connection)\n client.close()\n\n ConnectionManager.logger.info(`influxdb connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'token',\n label: 'influxdb.token'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['influxdb']\n }\n\n get help() {\n return 'integration/connector/influxdb-connector'\n }\n}\n\nConnectionManager.registerConnector('influxdb-connector', new InfluxDBConnector())\n"]}
1
+ {"version":3,"file":"influxdb.js","sourceRoot":"","sources":["../../../server/engine/connector/influxdb.ts"],"names":[],"mappings":";;;AAAA,iEAAsD;AAEtD,uEAA2F;AAE3F,MAAa,iBAAiB;IAC5B,KAAK,CAAC,KAAK,CAAC,iBAAiB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IACjE,CAAC;IAED,uBAAuB,CAAC,MAAM,EAAE,cAAc;;QAC5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;YAExF,OAAO,CAAC,CAAC,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,eAAe,MAAK,QAAQ,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAU;QACtB,IAAI,EACF,QAAQ,EACR,MAAM,EAAE,EAAE,KAAK,EAAE,EAClB,GAAG,UAAU,CAAA;QAEd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,0BAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;YAErD,oCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAE3D,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,gBAAgB,CAAC,CAAA;QAC9G,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAC3B,uBAAuB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,qBAAqB,EAClF,EAAE,CACH,CAAA;YACD,MAAM,EAAE,CAAA;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAsB;QACrC,IAAI,MAAM,GAAG,oCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;QACnE,MAAM,CAAC,KAAK,EAAE,CAAA;QAEd,oCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,IAAI,mBAAmB,CAAC,CAAA;IAC1F,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,gBAAgB;aACxB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,UAAU,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,0CAA0C,CAAA;IACnD,CAAC;CACF;AA9DD,8CA8DC;AAED,oCAAiB,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAA","sourcesContent":["import { InfluxDB } from '@influxdata/influxdb-client'\n\nimport { Connection, ConnectionManager, Connector } from '@things-factory/integration-base'\n\nexport class InfluxDBConnector implements Connector {\n async ready(connectionConfigs) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('influxdb connections are ready')\n }\n\n checkConnectionInstance(domain, connectionName): boolean {\n try {\n const connection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n\n return !!(connection?.client?.connectionState !== 'online')\n } catch (e) {\n return false\n }\n }\n\n async connect(connection) {\n var {\n endpoint,\n params: { token }\n } = connection\n\n try {\n const client = new InfluxDB({ url: endpoint, token })\n\n ConnectionManager.addConnectionInstance(connection, client)\n\n ConnectionManager.logger.info(`influxdb connection(${connection.name}:${connection.endpoint}) is connected`)\n } catch (ex) {\n ConnectionManager.logger.info(\n `influxdb connection(${connection.name}:${connection.endpoint}) failed to connect`,\n ex\n )\n throw ex\n }\n }\n\n async disconnect(connection: Connection) {\n var client = ConnectionManager.removeConnectionInstance(connection)\n client.close()\n\n ConnectionManager.logger.info(`influxdb connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'token',\n label: 'influxdb.token'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['influxdb']\n }\n\n get help() {\n return 'integration/connector/influxdb-connector'\n }\n}\n\nConnectionManager.registerConnector('influxdb-connector', new InfluxDBConnector())\n"]}
@@ -0,0 +1,2 @@
1
+ import './connector';
2
+ import './task';
@@ -0,0 +1,2 @@
1
+ import './influxdb-write-point';
2
+ import './influxdb-query';
@@ -0,0 +1 @@
1
+ import 'ses';
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const vm2_1 = require("vm2");
4
+ require("ses");
5
5
  const integration_base_1 = require("@things-factory/integration-base");
6
6
  const debug = require('debug')('things-factory:influxdb-query');
7
7
  function processInfluxData(raws) {
8
- var current;
9
- var result = {};
8
+ const result = {};
10
9
  raws.forEach(raw => {
11
10
  const { _time, _field, _value, _measurement, _start, _stop, result: _result, table } = raw, tags = tslib_1.__rest(raw, ["_time", "_field", "_value", "_measurement", "_start", "_stop", "result", "table"]);
12
11
  result[_time] || (result[_time] = {
@@ -26,16 +25,21 @@ async function influxdbQuery(step, { domain, user, data, variables, lng }) {
26
25
  debug(`no connection : ${connection}`);
27
26
  throw new Error(`no connection : ${connection}`);
28
27
  }
29
- const vm = new vm2_1.VM({
30
- sandbox: {
31
- domain,
32
- user,
33
- lng,
34
- data,
35
- variables
36
- }
28
+ const compartment = new Compartment({
29
+ domain,
30
+ user,
31
+ lng,
32
+ data,
33
+ variables,
34
+ console
37
35
  });
38
- const fluxQuery = vm.run('`' + query + '`');
36
+ let fluxQuery;
37
+ try {
38
+ fluxQuery = compartment.evaluate('`' + query + '`');
39
+ }
40
+ catch (err) {
41
+ throw new Error(`Failed to evaluate query: ${err.message}`);
42
+ }
39
43
  const queryApi = client.getQueryApi(organization);
40
44
  const result = await queryApi.collectRows(fluxQuery);
41
45
  return {
@@ -51,7 +55,14 @@ influxdbQuery.parameterSpec = [
51
55
  {
52
56
  type: 'textarea',
53
57
  name: 'query',
54
- label: 'influxdb.query'
58
+ label: 'influxdb.query',
59
+ property: {
60
+ language: 'text',
61
+ showLineNumbers: true
62
+ },
63
+ styles: {
64
+ flex: '1'
65
+ }
55
66
  }
56
67
  ];
57
68
  influxdbQuery.help = 'integration/task/influxdb-query';
@@ -1 +1 @@
1
- {"version":3,"file":"influxdb-query.js","sourceRoot":"","sources":["../../../server/engine/task/influxdb-query.ts"],"names":[],"mappings":";;;AACA,6BAAwB;AAExB,uEAA2F;AAE3F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAA;AAqB/D,SAAS,iBAAiB,CAAC,IAAiB;IAC1C,IAAI,OAAmB,CAAA;IACvB,IAAI,MAAM,GAAmC,EAAE,CAAA;IAE/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,KAAc,GAAG,EAAZ,IAAI,kBAAK,GAAG,EAA7F,mFAAuF,CAAM,CAAA;QAEnG,MAAM,CAAC,KAAK,MAAZ,MAAM,CAAC,KAAK,IAAM;YAChB,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,YAAY;YACzB,IAAI;YACJ,MAAM,EAAE,EAAE;SACX,EAAA;QAED,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAW;IAChF,MAAM,EACJ,UAAU,EACV,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAChC,GAAG,IAAI,CAAA;IAER,MAAM,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAa,CAAA;IAC5F,IAAI,CAAC,MAAM,EAAE;QACX,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;QACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,MAAM,EAAE,GAAG,IAAI,QAAE,CAAC;QAChB,OAAO,EAAE;YACP,MAAM;YACN,IAAI;YACJ,GAAG;YACH,IAAI;YACJ,SAAS;SACV;KACF,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAA;IAE3C,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAEpD,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,MAAqB,CAAC;KAC/C,CAAA;AACH,CAAC;AAED,aAAa,CAAC,aAAa,GAAG;IAC5B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,uBAAuB;KAC/B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,gBAAgB;KACxB;CACF,CAAA;AAED,aAAa,CAAC,IAAI,GAAG,iCAAiC,CAAA;AAEtD,+BAAY,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA","sourcesContent":["import { InfluxDB, FluxTableMetaData } from '@influxdata/influxdb-client'\nimport { VM } from 'vm2'\n\nimport { ConnectionManager, Context, TaskRegistry } from '@things-factory/integration-base'\n\nconst debug = require('debug')('things-factory:influxdb-query')\n\ninterface InfluxData {\n measurement: string\n tags: { [key: string]: string }\n fields: { [key: string]: number | string | boolean }\n timestamp: string\n}\n\ninterface InfluxRaw {\n _time: string\n _start: string\n _stop: string\n _measurement: string\n _field: string\n _value: any\n table: any\n result: any\n [tag: string]: string\n}\n\nfunction processInfluxData(raws: InfluxRaw[]): InfluxData[] {\n var current: InfluxData\n var result: { [time: string]: InfluxData } = {}\n\n raws.forEach(raw => {\n const { _time, _field, _value, _measurement, _start, _stop, result: _result, table, ...tags } = raw\n\n result[_time] ||= {\n timestamp: _time,\n measurement: _measurement,\n tags,\n fields: {}\n }\n\n result[_time].fields[_field] = _value\n })\n\n return Object.values(result)\n}\n\nasync function influxdbQuery(step, { domain, user, data, variables, lng }: Context) {\n const {\n connection,\n params: { organization, query }\n } = step\n\n const client = ConnectionManager.getConnectionInstanceByName(domain, connection) as InfluxDB\n if (!client) {\n debug(`no connection : ${connection}`)\n throw new Error(`no connection : ${connection}`)\n }\n\n const vm = new VM({\n sandbox: {\n domain,\n user,\n lng,\n data,\n variables\n }\n })\n\n const fluxQuery = vm.run('`' + query + '`')\n\n const queryApi = client.getQueryApi(organization)\n\n const result = await queryApi.collectRows(fluxQuery)\n\n return {\n data: processInfluxData(result as InfluxRaw[])\n }\n}\n\ninfluxdbQuery.parameterSpec = [\n {\n type: 'string',\n name: 'organization',\n label: 'influxdb.organization'\n },\n {\n type: 'textarea',\n name: 'query',\n label: 'influxdb.query'\n }\n]\n\ninfluxdbQuery.help = 'integration/task/influxdb-query'\n\nTaskRegistry.registerTaskHandler('influxdb-query', influxdbQuery)\n"]}
1
+ {"version":3,"file":"influxdb-query.js","sourceRoot":"","sources":["../../../server/engine/task/influxdb-query.ts"],"names":[],"mappings":";;;AAAA,eAAY;AAEZ,uEAA2F;AAE3F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAA;AAqB/D,SAAS,iBAAiB,CAAC,IAAiB;IAC1C,MAAM,MAAM,GAAmC,EAAE,CAAA;IAEjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,KAAc,GAAG,EAAZ,IAAI,kBAAK,GAAG,EAA7F,mFAAuF,CAAM,CAAA;QAEnG,MAAM,CAAC,KAAK,MAAZ,MAAM,CAAC,KAAK,IAAM;YAChB,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,YAAY;YACzB,IAAI;YACJ,MAAM,EAAE,EAAE;SACX,EAAA;QAED,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAW;IAChF,MAAM,EACJ,UAAU,EACV,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAChC,GAAG,IAAI,CAAA;IAER,MAAM,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAa,CAAA;IAC5F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;QACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,MAAM;QACN,IAAI;QACJ,GAAG;QACH,IAAI;QACJ,SAAS;QACT,OAAO;KACR,CAAC,CAAA;IAEF,IAAI,SAAS,CAAA;IACb,IAAI,CAAC;QACH,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAEpD,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,MAAqB,CAAC;KAC/C,CAAA;AACH,CAAC;AAED,aAAa,CAAC,aAAa,GAAG;IAC5B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,uBAAuB;KAC/B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM;YAChB,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,GAAG;SACV;KACF;CACF,CAAA;AAED,aAAa,CAAC,IAAI,GAAG,iCAAiC,CAAA;AAEtD,+BAAY,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA","sourcesContent":["import 'ses'\nimport { InfluxDB, FluxTableMetaData } from '@influxdata/influxdb-client'\nimport { ConnectionManager, Context, TaskRegistry } from '@things-factory/integration-base'\n\nconst debug = require('debug')('things-factory:influxdb-query')\n\ninterface InfluxData {\n measurement: string\n tags: { [key: string]: string }\n fields: { [key: string]: number | string | boolean }\n timestamp: string\n}\n\ninterface InfluxRaw {\n _time: string\n _start: string\n _stop: string\n _measurement: string\n _field: string\n _value: any\n table: any\n result: any\n [tag: string]: string\n}\n\nfunction processInfluxData(raws: InfluxRaw[]): InfluxData[] {\n const result: { [time: string]: InfluxData } = {}\n\n raws.forEach(raw => {\n const { _time, _field, _value, _measurement, _start, _stop, result: _result, table, ...tags } = raw\n\n result[_time] ||= {\n timestamp: _time,\n measurement: _measurement,\n tags,\n fields: {}\n }\n\n result[_time].fields[_field] = _value\n })\n\n return Object.values(result)\n}\n\nasync function influxdbQuery(step, { domain, user, data, variables, lng }: Context) {\n const {\n connection,\n params: { organization, query }\n } = step\n\n const client = ConnectionManager.getConnectionInstanceByName(domain, connection) as InfluxDB\n if (!client) {\n debug(`no connection : ${connection}`)\n throw new Error(`no connection : ${connection}`)\n }\n\n const compartment = new Compartment({\n domain,\n user,\n lng,\n data,\n variables,\n console\n })\n\n let fluxQuery\n try {\n fluxQuery = compartment.evaluate('`' + query + '`')\n } catch (err) {\n throw new Error(`Failed to evaluate query: ${err.message}`)\n }\n\n const queryApi = client.getQueryApi(organization)\n\n const result = await queryApi.collectRows(fluxQuery)\n\n return {\n data: processInfluxData(result as InfluxRaw[])\n }\n}\n\ninfluxdbQuery.parameterSpec = [\n {\n type: 'string',\n name: 'organization',\n label: 'influxdb.organization'\n },\n {\n type: 'textarea',\n name: 'query',\n label: 'influxdb.query',\n property: {\n language: 'text',\n showLineNumbers: true\n },\n styles: {\n flex: '1'\n }\n }\n]\n\ninfluxdbQuery.help = 'integration/task/influxdb-query'\n\nTaskRegistry.registerTaskHandler('influxdb-query', influxdbQuery)\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"influxdb-write-point.js","sourceRoot":"","sources":["../../../server/engine/task/influxdb-write-point.ts"],"names":[],"mappings":";;AAAA,iEAAmD;AAEnD,iDAA8C;AAC9C,uEAAkF;AAElF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAA;AASrE,KAAK,UAAU,kBAAkB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAC9D,MAAM,EACJ,UAAU,EACV,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EACtD,GAAG,IAAI,CAAA;IAER,MAAM,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAChF,IAAI,CAAC,MAAM,EAAE;QACX,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;QACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;KACjD;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAClE,MAAM,KAAK,GAAG,IAAI,uBAAK,CAAC,WAAW,CAAC,CAAA;IAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,KAA0B,EAAE,EAAE;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;QAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,cAAM,EAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QAEjE,QAAQ,IAAI,EAAE;YACZ,KAAK,KAAK;gBACR,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAC3B,MAAK;YACP,KAAK,QAAQ;gBACX,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACnC,MAAK;YACP,KAAK,SAAS;gBACZ,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAChC,MAAK;YACP,KAAK,UAAU;gBACb,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,OAAO;gBACV,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAClC,MAAK;YACP,KAAK,SAAS;gBACZ,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACpC,MAAK;SACR;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,WAAW,CAAC,KAAK,EAAE,CAAA;IAEzB,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,MAAM;KACnB,CAAA;AACH,CAAC;AAED,kBAAkB,CAAC,aAAa,GAAG;IACjC;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,uBAAuB;KAC/B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,iBAAiB;KACzB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,sBAAsB;KAC9B;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,uBAAuB;KAC/B;CACF,CAAA;AAED,kBAAkB,CAAC,IAAI,GAAG,uCAAuC,CAAA;AAEjE,+BAAY,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAA","sourcesContent":["import { Point } from '@influxdata/influxdb-client'\n\nimport { access } from '@things-factory/utils'\nimport { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\n\nconst debug = require('debug')('things-factory:influxdb-write-point')\n\ntype InfluxDBPointScheme = {\n name: string\n type: string\n val?: any\n accessor?: string\n}\n\nasync function influxdbWritePoint(step, { logger, domain, data }) {\n const {\n connection,\n params: { organization, bucket, measurement, scheme }\n } = step\n\n const client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n debug(`no connection : ${connection}`)\n throw new Error(`no connection : ${connection}`)\n }\n\n const writeClient = client.getWriteApi(organization, bucket, 'ns')\n const point = new Point(measurement)\n\n scheme.forEach((field: InfluxDBPointScheme) => {\n const { name, val, type, accessor } = field\n const calculated = accessor ? access(accessor, data) || val : val\n\n switch (type) {\n case 'Tag':\n point.tag(name, calculated)\n break\n case 'String':\n point.stringField(name, calculated)\n break\n case 'Integer':\n point.intField(name, calculated)\n break\n case 'Unsigned':\n point.uintField(name, calculated)\n break\n case 'Float':\n point.floatField(name, calculated)\n break\n case 'Boolean':\n point.booleanField(name, calculated)\n break\n }\n })\n\n await writeClient.writePoint(point)\n await writeClient.close()\n\n return {\n data: point.fields\n }\n}\n\ninfluxdbWritePoint.parameterSpec = [\n {\n type: 'string',\n name: 'organization',\n label: 'influxdb.organization'\n },\n {\n type: 'string',\n name: 'bucket',\n label: 'influxdb.bucket'\n },\n {\n type: 'string',\n name: 'measurement',\n label: 'influxdb.measurement'\n },\n {\n type: 'influxdb-point-scheme',\n name: 'scheme',\n label: 'influxdb.point-scheme'\n }\n]\n\ninfluxdbWritePoint.help = 'integration/task/influxdb-write-point'\n\nTaskRegistry.registerTaskHandler('influxdb-write-point', influxdbWritePoint)\n"]}
1
+ {"version":3,"file":"influxdb-write-point.js","sourceRoot":"","sources":["../../../server/engine/task/influxdb-write-point.ts"],"names":[],"mappings":";;AAAA,iEAAmD;AAEnD,iDAA8C;AAC9C,uEAAkF;AAElF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAA;AASrE,KAAK,UAAU,kBAAkB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAC9D,MAAM,EACJ,UAAU,EACV,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EACtD,GAAG,IAAI,CAAA;IAER,MAAM,MAAM,GAAG,oCAAiB,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAChF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;QACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAClE,MAAM,KAAK,GAAG,IAAI,uBAAK,CAAC,WAAW,CAAC,CAAA;IAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,KAA0B,EAAE,EAAE;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;QAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,cAAM,EAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QAEjE,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK;gBACR,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAC3B,MAAK;YACP,KAAK,QAAQ;gBACX,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACnC,MAAK;YACP,KAAK,SAAS;gBACZ,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAChC,MAAK;YACP,KAAK,UAAU;gBACb,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,OAAO;gBACV,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAClC,MAAK;YACP,KAAK,SAAS;gBACZ,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACpC,MAAK;QACT,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,WAAW,CAAC,KAAK,EAAE,CAAA;IAEzB,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,MAAM;KACnB,CAAA;AACH,CAAC;AAED,kBAAkB,CAAC,aAAa,GAAG;IACjC;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,uBAAuB;KAC/B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,iBAAiB;KACzB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,sBAAsB;KAC9B;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,uBAAuB;KAC/B;CACF,CAAA;AAED,kBAAkB,CAAC,IAAI,GAAG,uCAAuC,CAAA;AAEjE,+BAAY,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAA","sourcesContent":["import { Point } from '@influxdata/influxdb-client'\n\nimport { access } from '@things-factory/utils'\nimport { ConnectionManager, TaskRegistry } from '@things-factory/integration-base'\n\nconst debug = require('debug')('things-factory:influxdb-write-point')\n\ntype InfluxDBPointScheme = {\n name: string\n type: string\n val?: any\n accessor?: string\n}\n\nasync function influxdbWritePoint(step, { logger, domain, data }) {\n const {\n connection,\n params: { organization, bucket, measurement, scheme }\n } = step\n\n const client = ConnectionManager.getConnectionInstanceByName(domain, connection)\n if (!client) {\n debug(`no connection : ${connection}`)\n throw new Error(`no connection : ${connection}`)\n }\n\n const writeClient = client.getWriteApi(organization, bucket, 'ns')\n const point = new Point(measurement)\n\n scheme.forEach((field: InfluxDBPointScheme) => {\n const { name, val, type, accessor } = field\n const calculated = accessor ? access(accessor, data) || val : val\n\n switch (type) {\n case 'Tag':\n point.tag(name, calculated)\n break\n case 'String':\n point.stringField(name, calculated)\n break\n case 'Integer':\n point.intField(name, calculated)\n break\n case 'Unsigned':\n point.uintField(name, calculated)\n break\n case 'Float':\n point.floatField(name, calculated)\n break\n case 'Boolean':\n point.booleanField(name, calculated)\n break\n }\n })\n\n await writeClient.writePoint(point)\n await writeClient.close()\n\n return {\n data: point.fields\n }\n}\n\ninfluxdbWritePoint.parameterSpec = [\n {\n type: 'string',\n name: 'organization',\n label: 'influxdb.organization'\n },\n {\n type: 'string',\n name: 'bucket',\n label: 'influxdb.bucket'\n },\n {\n type: 'string',\n name: 'measurement',\n label: 'influxdb.measurement'\n },\n {\n type: 'influxdb-point-scheme',\n name: 'scheme',\n label: 'influxdb.point-scheme'\n }\n]\n\ninfluxdbWritePoint.help = 'integration/task/influxdb-write-point'\n\nTaskRegistry.registerTaskHandler('influxdb-write-point', influxdbWritePoint)\n"]}
@@ -0,0 +1 @@
1
+ import './engine';