in code/log-processing/src/handlers/index.js [100:165]
yield makeMetric(initDuration, 'Milliseconds', 'InitDuration', dimensions, namespace, timestamp)
}
} catch (e) {
log.error('failed to parse Lambda cold start metric, skipped...', { event, timestamp })
return
}
}
function parseFloatWith(regex, input) {
const res = regex.exec(input)
return parseFloat(res[1])
}
function makeMetric(value, unit, name, dimensions, namespace, timestamp) {
return {
Value: value,
Unit: unit,
MetricName: name,
Dimensions: dimensions,
Namespace: namespace,
Timestamp: timestamp
}
}
function* parseRawLogData(dimensions, logEvent) {
//log.debug('Parsing raw log event %o', logEvent)
const timestamp = new Date(logEvent.timestamp).toJSON()
yield* tryParseCustomMetric(logEvent.event, dimensions, timestamp)
}
function* parseLambdaLogData(dimensions, event) {
//log.debug('Parsing lambda log event %o', event)
const rawEvent = _.get(event, 'extractedFields.event', event.message)
const timestamp = _.get(
event,
'extractedFields.timestamp',
new Date(event.timestamp).toJSON())
yield* tryParseCustomMetric(rawEvent, dimensions, timestamp)
if (process.env.RECORD_LAMBDA_COLD_START_METRIC === 'true') {
yield* tryParseUsageMetrics(rawEvent, dimensions, timestamp)
}
if (process.env.RECORD_LAMBDA_COST_METRIC === 'true') {
yield* tryParseCostMetric(rawEvent, dimensions, timestamp)
}
if (process.env.RECORD_LAMBDA_COLD_START_METRIC === 'true') {
yield* tryParseColdStartMetric(rawEvent, dimensions, timestamp)
}
}
const extractLogEvents = event => {
// CloudWatch Logs
if (event.awslogs) {
return [parseCWLogEvent(event.awslogs.data)]
}
// Kinesis
if (event.Records && event.Records[0].eventSource === 'aws:kinesis') {
return event.Records.map(record => {