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