From bfe17aa218074ff5a8feedbcea53b907e9a8a812 Mon Sep 17 00:00:00 2001 From: Mark Wolfe Date: Thu, 12 Jan 2017 10:46:13 +1100 Subject: [PATCH] Fixed linting issues. * Fixed comparison operators, some where not safe in JS * Removed extra escape character in regex * Small change to console to log to avoid unneeded string concatenation. * Superfulous whitespace --- cloudwatchlogs/cloudwatchlogs_lambda.js | 82 ++++++++++++------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/cloudwatchlogs/cloudwatchlogs_lambda.js b/cloudwatchlogs/cloudwatchlogs_lambda.js index 7cf51ca..8f7cba5 100644 --- a/cloudwatchlogs/cloudwatchlogs_lambda.js +++ b/cloudwatchlogs/cloudwatchlogs_lambda.js @@ -24,7 +24,7 @@ var includeLogInfo = true; // default is true var consoleFormatRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z\t(\w+?-\w+?-\w+?-\w+?-\w+)\t/; // Used to extract RequestID -var requestIdRegex = /(?:RequestId:|Z)\s+([\w\d\-]+)/; +var requestIdRegex = /(?:RequestId:|Z)\s+([\w\d-]+)/; var https = require('https'); var zlib = require('zlib'); @@ -35,23 +35,23 @@ function sumoMetaKey(awslogsData, message) { var sourceCategory = ''; var sourceName = ''; var sourceHost = ''; - - if (sourceCategoryOverride !== null && sourceCategoryOverride !== '' && sourceCategoryOverride != 'none') { + + if (sourceCategoryOverride !== null && sourceCategoryOverride !== '' && sourceCategoryOverride !== 'none') { sourceCategory = sourceCategoryOverride; } - - if (sourceHostOverride !== null && sourceHostOverride !== '' && sourceHostOverride != 'none') { + + if (sourceHostOverride !== null && sourceHostOverride !== '' && sourceHostOverride !== 'none') { sourceHost = sourceHostOverride; } else { sourceHost = awslogsData.logGroup; } - - if (sourceNameOverride !== null && sourceNameOverride !== '' && sourceNameOverride != 'none') { + + if (sourceNameOverride !== null && sourceNameOverride !== '' && sourceNameOverride !== 'none') { sourceName = sourceNameOverride; } else { sourceName = awslogsData.logStream; } - + // Ability to override metadata within the message // Useful within Lambda function console.log to dynamically set metadata fields within SumoLogic. if (message.hasOwnProperty('_sumo_metadata')) { @@ -68,25 +68,25 @@ function sumoMetaKey(awslogsData, message) { delete message._sumo_metadata; } return sourceName + ':' + sourceCategory + ':' + sourceHost; - + } function postToSumo(context, messages) { var messagesTotal = Object.keys(messages).length; var messagesSent = 0; var messageErrors = []; - + var urlObject = url.parse(SumoURL); var options = { 'hostname': urlObject.hostname, 'path': urlObject.pathname, 'method': 'POST' }; - + var finalizeContext = function () { var total = messagesSent + messageErrors.length; - if (total == messagesTotal) { - console.log('messagesSent: ' + messagesSent + ' messagesErrors: ' + messageErrors.length); + if (total === messagesTotal) { + console.log('messagesSent:', messagesSent, 'messagesErrors:', messageErrors.length); if (messageErrors.length > 0) { context.fail('errors: ' + messageErrors); } else { @@ -94,22 +94,22 @@ function postToSumo(context, messages) { } } }; - - + + Object.keys(messages).forEach(function (key, index) { var headerArray = key.split(':'); - + options.headers = { 'X-Sumo-Name': headerArray[0], 'X-Sumo-Category': headerArray[1], 'X-Sumo-Host': headerArray[2] }; - + var req = https.request(options, function (res) { res.setEncoding('utf8'); res.on('data', function (chunk) {}); res.on('end', function () { - if (res.statusCode == 200) { + if (res.statusCode === 200) { messagesSent++; } else { messageErrors.push('HTTP Return code ' + res.statusCode); @@ -117,12 +117,12 @@ function postToSumo(context, messages) { finalizeContext(); }); }); - + req.on('error', function (e) { messageErrors.push(e.message); finalizeContext(); }); - + for (var i = 0; i < messages[key].length; i++) { req.write(JSON.stringify(messages[key][i]) + '\n'); } @@ -132,53 +132,53 @@ function postToSumo(context, messages) { exports.handler = function (event, context) { - + // Used to hold chunks of messages to post to SumoLogic var messageList = {}; // Validate URL has been set var urlObject = url.parse(SumoURL); - if (urlObject.protocol != 'https:' || urlObject.host === null || urlObject.path === null) { + if (urlObject.protocol !== 'https:' || urlObject.host === null || urlObject.path === null) { context.fail('Invalid SUMO_ENDPOINT environment variable: ' + SumoURL); } - + var zippedInput = new Buffer(event.awslogs.data, 'base64'); - + zlib.gunzip(zippedInput, function (e, buffer) { if (e) { context.fail(e); } - + var awslogsData = JSON.parse(buffer.toString(encoding)); - + if (awslogsData.messageType === 'CONTROL_MESSAGE') { console.log('Control message'); context.succeed('Success'); } - + var lastRequestID = null; - - console.log('Log events: ' + awslogsData.logEvents.length); - + + console.log('Log events:', awslogsData.logEvents.length); + // Chunk log events before posting to SumoLogic awslogsData.logEvents.forEach(function (log, idx, arr) { - + // Remove any trailing \n log.message = log.message.replace(/\n$/, ''); - + // Try extract requestID var requestId = requestIdRegex.exec(log.message); if (requestId !== null) { lastRequestID = requestId[1]; } - + // Attempt to detect console log and auto extract requestID and message var consoleLog = consoleFormatRegex.exec(log.message); if (consoleLog !== null) { lastRequestID = consoleLog[1]; log.message = log.message.substring(consoleLog[0].length); } - + // Auto detect if message is json try { log.message = JSON.parse(log.message); @@ -186,30 +186,30 @@ exports.handler = function (event, context) { // Do nothing, leave as text log.message.trim(); } - + // delete id as it's not very useful delete log.id; - + if (includeLogInfo) { log.logStream = awslogsData.logStream; log.logGroup = awslogsData.logGroup; } - + if (lastRequestID) { log.requestID = lastRequestID; } - + var metadataKey = sumoMetaKey(awslogsData, log.message); - + if (metadataKey in messageList) { messageList[metadataKey].push(log); } else { messageList[metadataKey] = [log]; } }); - + // Push messages to Sumo postToSumo(context, messageList); - + }); };