private getMatchingMessageFormatConfigItem()

in source/lambda/filter-kinesis-stream/machine-data-parser.ts [105:149]


    private getMatchingMessageFormatConfigItem(decodedData: any): IMessageFormatConfigItem {
        return this.messageFormatConfigs.find(configItem => {
            // Check if the decodedData has an array of messages
            if (!decodedData[configItem.msgFormatDataMessagesKeyName] ||
                !Array.isArray(decodedData[configItem.msgFormatDataMessagesKeyName])
            ) { return false; }

            const messagesArray = (decodedData[configItem.msgFormatDataMessagesKeyName] as any[]);
            for (const dataMsg of messagesArray) {
                // Check if the data messages the required properties
                const requiredProperties = [configItem.msgFormatDataMessageAliasKeyName,
                configItem.msgFormatDataMessageQualityKeyName,
                configItem.msgFormatDataMessageValueKeyName,
                configItem.msgFormatDataMessageTimestampKeyName];

                for (const requiredProp of requiredProperties) {
                    if (!dataMsg.hasOwnProperty(requiredProp)) {
                        return false;
                    }

                    if (dataMsg[requiredProp] === undefined || dataMsg[requiredProp] === null) {
                        return false;
                    }

                    if (typeof dataMsg[requiredProp] === 'string' && dataMsg[requiredProp].trim() === '') {
                        return false;
                    }
                }

                // Check if the timestamp format allows us to parse the date correctly
                if (!moment(dataMsg[configItem.msgFormatDataMessageTimestampKeyName], configItem.msgFormatDataMessageTimestampFormat, true).isValid()) {
                    return false;
                }

                // Verify the alias delimeter can properly split the alias value
                const splitAlias = (dataMsg[configItem.msgFormatDataMessageAliasKeyName] as string).split(configItem.msgFormatDataAliasDelimiter);

                if (splitAlias.length < 2) {
                    return false;
                }
            }

            return true;
        });
    }