Progress bar: show expected finish time (and date)
- Display 'done ~HH:mm' for same-day completion
- Display 'done ~DOW MM-dd HH:mm' when finish is on a future day
- Increase render interval from 100ms to 1000ms
- Also fixes left-over characters at bnthe line end
Change-Id: I7d79de3017aa22d5dfb27685d3141e8b1764b194
diff --git a/src/main/java/de/ids_mannheim/korap/index/Indexer.java b/src/main/java/de/ids_mannheim/korap/index/Indexer.java
index 952b120..50aa5e1 100644
--- a/src/main/java/de/ids_mannheim/korap/index/Indexer.java
+++ b/src/main/java/de/ids_mannheim/korap/index/Indexer.java
@@ -9,6 +9,8 @@
import java.util.Enumeration;
import java.util.Properties;
import java.util.Locale;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
@@ -746,7 +748,7 @@
while (running && !finished) {
render();
try {
- Thread.sleep(100);
+ Thread.sleep(1000);
}
catch (InterruptedException e) {
// ignore
@@ -774,7 +776,7 @@
double elapsedSec = (now - startTimeMs) / 1000.0;
double rateMBs = elapsedSec > 0 ? current / 1_000_000.0 / elapsedSec : 0.0;
String rateStr = rateMBs > 0 ? String.format(Locale.US, "%.2f MB/s", rateMBs) : "NA";
- String line = String.format(Locale.US, "\r[%s] %.1f MB processed | %s | ETA calculating...", bar, current / 1_000_000.0, rateStr);
+ String line = String.format(Locale.US, "\r[%s] %.1f MB processed | %s | ETA calculating...\033[K", bar, current / 1_000_000.0, rateStr);
System.err.print(line);
return;
}
@@ -791,13 +793,27 @@
double rateBytesPerSec = elapsedSec > 0 ? current / elapsedSec : 0.0;
long etaSec = (rateBytesPerSec > 0 && total > current) ? (long) Math.ceil((total - current) / rateBytesPerSec) : 0;
- String etaStr = (rateBytesPerSec > 0) ? Indexer.formatDuration(etaSec) : "NA";
+ String etaStr;
+ String finishAt;
+ if (rateBytesPerSec > 0) {
+ etaStr = Indexer.formatDuration(etaSec);
+ LocalDateTime now2 = LocalDateTime.now();
+ LocalDateTime finishTime = now2.plusSeconds(etaSec);
+ if (finishTime.toLocalDate().equals(now2.toLocalDate())) {
+ finishAt = finishTime.format(DateTimeFormatter.ofPattern("HH:mm"));
+ } else {
+ finishAt = finishTime.format(DateTimeFormatter.ofPattern("EEE MM-dd HH:mm", Locale.US));
+ }
+ } else {
+ etaStr = "NA";
+ finishAt = "?";
+ }
String pctStr = String.format(Locale.US, "%5.1f%%", percent * 100.0);
String rateStr = String.format(Locale.US, "%.2f MB/s", rateBytesPerSec / 1_000_000.0);
double processedMB = current / 1_000_000.0;
double totalMB = total / 1_000_000.0;
- String line = String.format(Locale.US, "\r[%s] %s %.1f/%.1f MB | %s | ETA %s", bar, pctStr, processedMB, totalMB, rateStr, etaStr);
+ String line = String.format(Locale.US, "\r[%s] %s %.1f/%.1f MB | %s | ETA %s (done ~%s)\033[K", bar, pctStr, processedMB, totalMB, rateStr, etaStr, finishAt);
System.err.print(line);
}
}