export function lambdaRequestLogData()

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