Skip to content

Commit d2578bf

Browse files
committed
chore(release): '3-dev' into next
2 parents 6d46cde + 6ee21a0 commit d2578bf

28 files changed

+652
-96
lines changed

.github/workflows/push-and-pr.workflow.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55
branches:
66
- master
77
- beta
8+
- next
89
- "[0-9]+-dev"
910
pull_request:
1011

@@ -65,7 +66,7 @@ jobs:
6566
release-device-manager:
6667
name: Release package
6768
runs-on: ubuntu-22.04
68-
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/beta' || github.ref == 'refs/heads/2-dev') }}
69+
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/beta'|| github.ref == 'refs/heads/next' || github.ref == 'refs/heads/2-dev') }}
6970
needs: [functional-tests]
7071
permissions:
7172
contents: write

.releaserc.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ module.exports = {
2323
},
2424
{
2525
name: "2-dev",
26-
prerelease: "dev"
27-
}
26+
prerelease: "dev",
27+
range: "2.x",
28+
},
29+
{
30+
name: "next",
31+
prerelease: true,
32+
},
2833
],
2934
};

doc/2/controllers/models/update-asset/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Method: PUT
2222

2323
```js
2424
{
25-
"controller": "device-manager/assets",
25+
"controller": "device-manager/models",
2626
"action": "updateAsset",
2727
"engineGroup": "<engine group>",
2828
"model": "<asset model>",

doc/2/controllers/models/write-asset/index.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Method: POST
2424

2525
```js
2626
{
27-
"controller": "device-manager/assets",
27+
"controller": "device-manager/models",
2828
"action": "writeAsset",
2929
"body": {
3030
"engineGroup": "<engine group>",
@@ -164,4 +164,3 @@ Method: POST
164164
| ------------------------------------------------------------------------------ | ------- | --------------------------------------------------- |
165165
| [ MappingsConflictsError ](../../../errors/mappings-conflicts/index.md) | **409** | Writing an asset with conflicting metadata mappings |
166166
| [ MeasuresNamesDuplicatesError ](../../../errors/measures-duplicates/index.md) | **400** | Defining a measure name more than once |
167-

lib/modules/asset/AssetService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ export class AssetService extends DigitalTwinService {
298298
groups: [],
299299
lastMeasuredAt: null,
300300
linkedDevices: [],
301+
measureSlots: assetModel.asset.measures,
301302
measures,
302303
metadata: { ...assetMetadata, ...metadata },
303304
model,
@@ -645,6 +646,8 @@ export class AssetService extends DigitalTwinService {
645646
...assetMetadata,
646647
};
647648

649+
asset._source.measureSlots = assetModel.asset.measures;
650+
648651
acc[asset.index].push(asset as KDocument<AssetContent>);
649652

650653
return acc;

lib/modules/asset/collections/assetsMappings.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,12 @@ export const assetsMappings: CollectionMappings = {
5252
},
5353
},
5454
},
55+
56+
measureSlots: {
57+
properties: {
58+
name: { type: "keyword" },
59+
type: { type: "keyword" },
60+
},
61+
},
5562
},
5663
};

lib/modules/decoder/PayloadService.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { v4 as uuidv4 } from "uuid";
55

66
import { DeviceContent, DeviceSerializer } from "../device";
77
import { AskMeasureIngest, DecodedMeasurement } from "../measure";
8+
import { AskModelDeviceGet } from "../model";
89
import { DeviceManagerPlugin, InternalCollection } from "../plugin";
910
import { BaseService } from "../shared";
1011

@@ -218,6 +219,13 @@ export class PayloadService extends BaseService {
218219
deviceIds: string[],
219220
{ refresh }: { refresh: any },
220221
): Promise<KDocument<DeviceContent>[]> {
222+
const deviceModelContent = await ask<AskModelDeviceGet>(
223+
"ask:device-manager:model:device:get",
224+
{
225+
model: deviceModel,
226+
},
227+
);
228+
221229
const newDevices = deviceIds.map((deviceId) => {
222230
// Reference may contains a "-"
223231
const [, ...rest] = deviceId.split("-");
@@ -227,6 +235,7 @@ export class PayloadService extends BaseService {
227235
assetId: null,
228236
engineId: null,
229237
lastMeasuredAt: 0,
238+
measureSlots: deviceModelContent.device.measures,
230239
measures: {},
231240
metadata: {},
232241
model: deviceModel,

lib/modules/device/DeviceService.ts

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import { BadRequestError, KuzzleRequest } from "kuzzle";
22
import { ask, onAsk } from "kuzzle-plugin-commons";
3-
import { JSONObject, KDocument, KHit, SearchResult } from "kuzzle-sdk";
3+
import {
4+
BaseRequest,
5+
DocumentSearchResult,
6+
JSONObject,
7+
KDocument,
8+
KHit,
9+
SearchResult,
10+
} from "kuzzle-sdk";
411

512
import { DecodedMeasurement } from "../measure";
613
import {
@@ -9,7 +16,11 @@ import {
916
AssetModelContent,
1017
DeviceModelContent,
1118
} from "../model";
12-
import { DeviceManagerPlugin, InternalCollection } from "../plugin";
19+
import {
20+
AskEngineList,
21+
DeviceManagerPlugin,
22+
InternalCollection,
23+
} from "../plugin";
1324
import { DigitalTwinService, Metadata, SearchParams, lock } from "../shared";
1425
import {
1526
AskAssetHistoryAdd,
@@ -26,6 +37,7 @@ import {
2637
AskDeviceAttachEngine,
2738
AskDeviceDetachEngine,
2839
AskDeviceLinkAsset,
40+
AskDeviceRefreshModel,
2941
AskDeviceUnlinkAsset,
3042
EventDeviceUpdateAfter,
3143
EventDeviceUpdateBefore,
@@ -80,6 +92,11 @@ export class DeviceService extends DigitalTwinService {
8092
await this.attachEngine(engineId, deviceId, request);
8193
},
8294
);
95+
96+
onAsk<AskDeviceRefreshModel>(
97+
"ask:device-manager:device:refresh-model",
98+
this.refreshModel.bind(this),
99+
);
83100
}
84101

85102
/**
@@ -101,6 +118,7 @@ export class DeviceService extends DigitalTwinService {
101118
assetId: null,
102119
engineId: null,
103120
lastMeasuredAt: 0,
121+
measureSlots: [],
104122
measures: {},
105123
metadata,
106124
model,
@@ -112,6 +130,8 @@ export class DeviceService extends DigitalTwinService {
112130
const deviceModel = await this.getDeviceModel(model);
113131
const engineId = request.getString("engineId");
114132

133+
device._source.measureSlots = deviceModel.device.measures;
134+
115135
for (const metadataName of Object.keys(
116136
deviceModel.device.metadataMappings,
117137
)) {
@@ -933,4 +953,64 @@ export class DeviceService extends DigitalTwinService {
933953
model,
934954
});
935955
}
956+
957+
private async refreshModel({
958+
deviceModel,
959+
}: {
960+
deviceModel: DeviceModelContent;
961+
}): Promise<void> {
962+
const engines = await ask<AskEngineList>("ask:device-manager:engine:list", {
963+
group: null,
964+
});
965+
966+
const targets = engines.map((engine) => ({
967+
collections: [InternalCollection.DEVICES],
968+
index: engine.index,
969+
}));
970+
971+
const devices = await this.sdk.query<
972+
BaseRequest,
973+
DocumentSearchResult<DeviceContent>
974+
>({
975+
action: "search",
976+
body: { query: { equals: { model: deviceModel.device.model } } },
977+
controller: "document",
978+
lang: "koncorde",
979+
targets,
980+
});
981+
982+
const updatedDevicesPerIndex: Record<string, KDocument<DeviceContent>[]> =
983+
devices.result.hits.reduce(
984+
(
985+
acc: Record<string, KDocument<DeviceContent>[]>,
986+
device: JSONObject,
987+
) => {
988+
device._source.measureSlots = deviceModel.device.measures;
989+
990+
acc[device.index].push(device as KDocument<DeviceContent>);
991+
992+
return acc;
993+
},
994+
Object.fromEntries(
995+
engines.map((engine) => [
996+
engine.index,
997+
[] as KDocument<DeviceContent>[],
998+
]),
999+
),
1000+
);
1001+
1002+
await Promise.all(
1003+
Object.entries(updatedDevicesPerIndex).map(([index, updatedDevices]) =>
1004+
this.sdk.document.mReplace<DeviceContent>(
1005+
index,
1006+
InternalCollection.DEVICES,
1007+
updatedDevices.map((device) => ({
1008+
_id: device._id,
1009+
body: device._source,
1010+
})),
1011+
{ refresh: "wait_for" },
1012+
),
1013+
),
1014+
);
1015+
}
9361016
}

lib/modules/device/collections/deviceMappings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,11 @@ export const devicesMappings: CollectionMappings = {
3535
},
3636
},
3737
lastMeasuredAt: { type: "date" },
38+
measureSlots: {
39+
properties: {
40+
name: { type: "keyword" },
41+
type: { type: "keyword" },
42+
},
43+
},
3844
},
3945
};

lib/modules/device/types/DeviceEvents.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { User } from "kuzzle";
22
import { KDocument } from "kuzzle-sdk";
33

4+
import { DeviceModelContent } from "../../../modules/model";
45
import { Metadata } from "../../../modules/shared";
56

67
import { DeviceContent } from "./DeviceContent";
@@ -68,3 +69,13 @@ export type AskDeviceAttachEngine = {
6869

6970
result: void;
7071
};
72+
73+
export type AskDeviceRefreshModel = {
74+
name: "ask:device-manager:device:refresh-model";
75+
76+
payload: {
77+
deviceModel: DeviceModelContent;
78+
};
79+
80+
result: void;
81+
};

0 commit comments

Comments
 (0)