diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/Message.java b/common/src/main/java/org/mvndaemon/mvnd/common/Message.java index 48b2bce2..09d96342 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/Message.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/Message.java @@ -787,7 +787,7 @@ public abstract class Message { public static final int PUT = 2; final String projectId; - final int request; + final int requestType; final String repositoryId; final String repositoryUrl; final String resourceName; @@ -795,13 +795,13 @@ public abstract class Message { final long transferredBytes; final String exception; - private TransferEvent(int type, String projectId, int request, + private TransferEvent(int type, String projectId, int requestType, String repositoryId, String repositoryUrl, String resourceName, long contentLength, long transferredBytes, String exception) { super(type); this.projectId = projectId; - this.request = request; + this.requestType = requestType; this.repositoryId = repositoryId; this.repositoryUrl = repositoryUrl; this.resourceName = resourceName; @@ -814,8 +814,8 @@ public abstract class Message { return projectId; } - public int getRequest() { - return request; + public int getRequestType() { + return requestType; } public String getRepositoryId() { @@ -846,7 +846,7 @@ public abstract class Message { public String toString() { return mnemonic() + "{" + "projectId=" + projectId + - ", request=" + request + + ", requestType=" + requestType + ", repositoryId='" + repositoryId + '\'' + ", repositoryUrl='" + repositoryUrl + '\'' + ", resourceName='" + resourceName + '\'' + @@ -879,7 +879,7 @@ public abstract class Message { public void write(DataOutputStream output) throws IOException { super.write(output); writeUTF(output, projectId); - output.writeByte(request); + output.writeByte(requestType); writeUTF(output, repositoryId); writeUTF(output, repositoryUrl); writeUTF(output, resourceName); @@ -943,11 +943,11 @@ public abstract class Message { return new ProjectEvent(Message.DISPLAY, projectId, message); } - public static TransferEvent transfer(String projectId, int event, int request, + public static TransferEvent transfer(String projectId, int transferEventType, int requestType, String repositoryId, String repositoryUrl, String resourceName, long contentLength, long transferredBytes, String exception) { - return new TransferEvent(event, projectId, request, + return new TransferEvent(transferEventType, projectId, requestType, repositoryId, repositoryUrl, resourceName, contentLength, transferredBytes, exception); } diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/OsUtils.java b/common/src/main/java/org/mvndaemon/mvnd/common/OsUtils.java index c42cdb13..369ba901 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/OsUtils.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/OsUtils.java @@ -33,14 +33,24 @@ public class OsUtils { private static final Logger LOGGER = LoggerFactory.getLogger(OsUtils.class); private static final long KB = 1024; - private static final String UNITS = "kmgt"; + private static final String UNITS = "Bkmgt"; private OsUtils() { } - public static String kbTohumanReadable(long kb) { + public static String bytesTohumanReadable(long bytes) { int unit = 0; + while (bytes >= KB && unit < UNITS.length() - 1) { + bytes /= KB; + unit++; + } + String kbString = String.valueOf(bytes); + return new StringBuilder(kbString.length() + 1).append(kbString).append(UNITS.charAt(unit)).toString(); + } + + public static String kbTohumanReadable(long kb) { + int unit = 1; while (kb >= KB && unit < UNITS.length() - 1) { kb /= KB; unit++; diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java index e5e913f8..02520988 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalOutput.java @@ -531,25 +531,26 @@ public class TerminalOutput implements ClientOutput { return null; } TransferEvent event = transfers.iterator().next(); - String action = event.getRequest() == TransferEvent.PUT ? "Uploading" : "Downloading"; + String action = event.getRequestType() == TransferEvent.PUT ? "Uploading" : "Downloading"; if (transfers.size() == 1) { - String direction = event.getRequest() == TransferEvent.PUT ? "to" : "from"; + String direction = event.getRequestType() == TransferEvent.PUT ? "to" : "from"; long cur = event.getTransferredBytes(); long max = event.getContentLength(); - String prg = OsUtils.kbTohumanReadable(cur / 1024) + " / " + OsUtils.kbTohumanReadable(max / 1024); AttributedStringBuilder asb = new AttributedStringBuilder(); asb.append(action); - asb.append(" "); + asb.append(' '); asb.style(AttributedStyle.BOLD); asb.append(pathToMaven(event.getResourceName())); asb.style(AttributedStyle.DEFAULT); - asb.append(" "); + asb.append(' '); asb.append(direction); - asb.append(" "); + asb.append(' '); asb.append(event.getRepositoryId()); if (cur > 0 && cur < max) { - asb.append(": "); - asb.append(prg); + asb.append(' '); + asb.append(OsUtils.bytesTohumanReadable(cur)); + asb.append('/'); + asb.append(OsUtils.bytesTohumanReadable(max)); } return asb.toAttributedString(); } else { diff --git a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCli.java b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCli.java index 0dc9cc26..bc308218 100644 --- a/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCli.java +++ b/daemon/src/main/java/org/apache/maven/cli/DaemonMavenCli.java @@ -1302,14 +1302,14 @@ public class DaemonMavenCli { // If we're logging to a file then we don't want the console transfer listener as it will spew // download progress all over the place // - return getDaemonTransferListener(); + return getConsoleTransferListener(); } else { return getBatchTransferListener(); } } - protected TransferListener getDaemonTransferListener() { - return new DaemonMavenTransferListener(buildEventListener); + protected TransferListener getConsoleTransferListener() { + return new DaemonMavenTransferListener(buildEventListener, new Slf4jMavenTransferListener()); } protected TransferListener getBatchTransferListener() { diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/daemon/ClientDispatcher.java b/daemon/src/main/java/org/mvndaemon/mvnd/daemon/ClientDispatcher.java index 672f0baa..ecdc10e5 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/daemon/ClientDispatcher.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/daemon/ClientDispatcher.java @@ -26,6 +26,8 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; import org.eclipse.aether.transfer.TransferEvent; +import org.eclipse.aether.transfer.TransferEvent.EventType; +import org.eclipse.aether.transfer.TransferEvent.RequestType; import org.mvndaemon.mvnd.builder.DependencyGraph; import org.mvndaemon.mvnd.common.Message; import org.mvndaemon.mvnd.common.Message.BuildException; @@ -114,37 +116,50 @@ public class ClientDispatcher extends BuildEventListener { } public void transfer(String projectId, TransferEvent e) { - int event; + final int event; switch (e.getType()) { - case INITIATED: - event = Message.TRANSFER_INITIATED; - break; - case STARTED: - event = Message.TRANSFER_STARTED; - break; - case PROGRESSED: - event = Message.TRANSFER_PROGRESSED; - break; - case CORRUPTED: - event = Message.TRANSFER_CORRUPTED; - break; - case SUCCEEDED: - event = Message.TRANSFER_SUCCEEDED; - break; - case FAILED: - event = Message.TRANSFER_FAILED; - break; - default: - throw new IllegalStateException(); + case INITIATED: + event = Message.TRANSFER_INITIATED; + break; + case STARTED: + event = Message.TRANSFER_STARTED; + break; + case PROGRESSED: + event = Message.TRANSFER_PROGRESSED; + break; + case CORRUPTED: + event = Message.TRANSFER_CORRUPTED; + break; + case SUCCEEDED: + event = Message.TRANSFER_SUCCEEDED; + break; + case FAILED: + event = Message.TRANSFER_FAILED; + break; + default: + throw new IllegalStateException("Unexpected " + EventType.class.getSimpleName() + ": " + e.getType()); + } + final int requestType; + switch (e.getRequestType()) { + case GET: + requestType = Message.TransferEvent.GET; + break; + case GET_EXISTENCE: + requestType = Message.TransferEvent.GET_EXISTENCE; + break; + case PUT: + requestType = Message.TransferEvent.PUT; + break; + default: + throw new IllegalStateException("Unexpected " + RequestType.class.getSimpleName() + ": " + e.getRequestType()); } - int request = e.getRequestType().ordinal(); String repositoryId = e.getResource().getRepositoryId(); String repositoryUrl = e.getResource().getRepositoryUrl(); String resourceName = e.getResource().getResourceName(); long contentLength = e.getResource().getContentLength(); long transferredBytes = e.getTransferredBytes(); String exception = e.getException() != null ? e.getException().toString() : null; - queue.add(Message.transfer(projectId, event, request, repositoryId, repositoryUrl, resourceName, + queue.add(Message.transfer(projectId, event, requestType, repositoryId, repositoryUrl, resourceName, contentLength, transferredBytes, exception)); } diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/transfer/DaemonMavenTransferListener.java b/daemon/src/main/java/org/mvndaemon/mvnd/transfer/DaemonMavenTransferListener.java index b61c4c3a..5c8b055c 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/transfer/DaemonMavenTransferListener.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/transfer/DaemonMavenTransferListener.java @@ -24,38 +24,46 @@ import org.mvndaemon.mvnd.logging.smart.ProjectBuildLogAppender; public class DaemonMavenTransferListener implements TransferListener { private final BuildEventListener dispatcher; + private final TransferListener delegate; - public DaemonMavenTransferListener(BuildEventListener dispatcher) { + public DaemonMavenTransferListener(BuildEventListener dispatcher, TransferListener delegate) { this.dispatcher = dispatcher; + this.delegate = delegate; } @Override public void transferInitiated(TransferEvent event) throws TransferCancelledException { dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); + delegate.transferInitiated(event); } @Override public void transferStarted(TransferEvent event) throws TransferCancelledException { dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); + delegate.transferStarted(event); } @Override public void transferProgressed(TransferEvent event) throws TransferCancelledException { dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); + delegate.transferProgressed(event); } @Override public void transferCorrupted(TransferEvent event) throws TransferCancelledException { dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); + delegate.transferCorrupted(event); } @Override public void transferSucceeded(TransferEvent event) { dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); + delegate.transferSucceeded(event); } @Override public void transferFailed(TransferEvent event) { dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); + delegate.transferFailed(event); } }