Skip to content

Commit ade3610

Browse files
committed
Merge pull request #7 from dgarlitt/iterate-over-log-events
Iterate over log events & post them individually
2 parents 4ae5baa + 524772f commit ade3610

File tree

1 file changed

+43
-26
lines changed

1 file changed

+43
-26
lines changed
Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
var https = require('https');
32
var zlib = require('zlib');
43

@@ -7,16 +6,17 @@ exports.handler = function(event, context) {
76
// Remember to change the hostname and path to match your collection API and specific HTTP-source endpoint
87
// See more at: https://service.sumologic.com/help/Default.htm#Collector_Management_API.htm
98
///////////////////////////////////////////////////////////////////////////////////////////////////////////
10-
var options = { 'hostname': 'collectors.sumologic.com',
11-
'path': 'https://collectors.sumologic.com/receiver/v1/http/<XXX>',
12-
'method': 'POST'
13-
};
9+
var options = {
10+
'hostname': 'collectors.sumologic.com',
11+
'path': 'https://collectors.sumologic.com/receiver/v1/http/<XXX>',
12+
'method': 'POST'
13+
};
1414
var zippedInput = new Buffer(event.awslogs.data, 'base64');
1515

1616
zlib.gunzip(zippedInput, function(e, buffer) {
1717
if (e) { context.fail(e); }
1818

19-
awslogsData = JSON.parse(buffer.toString('ascii'));
19+
var awslogsData = JSON.parse(buffer.toString('ascii'));
2020

2121
console.log(awslogsData);
2222

@@ -25,31 +25,48 @@ exports.handler = function(event, context) {
2525
context.succeed("Success");
2626
}
2727

28-
var req = https.request(options, function(res) {
29-
var body = '';
30-
console.log('Status:', res.statusCode);
31-
res.setEncoding('utf8');
32-
res.on('data', function(chunk) { body += chunk; });
33-
res.on('end', function() {
34-
console.log('Successfully processed HTTPS response');
35-
context.succeed(); });
36-
});
37-
38-
req.on('error', context.fail);
28+
var requestsSent = 0;
29+
var requestsFailed = 0;
30+
var finalizeContext = function() {
31+
var tot = requestsSent + requestsFailed;
32+
if (tot == awslogsData.logEvents.length) {
33+
if (requestsFailed > 0) {
34+
context.fail(requestsFailed + " / " + tot + " events failed");
35+
} else {
36+
context.succeed(requestsSent + " requests sent");
37+
}
38+
}
39+
};
3940

40-
stream=awslogsData.logStream;
41-
group=awslogsData.logGroup;
42-
43-
curRequestID = null;
4441
var re = new RegExp(/RequestId: (\S+) /);
4542
awslogsData.logEvents.forEach(function(val, idx, arr) {
43+
var req = https.request(options, function(res) {
44+
var body = '';
45+
console.log('Status:', res.statusCode);
46+
res.setEncoding('utf8');
47+
res.on('data', function(chunk) { body += chunk; });
48+
res.on('end', function() {
49+
console.log('Successfully processed HTTPS response');
50+
requestsSent++;
51+
finalizeContext();
52+
});
53+
});
54+
55+
req.on('error', function(e) {
56+
console.log(e.message)
57+
requestsFailed++;
58+
finalizeContext();
59+
});
60+
61+
var stream=awslogsData.logStream;
62+
var group=awslogsData.logGroup;
63+
var rs = re.exec(val.message);
64+
65+
val.requestID = (rs!==null) ? rs[1] : null;
4666
val.logStream = stream;
4767
val.logGroup = group;
48-
var rs = re.exec(val.message);
49-
if (rs!==null) { curRequestID = rs[1]; }
50-
val.requestID = curRequestID;
51-
req.write(JSON.stringify(val) + '\n');
68+
req.end(JSON.stringify(val));
5269
});
53-
req.end();
70+
5471
});
5572
};

0 commit comments

Comments
 (0)