in packages/app/src/logEntryProcessing.ts [57:119]
export function lambdaRequestLogData(
line: string,
): StructuredLogData | undefined {
if (!isRequestLogEntry(line)) {
return undefined;
} else {
const eventName = line.substr(0, line.indexOf(' '));
const requestId = fieldValue(line, 'RequestId', 36);
const base = {
lambdaEvent: eventName,
lambdaRequestId: requestId,
};
switch (eventName) {
case 'END':
// no other fields
return {
...base,
lambdaStats: {},
};
case 'START': {
// extract Version:
const version = fieldValue(line, 'Version');
const stats: StructuredLogData = {
lambdaVersion: version,
};
return {
...base,
lambdaStats: stats,
};
}
case 'REPORT': {
// extract other fields (conveniently tab separated)
const rawFields = line
.split('\t')
.slice(1)
.map((s) => s.trim())
.filter((s) => s.length > 0);
const fields: Array<[string, unknown]> = rawFields.map((rawField) =>
parseReportField(rawField),
);
const stats: StructuredLogData = fields.reduce(
(acc: StructuredLogData, field) => {
const [fieldName, fieldValue] = field;
acc[fieldName] = fieldValue;
return acc;
},
{},
);
return {
...base,
lambdaStats: stats,
};
}
default: {
return undefined;
}
}
}
}