Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions lib/modules/decoder/PayloadService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,14 @@ export class PayloadService extends BaseService {
for (const device of devices) {
const {
_id,
_source: { reference, model, metadata, linkedMeasures, engineId },
_source: {
reference,
model,
metadata,
linkedMeasures,
engineId,
groups,
},
} = device;
// ? Done here to avoid invoque Measure service only for device metadata change (if no engineId)
const deviceMetadataChanges = decodedPayload.getMetadata(reference);
Expand Down Expand Up @@ -147,6 +154,7 @@ export class PayloadService extends BaseService {
payloadUuids: [uuid],
source: {
deviceMetadata: metadata,
groups,
id: _id,
metadata: deviceMetadataChanges,
model: model,
Expand Down Expand Up @@ -177,6 +185,7 @@ export class PayloadService extends BaseService {
payloadUuids: [uuid],
source: {
deviceMetadata: metadata,
groups,
id: _id,
metadata: deviceMetadataChanges,
model: model,
Expand Down Expand Up @@ -208,6 +217,7 @@ export class PayloadService extends BaseService {
payloadUuids: [uuid],
source: {
deviceMetadata: metadata,
groups,
id: _id,
metadata: deviceMetadataChanges,
model: model,
Expand Down Expand Up @@ -236,7 +246,7 @@ export class PayloadService extends BaseService {
const apiAction = "device-manager/devices:receiveMeasure";
const {
_id,
_source: { reference, model, metadata, linkedMeasures, engineId },
_source: { reference, model, metadata, linkedMeasures, engineId, groups },
} = device;

// TODO: do we want update a metadata from formatted payload to ?
Expand All @@ -262,6 +272,7 @@ export class PayloadService extends BaseService {
payloadUuids,
source: {
deviceMetadata: metadata,
groups,
id: _id,
model: model,
reference: reference,
Expand Down Expand Up @@ -292,6 +303,7 @@ export class PayloadService extends BaseService {
payloadUuids,
source: {
deviceMetadata: metadata,
groups,
id: _id,
model: model,
reference: reference,
Expand Down
3 changes: 1 addition & 2 deletions lib/modules/measure/MeasureService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ export class MeasureService extends BaseService {
) {
const { id: dataSourceId } = source;
const { indexId, assetId } = target;

if (!measurements) {
if (!measurements || measurements.length === 0) {
this.app.log.warn(
`No measurements provided for "${dataSourceId}" measures ingest`,
);
Expand Down
3 changes: 2 additions & 1 deletion lib/modules/measure/MeasureSourcesBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ export function deviceSourceToOriginDevice(
payloadUuids: string[],
deviceMetadata: Metadata,
): MeasureOriginDevice {
const { id: dataSourceId, model, reference } = source;
const { id: dataSourceId, model, reference, groups } = source;
return {
_id: dataSourceId,
deviceMetadata,
deviceModel: model,
groups,
measureName,
payloadUuids,
reference: reference,
Expand Down
15 changes: 7 additions & 8 deletions lib/modules/measure/collections/measuresMappings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,7 @@ export const measuresMappings: CollectionMappings = {
},
groups: {
properties: {
path: {
type: "keyword",
fields: { text: { type: "text" } },
},
path: { type: "keyword", fields: { text: { type: "text" } } },
date: { type: "date" },
},
},
Expand All @@ -58,11 +55,13 @@ export const measuresMappings: CollectionMappings = {
// populated with device models metadata mappings
},
},

apiMetadata: {
dynamic: "false",
properties: {},
groups: {
properties: {
path: { type: "keyword", fields: { text: { type: "text" } } },
date: { type: "date" },
},
},
apiMetadata: { dynamic: "false", properties: {} },

payloadUuids: { type: "keyword" },

Expand Down
5 changes: 5 additions & 0 deletions lib/modules/measure/types/MeasureContent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ export interface MeasureOriginDevice extends AbstractMeasureOrigin {
*/
deviceMetadata?: Metadata;

/**
* Origin device groups
*/
groups: Array<{ path: string; date: number }>;

/**
* Device ID
*/
Expand Down
4 changes: 4 additions & 0 deletions lib/modules/measure/types/MeasureSources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ export interface DeviceMeasureSource extends AbstractMeasureSource {
deviceMetadata: Metadata;
model: string;
lastMeasuredAt?: number;
groups: Array<{
path: string;
date: number;
}>;
}

export interface ApiMeasureSource extends AbstractMeasureSource {
Expand Down
24 changes: 21 additions & 3 deletions tests/scenario/migrated/measure-ingestion-pipeline.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,7 @@ describe('features/Measure/IngestionPipeline', () => {
});

it('Should enrich measure with the origin device metadata', async () => {
const metadata = {
color: 'blue',
};
const metadata = { color: 'blue' };

await sdk.query({
controller: 'device-manager/devices',
Expand Down Expand Up @@ -186,4 +184,24 @@ describe('features/Measure/IngestionPipeline', () => {
],
});
});

it('Should enrich measure with the origin device groups', async () => {
await sendPayloads(sdk, 'dummy-temp-position', [
{ deviceEUI: 'linked2', temperature: 35, location: { lon: 12, lat: 12 } },
]);

await sdk.collection.refresh('engine-ayse', 'measures');

const response = await sdk.query({
controller: 'document',
action: 'search',
index: 'engine-ayse',
collection: 'measures',
body: { query: { term: { 'origin.reference': 'linked2' } } },
});

expect(response.result.hits[0]._source.origin.groups[0]).toMatchObject({
path: 'test-parent-asset',
});
});
});