summaryrefslogtreecommitdiff
path: root/src/main/java/com/it_jaros
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/it_jaros')
-rw-r--r--src/main/java/com/it_jaros/jscanner/ProgressBar.java75
-rw-r--r--src/main/java/com/it_jaros/jscanner/Scan.java3
2 files changed, 53 insertions, 25 deletions
diff --git a/src/main/java/com/it_jaros/jscanner/ProgressBar.java b/src/main/java/com/it_jaros/jscanner/ProgressBar.java
index 6360895..62bb2c1 100644
--- a/src/main/java/com/it_jaros/jscanner/ProgressBar.java
+++ b/src/main/java/com/it_jaros/jscanner/ProgressBar.java
@@ -16,7 +16,6 @@ public class ProgressBar {
private final ScheduledExecutorService ui = Executors.newSingleThreadScheduledExecutor();
private final Scan scan;
private final boolean quiet;
- private final int columnWidth = ProgressBar.getColumnWidth();
private final Object outputLock = new Object();
public ProgressBar(Scan scan, boolean quiet) {
@@ -125,7 +124,7 @@ public class ProgressBar {
System.err.print("Scanning targets...\n\n");
ui.scheduleAtFixedRate(() -> {
synchronized (outputLock) {
- printStatusLine(scan);
+ printStatusLine();
}
}, 1, 1000, TimeUnit.MILLISECONDS);
}
@@ -166,42 +165,68 @@ public class ProgressBar {
return String.format("%ds", seconds);
}
- private void printStatusLine(final Scan scan) {
- this.printStatusLine(scan.getHostCounter(), scan.getHostTotalCounter(), scan.getSocketCounter(), scan.getThreadCounter());
- }
- private void printStatusLine(
- Counter hostCounter, Counter hostTotalCounter, Counter
- socketCounter, Counter
- threadCounter) {
+ private void printStatusLine() {
long duration = scan.getDurationMillis();
- int total = hostTotalCounter.current();
- int running = hostCounter.current();
+ int total = scan.getHostTotalCounter().current();
+ int running = scan.getHostCounter().current();
int done = total - running;
long percent = total == 0 ? 100 : done * 100L / total;
- String line = String.format(
- "hosts: %d running, %d done | %s | sockets: %d active, %d peak | workers: %d active, %d peak",
+ String hostStat = String.format(
+ "hosts: %d running, %d done",
running,
- done,
- formatDuration(duration),
- socketCounter.current(),
- socketCounter.max(),
- threadCounter.current(),
- threadCounter.max()
+ done
+ );
+ String durationStat = String.format(
+ " | %s",
+ formatDuration(duration)
+ );
+ String socketStat = String.format(
+ " | sockets: %d active, %d peak",
+ scan.getSocketCounter().current(),
+ scan.getSocketCounter().max()
+ );
+ String workerStat = String.format(
+ " | workers: %d active, %d peak",
+ scan.getThreadCounter().current(),
+ scan.getThreadCounter().max()
);
- String barFormat = " | [%s] %3d%%";
- int barWidth = Math.max(5, ProgressBar.getColumnWidth() - line.length() - barFormat.length());
- String progressBar = progressBar(percent, barWidth);
- String status = line + String.format(barFormat, progressBar, percent);
- System.err.print("\r" + status);
+ int availableWidth = ProgressBar.getColumnWidth();
+ String statusLine = appendIfEnoughSpace("", availableWidth, hostStat, durationStat, socketStat, workerStat);
+
+ String barFormat = " [%s] %3d%%";
+ int remainingWidth = availableWidth - statusLine.length() - barFormat.length();
+ if (remainingWidth > 0) {
+ String progressBar = String.format(
+ barFormat,
+ progressBar(percent, remainingWidth),
+ percent
+ );
+ statusLine = appendIfEnoughSpace(statusLine, availableWidth, progressBar);
+ }
+ System.err.print("\r" + statusLine);
System.err.flush();
}
+ private String appendIfEnoughSpace(String current, int availableSize, String... additional) {
+ StringBuilder builder = new StringBuilder(current);
+ for (String add : additional) {
+ if ((builder.length() + add.length()) <= availableSize) {
+ builder.append(add);
+ }
+ }
+
+ return builder.toString();
+ }
+
private static String progressBar(long percent, int width) {
- int filled = (int) (percent * width / 100);
+ if (width <= 0) {
+ return "";
+ }
+ int filled = (int) (percent * width / 100);
return "#".repeat(filled) + "-".repeat(width - filled);
}
}
diff --git a/src/main/java/com/it_jaros/jscanner/Scan.java b/src/main/java/com/it_jaros/jscanner/Scan.java
index 391cadd..3bd62bd 100644
--- a/src/main/java/com/it_jaros/jscanner/Scan.java
+++ b/src/main/java/com/it_jaros/jscanner/Scan.java
@@ -116,6 +116,9 @@ public class Scan {
public long getDurationMillis() {
if (stop == 0) {
+ if (start == 0) {
+ return 0;
+ }
return System.currentTimeMillis() - start;
}
return stop - start;