-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtail.js
More file actions
52 lines (45 loc) · 1.43 KB
/
tail.js
File metadata and controls
52 lines (45 loc) · 1.43 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
var fs = require('fs');
var read_buffer = Buffer(4096);
function read_last_n_lines(filename, n, callback) {
fs.readFile(filename, "utf-8", (err, data) => {
if (err) {
callback(err);
return;
}
var content = data.split("\n");
var last_lines = content;
if (content.length >= n) {
var content_start = content.length - n;
last_lines = content.slice(content_start-1);
}
callback(null, last_lines.join("\n"));
})
}
function tail(filename, n, callback) {
read_last_n_lines(filename, n, (err, data) => {
if (err) {
callback(err, null);
}
callback(null, data);
});
fs.open(filename, 'r', function (err, fd) {
if (err) {
callback(err, null);
}
fs.watchFile(filename, function(curr, prev) {
var changed_content_len = curr.size - prev.size;
var position_changed = changed_content_len > 0;
var position = prev.size;
if (position_changed) {
fs.read(fd, read_buffer, 0, changed_content_len, position, function(err, bytesRead, buffer) {
if (err) {
callback(err, null);
return;
}
callback(null, buffer.toString("utf-8", 0, bytesRead));
})
}
})
})
}
module.exports = tail;