jumpserver/websocket/node_modules/tail/tail.js

148 lines
4.1 KiB
JavaScript

// Generated by CoffeeScript 1.6.2
var Tail, environment, events, fs,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
events = require("events");
fs = require('fs');
environment = process.env['NODE_ENV'] || 'development';
Tail = (function(_super) {
__extends(Tail, _super);
Tail.prototype.readBlock = function() {
var block, stream,
_this = this;
if (this.queue.length >= 1) {
block = this.queue.shift();
if (block.end > block.start) {
stream = fs.createReadStream(this.filename, {
start: block.start,
end: block.end - 1,
encoding: "utf-8"
});
stream.on('error', function(error) {
console.log("Tail error:" + error);
return _this.emit('error', error);
});
stream.on('end', function() {
if (_this.queue.length >= 1) {
return _this.internalDispatcher.emit("next");
}
});
return stream.on('data', function(data) {
var chunk, parts, _i, _len, _results;
_this.buffer += data;
parts = _this.buffer.split(_this.separator);
_this.buffer = parts.pop();
_results = [];
for (_i = 0, _len = parts.length; _i < _len; _i++) {
chunk = parts[_i];
_results.push(_this.emit("line", chunk));
}
return _results;
});
}
}
};
function Tail(filename, separator, fsWatchOptions, frombeginning) {
var stats,
_this = this;
this.filename = filename;
this.separator = separator != null ? separator : '\n';
this.fsWatchOptions = fsWatchOptions != null ? fsWatchOptions : {};
this.frombeginning = frombeginning != null ? frombeginning : false;
this.readBlock = __bind(this.readBlock, this);
this.buffer = '';
this.internalDispatcher = new events.EventEmitter();
this.queue = [];
this.isWatching = false;
stats = fs.statSync(this.filename);
this.internalDispatcher.on('next', function() {
return _this.readBlock();
});
this.pos = this.frombeginning ? 0 : stats.size;
this.watch();
}
Tail.prototype.watch = function() {
var _this = this;
if (this.isWatching) {
return;
}
this.isWatching = true;
if (fs.watch) {
return this.watcher = fs.watch(this.filename, this.fsWatchOptions, function(e) {
return _this.watchEvent(e);
});
} else {
return fs.watchFile(this.filename, this.fsWatchOptions, function(curr, prev) {
return _this.watchFileEvent(curr, prev);
});
}
};
Tail.prototype.watchEvent = function(e) {
var stats,
_this = this;
if (e === 'change') {
stats = fs.statSync(this.filename);
if (stats.size < this.pos) {
this.pos = stats.size;
}
if (stats.size > this.pos) {
this.queue.push({
start: this.pos,
end: stats.size
});
this.pos = stats.size;
if (this.queue.length === 1) {
return this.internalDispatcher.emit("next");
}
}
} else if (e === 'rename') {
this.unwatch();
return setTimeout((function() {
return _this.watch();
}), 1000);
}
};
Tail.prototype.watchFileEvent = function(curr, prev) {
if (curr.size > prev.size) {
this.queue.push({
start: prev.size,
end: curr.size
});
if (this.queue.length === 1) {
return this.internalDispatcher.emit("next");
}
}
};
Tail.prototype.unwatch = function() {
if (fs.watch && this.watcher) {
this.watcher.close();
this.pos = 0;
} else {
fs.unwatchFile(this.filename);
}
this.isWatching = false;
return this.queue = [];
};
return Tail;
})(events.EventEmitter);
exports.Tail = Tail;