UNPKG

lambda-monitor

Version:

Lambda log monitoring and streaming to external services.

65 lines (61 loc) 1.61 kB
import assert from 'assert'; import crypto from 'crypto'; import request from '../singleton/request.js'; const logLevels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']; const loadToken = (logGroup) => { if (process.env.ROLLBAR_ACCESS_TOKEN === undefined) { return undefined; } const tokenData = process.env.ROLLBAR_ACCESS_TOKEN.split('|'); for (let idx = 1; idx < tokenData.length - 1; idx += 2) { if (logGroup.startsWith(tokenData[idx])) { return tokenData[idx + 1]; } } return tokenData[0]; }; export default ({ logGroup, logStream, level, message, timestamp }) => { const token = loadToken(logGroup); if (token === undefined) { return; } const logLevelIdx = logLevels.indexOf(level.toUpperCase()); assert(logLevelIdx !== -1); if (logLevels.indexOf(process.env.ROLLBAR_REPORT_LEVEL) > logLevelIdx) { return; } assert(typeof message === 'string'); request.enqueue({ method: 'POST', url: 'https://api.rollbar.com/api/1/item/', headers: { 'content-type': 'application/json' }, data: { access_token: token, data: { level, environment: process.env.ENVIRONMENT, body: { message: { body: message, logGroup, url: `https://console.aws.amazon.com/cloudwatch/home#logEventViewer:group=${logGroup};stream=${logStream}` } }, timestamp, fingerprint: crypto .createHash('md5') .update(logGroup) .update(message.split(/[\n\r]/)[0]) .digest('hex') } } }); };