kuzzle-device-manager 2.3.2 → 2.4.0-beta.1-1

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.
Files changed (36) hide show
  1. package/dist/lib/modules/asset/AssetsController.d.ts +5 -0
  2. package/dist/lib/modules/asset/AssetsController.js +48 -15
  3. package/dist/lib/modules/asset/AssetsController.js.map +1 -1
  4. package/dist/lib/modules/asset/collections/assetsMappings.js +1 -0
  5. package/dist/lib/modules/asset/collections/assetsMappings.js.map +1 -1
  6. package/dist/lib/modules/asset/types/AssetApi.d.ts +10 -0
  7. package/dist/lib/modules/decoder/PayloadService.js +1 -0
  8. package/dist/lib/modules/decoder/PayloadService.js.map +1 -1
  9. package/dist/lib/modules/device/DeviceService.js +1 -0
  10. package/dist/lib/modules/device/DeviceService.js.map +1 -1
  11. package/dist/lib/modules/device/DevicesController.d.ts +5 -0
  12. package/dist/lib/modules/device/DevicesController.js +46 -16
  13. package/dist/lib/modules/device/DevicesController.js.map +1 -1
  14. package/dist/lib/modules/device/collections/deviceMappings.d.ts +3 -0
  15. package/dist/lib/modules/device/collections/deviceMappings.js +1 -0
  16. package/dist/lib/modules/device/collections/deviceMappings.js.map +1 -1
  17. package/dist/lib/modules/device/types/DeviceApi.d.ts +10 -0
  18. package/dist/lib/modules/measure/MeasureExporter.d.ts +23 -33
  19. package/dist/lib/modules/measure/MeasureExporter.js +55 -88
  20. package/dist/lib/modules/measure/MeasureExporter.js.map +1 -1
  21. package/dist/lib/modules/measure/MeasureService.js +10 -0
  22. package/dist/lib/modules/measure/MeasureService.js.map +1 -1
  23. package/dist/lib/modules/shared/index.d.ts +1 -0
  24. package/dist/lib/modules/shared/index.js +1 -0
  25. package/dist/lib/modules/shared/index.js.map +1 -1
  26. package/dist/lib/modules/shared/services/AbstractExporter.d.ts +52 -0
  27. package/dist/lib/modules/shared/services/AbstractExporter.js +87 -0
  28. package/dist/lib/modules/shared/services/AbstractExporter.js.map +1 -0
  29. package/dist/lib/modules/shared/services/DigitalTwinExporter.d.ts +14 -0
  30. package/dist/lib/modules/shared/services/DigitalTwinExporter.js +94 -0
  31. package/dist/lib/modules/shared/services/DigitalTwinExporter.js.map +1 -0
  32. package/dist/lib/modules/shared/services/index.d.ts +2 -0
  33. package/dist/lib/modules/shared/services/index.js +19 -0
  34. package/dist/lib/modules/shared/services/index.js.map +1 -0
  35. package/dist/lib/modules/shared/types/DigitalTwinContent.d.ts +1 -0
  36. package/package.json +2 -1
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DigitalTwinExporter = void 0;
4
+ const plugin_1 = require("../../plugin");
5
+ const __1 = require("../");
6
+ const AbstractExporter_1 = require("./AbstractExporter");
7
+ class DigitalTwinExporter extends AbstractExporter_1.AbstractExporter {
8
+ exportRedisKey(engineId, exportId) {
9
+ return `exports:${engineId}:${this.target}:${exportId}`;
10
+ }
11
+ getLink(engineId, exportId) {
12
+ return `/_/device-manager/${engineId}/${this.target}/_export/${exportId}`;
13
+ }
14
+ async sendExport(engineId, exportId) {
15
+ try {
16
+ const { query, sort } = await this.getExport(engineId, exportId);
17
+ const digitalTwins = await this.sdk.document.search(engineId, this.target, { query, sort }, { lang: "koncorde", size: 200 });
18
+ const namedMeasures = await this.getNamedMeasures(engineId);
19
+ const measureColumns = await this.generateMeasureColumns(namedMeasures);
20
+ const columns = [
21
+ { header: "Model", path: "_source.model" },
22
+ { header: "Reference", path: "_source.reference" },
23
+ ...measureColumns,
24
+ { header: "lastMeasuredAt", path: "_source.lastMeasuredAt" },
25
+ ];
26
+ const stream = this.getExportStream(digitalTwins, columns);
27
+ await this.sdk.ms.del(this.exportRedisKey(engineId, exportId));
28
+ return stream;
29
+ }
30
+ catch (error) {
31
+ this.log.error(error);
32
+ }
33
+ }
34
+ /**
35
+ * Get the deduplicated Named Measures get from models
36
+ */
37
+ async getNamedMeasures(engineId) {
38
+ const type = this.target === plugin_1.InternalCollection.ASSETS ? "asset" : "device";
39
+ const query = {
40
+ and: [{ equals: { type } }],
41
+ };
42
+ if (this.target === plugin_1.InternalCollection.ASSETS) {
43
+ const engine = await this.getEngine(engineId);
44
+ query.and.push({ equals: { engineGroup: engine.group } });
45
+ }
46
+ let result = await this.sdk.document.search(this.plugin.config.adminIndex, plugin_1.InternalCollection.MODELS, {
47
+ query: { equals: { type } },
48
+ }, { lang: "koncorde" });
49
+ // ? Use a map to dedup the NamedMeasures get from models
50
+ const namedMeasures = new Map();
51
+ while (result) {
52
+ for (const { _source } of result.hits) {
53
+ for (const namedMeasure of _source[type].measures) {
54
+ if (!namedMeasures.has(namedMeasure.name)) {
55
+ namedMeasures.set(namedMeasure.name, namedMeasure);
56
+ }
57
+ }
58
+ }
59
+ result = await result.next();
60
+ }
61
+ // ? Ensure stable measures order
62
+ return [...namedMeasures.values()].sort((a, b) => {
63
+ if (a.name < b.name) {
64
+ return -1;
65
+ }
66
+ if (a.name > b.name) {
67
+ return 1;
68
+ }
69
+ return 0;
70
+ });
71
+ }
72
+ async generateMeasureColumns(namedMeasures) {
73
+ const columns = [];
74
+ const measuresPath = new Map();
75
+ for (const { name, type } of namedMeasures) {
76
+ if (!measuresPath.has(name)) {
77
+ const { measure: measureDefinition } = await (0, __1.ask)("ask:device-manager:model:measure:get", { type });
78
+ const flattenMeasuresPath = Object.keys((0, __1.flattenObject)(measureDefinition.valuesMappings)).map((path) => path.replace(".type", "").replace(".properties", ""));
79
+ measuresPath.set(name, flattenMeasuresPath);
80
+ }
81
+ for (const path of measuresPath.get(name)) {
82
+ const header = `${name}.${path}`.replace(`${name}.${type}`, name);
83
+ columns.push({
84
+ header,
85
+ isMeasure: true,
86
+ path: `_source.measures.${name}.values.${path}`,
87
+ });
88
+ }
89
+ }
90
+ return columns;
91
+ }
92
+ }
93
+ exports.DigitalTwinExporter = DigitalTwinExporter;
94
+ //# sourceMappingURL=DigitalTwinExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DigitalTwinExporter.js","sourceRoot":"","sources":["../../../../../lib/modules/shared/services/DigitalTwinExporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./AbstractExporter";
2
+ export * from "./DigitalTwinExporter";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AbstractExporter"), exports);
18
+ __exportStar(require("./DigitalTwinExporter"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/modules/shared/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,wDAAsC"}
@@ -8,4 +8,5 @@ export interface DigitalTwinContent<TMeasures extends JSONObject = JSONObject, T
8
8
  measures: {
9
9
  [Property in keyof TMeasures]: EmbeddedMeasure<TMeasures[Property]> | null;
10
10
  };
11
+ lastMeasuredAt: number;
11
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kuzzle-device-manager",
3
- "version": "2.3.2",
3
+ "version": "2.4.0-beta.1-1",
4
4
  "description": "Manage your IoT devices and assets. Choose a provisioning strategy, receive and decode payload, handle your IoT business logic.",
5
5
  "author": "The Kuzzle Team (support@kuzzle.io)",
6
6
  "repository": {
@@ -40,6 +40,7 @@
40
40
  "@types/lodash": "^4.14.195",
41
41
  "@types/node": "^18.15.13",
42
42
  "axios": "^1.3.6",
43
+ "csv-parse": "^5.4.0",
43
44
  "cz-conventional-changelog": "^3.3.0",
44
45
  "ergol": "^1.0.2",
45
46
  "eslint-plugin-jest": "^27.2.1",