summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/it_jaros/jscanner/ProgressBar.java21
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scan.java7
2 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/ProgressBar.java b/src/main/java/com/it_jaros/jscanner/ProgressBar.java
index 03c8ddc..ad953a3 100644
--- a/src/main/java/com/it_jaros/jscanner/ProgressBar.java
+++ b/src/main/java/com/it_jaros/jscanner/ProgressBar.java
@@ -141,14 +141,31 @@ public class ProgressBar {
}
private void printStats() {
+ long duration = scan.getDurationMillis();
+ String durationStr = formatDuration(duration);
+
System.out.println("\n--------------------");
System.out.println("Stats:");
System.out.println("Total hosts scanned: " + scan.getHostTotalCounter().max());
+ System.out.println("Duration: " + durationStr);
System.out.println("Peak concurrent connects: " + scan.getSocketCounter().max());
System.out.println("Peak concurrent threads: " + scan.getThreadCounter().max());
System.out.println("--------------------\n");
}
+ private static String formatDuration(long millis) {
+ if (millis < 0) return "";
+ long seconds = millis / 1000 % 60;
+ long minutes = millis / 60000 % 60;
+ long hours = millis / 3600000 % 24;
+ long days = millis / 86400000;
+
+ if (days > 0) return String.format("%dd %dh:%dm:%ds", days, hours, minutes, seconds);
+ if (hours > 0) return String.format("%dh:%dm:%ds", hours, minutes, seconds);
+ if (minutes > 0) return String.format("%dm:%ds", minutes, seconds);
+ return String.format("%ds", seconds);
+ }
+
private void printStatusLine(final Scan scan) {
this.printStatusLine(scan.getHostCounter(), scan.getHostTotalCounter(), scan.getSocketCounter(), scan.getThreadCounter());
}
@@ -157,15 +174,17 @@ public class ProgressBar {
Counter hostCounter, Counter hostTotalCounter, Counter
socketCounter, Counter
threadCounter) {
+ long duration = scan.getDurationMillis();
int total = hostTotalCounter.current();
int running = hostCounter.current();
int done = total - running;
long percent = total == 0 ? 100 : done * 100L / total;
String line = String.format(
- "hosts: %d running, %d done | sockets: %d active, %d peak | workers: %d active, %d peak",
+ "hosts: %d running, %d done | %s | sockets: %d active, %d peak | workers: %d active, %d peak",
running,
done,
+ formatDuration(duration),
socketCounter.current(),
socketCounter.max(),
threadCounter.current(),
diff --git a/src/main/java/com/it_jaros/jscanner/Scan.java b/src/main/java/com/it_jaros/jscanner/Scan.java
index 985da27..391cadd 100644
--- a/src/main/java/com/it_jaros/jscanner/Scan.java
+++ b/src/main/java/com/it_jaros/jscanner/Scan.java
@@ -19,8 +19,8 @@ public class Scan {
private final Counter hostTotalCounter;
private final Counter socketCounter;
private final Counter threadCounter;
- private long start;
- private long stop;
+ private long start = 0;
+ private long stop = 0;
private Scan(Stream<String> hosts, String ports) {
this(hosts, ports, () -> {});
@@ -115,6 +115,9 @@ public class Scan {
}
public long getDurationMillis() {
+ if (stop == 0) {
+ return System.currentTimeMillis() - start;
+ }
return stop - start;
}
}