This repository was archived by the owner on Jul 6, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogs.js
More file actions
68 lines (54 loc) · 2.15 KB
/
Copy pathLogs.js
File metadata and controls
68 lines (54 loc) · 2.15 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
var fs = require('fs')
, path = require('path')
, tail = require('file-tail')
function pollLogs() {
if (!Data.state.poll.logs) return;
var log_dir = (/^win/.test(process.platform)) ? Data.state.datasources.logs.path.win : Data.state.datasources.logs.path.darwin;
var channels = [];
for (var channel in Data.state.datasources.logs.channels) {
if (Data.state.datasources.logs.channels[channel]) channels.push(channel);
}
if (!channels.length) {
log('No logs to parse');
var renderedEvent = $(Templates.event({'time': Util.getTime(), type: 'error', text: 'No logs to parse. Have you joined an intel channel today?' }));
Data.ui.logs_list.prepend(renderedEvent);
return;
}
var filename_match = '(' + channels.join('|') + ')_';
filename_match += moment().utc().format('YYYYMMDD');
filename_match += '_\\d+.txt';
fs.readdir(log_dir, function(err, list) {
if (err) {
var renderedEvent = $(Templates.event({'time': Util.getTime(), type: 'error', text: 'Unable to poll logs: ' + err }));
Data.ui.logs_list.prepend(renderedEvent);
return;
}
var regex = new RegExp(filename_match);
list.forEach( function(file) {
if (regex.test(file)) {
var renderedEvent = $(Templates.event({'time': Util.getTime(), text: 'Watching ' + file }));
Data.ui.logs_list.prepend(renderedEvent);
t = new tail.startTailing(path.join(log_dir, file));
t.on('line', function(line) {
if (line.length === 1) return;
processLine(line, function(event) {
if (!event) return;
var renderedEvent = $(Templates.report(event.data));
Data.ui.logs_list.prepend(renderedEvent);
Data.state.datasources.local.getClient().publish('/events', event);
});
});
Data.state.datasources.logs.handles.push( t );
}
});
});
}
function resetLogPolling() {
log('Clearing log handles...');
while (Data.state.datasources.logs.handles.length) {
var handle = Data.state.datasources.logs.handles.pop();
handle.stop();
delete handle;
}
pollLogs();
}