diff options
| author | 2026-08-03 10:47:48 +0200 | |
|---|---|---|
| committer | 2026-08-03 10:48:23 +0200 | |
| commit | e908b8dd55b36f3fd855ce955d05d9a0b56fd5b0 (patch) | |
| tree | 6236c33de556050f2dfe3935bed18ccd9ff524ef | |
| parent | e15290e5c28581320ab66839a5c98655e66035f7 (diff) | |
Added stopwatch for scan status line and stats
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/ProgressBar.java | 21 | ||||
| -rw-r--r-- | src/main/java/com/it_jaros/jscanner/Scan.java | 7 |
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; } } |
