Skip to content

Commit bd57728

Browse files
author
Adrien Maret
authored
Merge pull request #171 from kuzzleio/2-dev
Release 2.0.0-rc2
2 parents ef1b2d6 + 4569df2 commit bd57728

File tree

14 files changed

+197
-66
lines changed

14 files changed

+197
-66
lines changed

features/AssetController.feature

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,31 @@ Feature: Device Manager asset controller
2727
Then The document "engine-kuzzle":"assets":"outils-PERFO-imported" content match:
2828
| reference | "imported" |
2929
| model | "PERFO" |
30+
31+
Scenario: Retrieve asset measures history
32+
Given I successfully receive a "dummy-temp" payload with:
33+
| deviceEUI | "attached_ayse_linked" |
34+
| register55 | 42.2 |
35+
| batteryLevel | 0.4 |
36+
Given I successfully receive a "dummy-temp" payload with:
37+
| deviceEUI | "attached_ayse_linked" |
38+
| register55 | 21.1 |
39+
| batteryLevel | 0.4 |
40+
Given I successfully receive a "dummy-temp" payload with:
41+
| deviceEUI | "attached_ayse_linked" |
42+
| register55 | 11.3 |
43+
| batteryLevel | 0.4 |
44+
Given I refresh the collection "engine-ayse":"measures"
45+
When I successfully execute the action "device-manager/asset":"measures" with args:
46+
| engineId | "engine-ayse" |
47+
| _id | "tools-MART-linked" |
48+
| size | 5 |
49+
# there is 6 measures with the 3 from fixtures
50+
Then I should receive a "measures" array of objects matching:
51+
| _source.origin.assetId | _source.origin.id |
52+
| "tools-MART-linked" | "DummyTemp-attached_ayse_linked" |
53+
| "tools-MART-linked" | "DummyTemp-attached_ayse_linked" |
54+
| "tools-MART-linked" | "DummyTemp-attached_ayse_linked" |
55+
| "tools-MART-linked" | "DummyTemp-attached_ayse_linked" |
56+
| "tools-MART-linked" | "DummyTemp-attached_ayse_linked" |
57+

features/DeviceController/LinkAsset.feature

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ Feature: LinkAsset
1616
| measures[0].values.temperature | 23.3 |
1717
| measures[0].origin.id | "DummyTemp-attached_ayse_unlinked" |
1818
| measures[0].origin.model | "DummyTemp" |
19-
| measures[0].origin.reference | "attached_ayse_unlinked" |
2019
| measures[0].origin.type | "device" |
2120
| measures[0].unit.name | "Degree" |
2221
| measures[0].unit.sign | "°" |
@@ -27,7 +26,6 @@ Feature: LinkAsset
2726
| measures[1].values.battery | 80 |
2827
| measures[1].origin.id | "DummyTemp-attached_ayse_unlinked" |
2928
| measures[1].origin.model | "DummyTemp" |
30-
| measures[1].origin.reference | "attached_ayse_unlinked" |
3129
| measures[1].origin.type | "device" |
3230
| measures[1].unit.name | "Volt" |
3331
| measures[1].unit.sign | "v" |
@@ -68,7 +66,6 @@ Feature: LinkAsset
6866
| measures[0].values.temperature | 23.3 |
6967
| measures[0].origin.id | "DummyTemp-attached_ayse_unlinked" |
7068
| measures[0].origin.model | "DummyTemp" |
71-
| measures[0].origin.reference | "attached_ayse_unlinked" |
7269
| measures[0].origin.type | "device" |
7370
| measures[0].unit.name | "Degree" |
7471
| measures[0].unit.sign | "°" |
@@ -78,7 +75,6 @@ Feature: LinkAsset
7875
| measures[1].values.battery | 80 |
7976
| measures[1].origin.id | "DummyTemp-attached_ayse_unlinked" |
8077
| measures[1].origin.model | "DummyTemp" |
81-
| measures[1].origin.reference | "attached_ayse_unlinked" |
8278
| measures[1].origin.type | "device" |
8379
| measures[1].unit.name | "Volt" |
8480
| measures[1].unit.sign | "v" |
@@ -97,7 +93,6 @@ Feature: LinkAsset
9793
| measures[0].values.temperature | 23.3 |
9894
| measures[0].origin.id | "DummyTemp-attached_ayse_unlinked" |
9995
| measures[0].origin.model | "DummyTemp" |
100-
| measures[0].origin.reference | "attached_ayse_unlinked" |
10196
| measures[0].origin.type | "device" |
10297
| measures[0].unit.name | "Degree" |
10398
| measures[0].unit.sign | "°" |
@@ -107,7 +102,6 @@ Feature: LinkAsset
107102
| measures[1].values.battery | 80 |
108103
| measures[1].origin.id | "DummyTemp-attached_ayse_unlinked" |
109104
| measures[1].origin.model | "DummyTemp" |
110-
| measures[1].origin.reference | "attached_ayse_unlinked" |
111105
| measures[1].origin.type | "device" |
112106
| measures[1].unit.name | "Volt" |
113107
| measures[1].unit.sign | "v" |

features/DeviceController/UnlinkAsset.feature

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ Feature: UnlinkAsset
4747
| measures[0].values.temperature | 23.3 |
4848
| measures[0].origin.id | "DummyTemp-attached_ayse_unlinked" |
4949
| measures[0].origin.model | "DummyTemp" |
50-
| measures[0].origin.reference | "attached_ayse_unlinked" |
5150
| measures[0].origin.type | "device" |
5251
| measures[0].unit.name | "Degree" |
5352
| measures[0].unit.sign | "°" |
@@ -57,7 +56,6 @@ Feature: UnlinkAsset
5756
| measures[1].values.battery | 80 |
5857
| measures[1].origin.id | "DummyTemp-attached_ayse_unlinked" |
5958
| measures[1].origin.model | "DummyTemp" |
60-
| measures[1].origin.reference | "attached_ayse_unlinked" |
6159
| measures[1].origin.type | "device" |
6260
| measures[1].unit.name | "Volt" |
6361
| measures[1].unit.sign | "v" |
@@ -69,7 +67,6 @@ Feature: UnlinkAsset
6967
| measures[2].values.accuracy | 42 |
7068
| measures[2].origin.id | "DummyTemp-detached" |
7169
| measures[2].origin.model | "DummyTemp" |
72-
| measures[2].origin.reference | "detached" |
7370
| measures[2].origin.type | "device" |
7471
| measures[2].unit.name | "GPS" |
7572
| measures[2].unit.type | "geo_point" |
@@ -87,7 +84,6 @@ Feature: UnlinkAsset
8784
| measures[0].values.accuracy | 42 |
8885
| measures[0].origin.id | "DummyTemp-detached" |
8986
| measures[0].origin.model | "DummyTemp" |
90-
| measures[0].origin.reference | "detached" |
9187
| measures[0].origin.type | "device" |
9288
| measures[0].unit.name | "GPS" |
9389
| measures[0].unit.type | "geo_point" |

features/PayloadController.feature

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ Feature: Payloads Controller
1313
| measures[0].values.temperature | 23.3 |
1414
| measures[0].origin.id | "DummyTemp-12345" |
1515
| measures[0].origin.model | "DummyTemp" |
16-
| measures[0].origin.reference | "12345" |
1716
| measures[0].origin.type | "device" |
1817
| measures[0].unit.name | "Degree" |
1918
| measures[0].unit.sign | "°" |
@@ -23,7 +22,6 @@ Feature: Payloads Controller
2322
| measures[1].values.battery | 80 |
2423
| measures[1].origin.id | "DummyTemp-12345" |
2524
| measures[1].origin.model | "DummyTemp" |
26-
| measures[1].origin.reference | "12345" |
2725
| measures[1].origin.type | "device" |
2826
| measures[1].unit.name | "Volt" |
2927
| measures[1].unit.sign | "v" |
@@ -81,8 +79,8 @@ Feature: Payloads Controller
8179
| measures[0].values.temperature | 23.3 |
8280
| measures[0].origin.id | "DummyTempPosition-12345" |
8381
| measures[0].origin.model | "DummyTempPosition" |
84-
| measures[0].origin.reference | "12345" |
8582
| measures[0].origin.type | "device" |
83+
| measures[0].origin.assetId | null |
8684
| measures[0].unit.name | "Degree" |
8785
| measures[0].unit.sign | "°" |
8886
| measures[0].unit.type | "number" |
@@ -93,7 +91,6 @@ Feature: Payloads Controller
9391
| measures[1].values.accuracy | 2100 |
9492
| measures[1].origin.id | "DummyTempPosition-12345" |
9593
| measures[1].origin.model | "DummyTempPosition" |
96-
| measures[1].origin.reference | "12345" |
9794
| measures[1].origin.type | "device" |
9895
| measures[1].unit.name | "GPS" |
9996
| measures[1].unit.sign | "_NULL_" |
@@ -103,7 +100,6 @@ Feature: Payloads Controller
103100
| measures[2].values.battery | 80 |
104101
| measures[2].origin.id | "DummyTempPosition-12345" |
105102
| measures[2].origin.model | "DummyTempPosition" |
106-
| measures[2].origin.reference | "12345" |
107103
| measures[2].origin.type | "device" |
108104
| measures[2].unit.name | "Volt" |
109105
| measures[2].unit.sign | "v" |
@@ -152,7 +148,6 @@ Feature: Payloads Controller
152148
| measures[0].values.temperature | 42.2 |
153149
| measures[0].origin.id | "DummyTemp-attached_ayse_linked" |
154150
| measures[0].origin.model | "DummyTemp" |
155-
| measures[0].origin.reference | "attached_ayse_linked" |
156151
| measures[0].origin.type | "device" |
157152
| measures[0].unit.name | "Degree" |
158153
| measures[0].unit.sign | "°" |
@@ -162,7 +157,7 @@ Feature: Payloads Controller
162157
| measures[1].values.battery | 40 |
163158
| measures[1].origin.id | "DummyTemp-attached_ayse_linked" |
164159
| measures[1].origin.model | "DummyTemp" |
165-
| measures[1].origin.reference | "attached_ayse_linked" |
160+
| measures[1].origin.assetId | "tools-MART-linked" |
166161
| measures[1].origin.type | "device" |
167162
| measures[1].unit.name | "Volt" |
168163
| measures[1].unit.sign | "v" |
@@ -177,14 +172,15 @@ Feature: Payloads Controller
177172

178173
Scenario: Historize the measures
179174
When I successfully receive a "dummy-temp" payload with:
180-
| deviceEUI | "attached_ayse_unlinked" |
181-
| register55 | 42.2 |
182-
| batteryLevel | 0.4 |
175+
| deviceEUI | "attached_ayse_linked" |
176+
| register55 | 42.2 |
177+
| batteryLevel | 0.4 |
183178
And I refresh the collection "engine-ayse":"measures"
184179
Then When I successfully execute the action "document":"search" with args:
185180
| index | "engine-ayse" |
186181
| collection | "measures" |
187182
And I should receive a "hits" array of objects matching:
188-
| _source.type |
189-
| "temperature" |
190-
| "battery" |
183+
| _source.type | _source.origin.assetId |
184+
| "temperature" | "tools-MART-linked" |
185+
| "battery" | "tools-MART-linked" |
186+

features/fixtures/fixtures.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ const dummyTempAttachedAyseUnLinked = {
1717
id: 'DummyTemp-attached_ayse_unlinked',
1818
type: 'device',
1919
model: 'DummyTemp',
20-
reference: 'attached_ayse_unlinked',
2120
payloadUuids: ['some-uuid'],
2221
}
2322
},
@@ -36,7 +35,6 @@ const dummyTempAttachedAyseUnLinked = {
3635
id: 'DummyTemp-attached_ayse_unlinked',
3736
type: 'device',
3837
model: 'DummyTemp',
39-
reference: 'attached_ayse_unlinked',
4038
payloadUuids: ['some-uuid'],
4139
}
4240
}
@@ -64,7 +62,6 @@ const dummyTempAttachedAyseUnLinked2 = {
6462
id: 'DummyTemp-attached_ayse_unlinked_2',
6563
type: 'device',
6664
model: 'DummyTemp',
67-
reference: 'attached_ayse_unlinked_2',
6865
payloadUuids: ['some-uuid'],
6966
}
7067
},
@@ -83,7 +80,6 @@ const dummyTempAttachedAyseUnLinked2 = {
8380
id: 'DummyTemp-attached_ayse_unlinked_2',
8481
type: 'device',
8582
model: 'DummyTemp',
86-
reference: 'attached_ayse_unlinked_2',
8783
payloadUuids: ['some-uuid'],
8884
}
8985
}
@@ -110,8 +106,8 @@ const measuresAttachedAyseLinked = [
110106
id: 'DummyTemp-attached_ayse_linked',
111107
type: 'device',
112108
model: 'DummyTemp',
113-
reference: 'attached_ayse_linked',
114109
payloadUuids: ['some-uuid'],
110+
assetId: 'tools-MART-linked',
115111
}
116112
},
117113
{
@@ -130,8 +126,8 @@ const measuresAttachedAyseLinked = [
130126
id: 'DummyTemp-attached_ayse_linked',
131127
type: 'device',
132128
model: 'DummyTemp',
133-
reference: 'attached_ayse_linked',
134129
payloadUuids: ['some-uuid'],
130+
assetId: 'tools-MART-linked',
135131
}
136132
}
137133
];
@@ -173,7 +169,6 @@ module.exports = {
173169
id: 'DummyTemp-detached',
174170
type: 'device',
175171
model: 'DummyTemp',
176-
reference: 'detached',
177172
payloadUuids: ['some-uuid'],
178173
}
179174
}

features/support/hooks.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,18 @@ Before({ timeout: 30 * 1000 }, async function () {
8181
truncateCollection(this.sdk, 'tests', 'events'),
8282
]);
8383

84-
await this.sdk.query({
85-
controller: 'admin',
86-
action: 'loadFixtures',
87-
refresh: 'false',
88-
body: defaultFixtures,
89-
});
84+
try {
85+
await this.sdk.query({
86+
controller: 'admin',
87+
action: 'loadFixtures',
88+
refresh: 'false',
89+
body: defaultFixtures,
90+
});
91+
}
92+
catch (error) {
93+
console.dir(error, { depth: 10 });
94+
throw error;
95+
}
9096
});
9197

9298
After(async function () {

lib/controllers/AssetController.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import csv from 'csvtojson';
22
import { CRUDController } from 'kuzzle-plugin-commons';
33
import {
4+
BadRequestError,
45
KuzzleRequest,
56
Plugin,
67
} from 'kuzzle';
@@ -20,6 +21,7 @@ export class AssetController extends CRUDController {
2021

2122
this.assetService = assetService;
2223

24+
/* eslint-disable sort-keys */
2325
this.definition = {
2426
actions: {
2527
create: {
@@ -44,9 +46,33 @@ export class AssetController extends CRUDController {
4446
update: {
4547
handler: this.update.bind(this),
4648
http: [{ path: 'device-manager/:index/assets/:_id', verb: 'put' }],
49+
},
50+
measures: {
51+
handler: this.measures.bind(this),
52+
http: [{ path: 'device-manager/:index/assets/:_id/measures', verb: 'get' }],
4753
}
4854
},
4955
};
56+
/* eslint-enable sort-keys */
57+
}
58+
59+
async measures (request: KuzzleRequest) {
60+
const id = request.getId();
61+
const engineId = request.getString('engineId');
62+
const size = request.input.args.size;
63+
const startAt = request.input.args.startAt;
64+
const endAt = request.input.args.endAt;
65+
66+
if (size && startAt || size && endAt) {
67+
throw new BadRequestError('You cannot specify both a "size" and a "startAt" or "endAt"');
68+
}
69+
70+
const measures = await this.assetService.measureHistory(
71+
engineId,
72+
id,
73+
{ endAt, size, startAt });
74+
75+
return { measures };
5076
}
5177

5278
async update (request: KuzzleRequest) {

0 commit comments

Comments
 (0)