package glug.parser;
import com.madgag.interval.Interval;
import com.madgag.interval.SimpleInterval;
import glug.model.SignificantInterval;
import glug.model.time.LogInstant;
import glug.model.time.LogInterval;
import java.io.IOException;
import static com.madgag.interval.SimpleInterval.union;
public class LogLoader {
private LogParsingReader reader;
private LogReadingThrottle throttle = new LogReadingThrottle();
public LogLoader(LogParsingReader reader) {
this.reader = reader;
}
public LoadReport loadLines(int numLines) throws IOException {
Interval<LogInstant> intervalUpdated = null;
//int numLinesRead=0,numEventsFound=0;
//while (!throttle.shouldReportGiven(numLinesRead,numEventsFound) && !reader.endOfStream() ) {
for (int numLinesRead=0;numLinesRead<numLines && !reader.endOfStream();++numLinesRead) {
try {
SignificantInterval significantInterval = reader.parseNext();
if (significantInterval!=null) {
intervalUpdated = union(intervalUpdated, significantInterval.getLogInterval()); // Don't update all the interval of JVM uptime!
}
} catch (Throwable e) {
e.printStackTrace();
}
}
return new LoadReport( reader.endOfStream(), intervalUpdated);
}
public static class LoadReport {
private final boolean endOfStream;
private final Interval<LogInstant> intervalUpdated;
public LoadReport(boolean endOfStream, Interval<LogInstant> intervalUpdated) {
this.endOfStream = endOfStream;
this.intervalUpdated = intervalUpdated;
}
public Interval<LogInstant> getUpdatedInterval() {
return intervalUpdated;
}
public boolean endOfStreamReached() {
return endOfStream;
}
@Override
public String toString() {
String eos = endOfStream?" EOS":"";
return getClass().getSimpleName()+"[updated="+intervalUpdated+eos+"]";
}
}
}