123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // 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;
|