Warning: session_start(): open(/var/lib/php/sessions/sess_392s6u1ghp1k0lpk1d71saqke1, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass TailFile implements AutoCloseable {
File file;
int interval;
O onData;
long l;
gettable long currentFileSize;
new Flag stopped;
java.util.Timer timer;
ReliableSingleThread thread;
volatile bool hasIdled, debug;
*() {}
*(final File *file, int *interval, O *onData) {
thread = new ReliableSingleThread(r { update() });
}
void update {
long l2 = currentFileSize = l(file);
if (l2 < l) l = 0; // file shrunk (log rotated!) - start over from beginning of file
if (l2 == l) hasIdled = true;
else pcall {
if (debug) print("New data in " + f2s(file) + ": " + n2(l2-l, "byte"));
for (S s : loadTextFilePart_iterator(file, l, l2))
pcallF(onData, s);
l = l2;
}
}
void start {
timer = doEvery(interval, r {
if (!stopped.isUp()) thread.trigger()
});
}
void stop {
timer.cancel();
timer = null;
if (stopped.raise())
thread.triggerAndWait(); // One last time baby
}
public void close { stop(); }
bool started() {
ret timer != null;
}
void debugOn {
if (debug) ret;
debug = true;
print("Watching file: " + f2s(file));
}
toString { ret "Tailing file " + file; }
}