lambda-monitor
Version:
Lambda log monitoring and streaming to external services.
25 lines (23 loc) • 861 B
JavaScript
import objectScan from 'object-scan';
import Datadog from './util/datadog.js';
export default async (event, context) => {
const datadog = Datadog();
if (datadog === null) {
return;
}
const arr = event.Records.map(({ body }) => JSON.parse(body));
// Workaround since Datadog strips empty objects
// Reference: https://docs.datadoghq.com/logs/log_configuration/parsing/?tab=matchers
objectScan(['[*]**'], {
filterFn: ({ parent, property, value }) => {
if (value === null) {
// eslint-disable-next-line no-param-reassign
parent[property] = '<null>';
} else if (value instanceof Object && Object.keys(value).length === 0) {
// eslint-disable-next-line no-param-reassign
parent[property] = `<empty ${JSON.stringify(value)}>`;
}
}
})(arr);
await datadog.Logger.uploadJsonArray(arr);
};