async function updateReferenceData()

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);
    }
}