-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebhookParser.js
More file actions
95 lines (78 loc) · 2.58 KB
/
webhookParser.js
File metadata and controls
95 lines (78 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"use strict";
var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var WebhookParser = (function () {
function WebhookParser(fileName) {
this.fileName = fileName;
this.fileParsed = null;
this.status = null;
}
WebhookParser.setStatus = function(status) {
this.status = status;
};
WebhookParser.getStatus = function() {
return this.status;
};
WebhookParser.seFileParsed = function(fileParsed) {
this.fileParsed = fileParsed;
};
function parse(fileName, callback) {
var data = [];
var instream = fs.createReadStream(fileName);
var outstream = new stream;
var readLine = readline.createInterface(instream, outstream);
var status = {};
readLine.on('line', function (line) {
var lineObject = line.split(" ");
var url = lineObject[2].replace(/request_to|=|"/g, '');
var statusString = lineObject[lineObject.length - 1].replace(/response_status|=|"/g, '');
status = parseStatus(statusString.trim(), status);
if (data[url]) {
data[url] += 1;
} else {
data[url] = 1;
}
}).on('close', function () {
WebhookParser.setStatus(status);
WebhookParser.seFileParsed(data);
callback(data);
});
};
function parseStatus(status, arrayStatus) {
if (arrayStatus[status]) {
arrayStatus[status] += 1;
} else {
arrayStatus[status] = 1;
}
return arrayStatus;
};
WebhookParser.prototype.getTopUrl = function (top, callback) {
parse(this.fileName, function(result) {
var topUrl = [];
var keys = Object.keys(result),
i, len = keys.length;
keys.sort(function(a,b){return result[b]-result[a]});
if (top > len) {
top = len;
}
for (var i = 0;i<top;i++) {
var url = [];
url[keys[i]] = result[keys[i]];
topUrl.push(url);
}
callback(topUrl);
});
};
WebhookParser.prototype.getStatusTable = function (callback) {
if (!this.fileParsed) {
parse(this.fileName, function() {
callback(WebhookParser.getStatus());
});
return;
}
callback(WebhookParser.getStatus());
};
return WebhookParser;
})();
module.exports = WebhookParser;