in source/lambda/filter-kinesis-stream/index.ts [146:191]
async function updateReferenceData(parsedMachineData: IParsedMachineData): Promise<void> {
if (verboseLogging) {
console.log('parsedMachineData', JSON.stringify(parsedMachineData, null, 2));
}
const mutateInputs: any[] = [];
// Update UI_REFERENCE_DATA with any machines that are not currently tracked
const machineIdsUpdated: Set<string> = new Set();
parsedMachineData.messages
.filter(msg => !UI_REFERENCE_DATA[msg.machineId])
.forEach(msg => {
machineIdsUpdated.add(msg.machineId);
UI_REFERENCE_DATA[msg.machineId] = {
id: msg.machineId,
type: UIReferenceDataTypes.MACHINE
};
});
// Sort the messages so the most recent ones are at the end of the array
parsedMachineData.messages.sort(sortByMsgTimestamp);
const currentMachineStatus: { [key: string]: MachineStatus } = {};
for (const msg of parsedMachineData.messages) {
// If the message is reporting status, save the most recent status so we can
// compare it against the UI_REFERENCE_DATA
if (msg.isStatusMsg && msg.machineStatus) {
currentMachineStatus[msg.machineId] = msg.machineStatus;
}
}
for (const machineId in currentMachineStatus) {
if (UI_REFERENCE_DATA[machineId].machineStatus !== currentMachineStatus[machineId]) {
machineIdsUpdated.add(machineId);
UI_REFERENCE_DATA[machineId].machineStatus = currentMachineStatus[machineId];
}
}
machineIdsUpdated.forEach(machineId => {
mutateInputs.push(mapUIReferenceDataItemToUpdateMutationInput(UI_REFERENCE_DATA[machineId]));
});
for (const mutateInput of mutateInputs) {
await doMutateAction(updateUIReferenceItem, mutateInput);
}
}