Fixup 28ffaea Send transfer events to the client for better display #284

This commit is contained in:
Peter Palaga
2021-01-08 22:00:56 +01:00
parent 3beb854cc9
commit 3eb9d8d41b
6 changed files with 80 additions and 46 deletions

View File

@@ -787,7 +787,7 @@ public abstract class Message {
public static final int PUT = 2; public static final int PUT = 2;
final String projectId; final String projectId;
final int request; final int requestType;
final String repositoryId; final String repositoryId;
final String repositoryUrl; final String repositoryUrl;
final String resourceName; final String resourceName;
@@ -795,13 +795,13 @@ public abstract class Message {
final long transferredBytes; final long transferredBytes;
final String exception; final String exception;
private TransferEvent(int type, String projectId, int request, private TransferEvent(int type, String projectId, int requestType,
String repositoryId, String repositoryUrl, String repositoryId, String repositoryUrl,
String resourceName, long contentLength, long transferredBytes, String resourceName, long contentLength, long transferredBytes,
String exception) { String exception) {
super(type); super(type);
this.projectId = projectId; this.projectId = projectId;
this.request = request; this.requestType = requestType;
this.repositoryId = repositoryId; this.repositoryId = repositoryId;
this.repositoryUrl = repositoryUrl; this.repositoryUrl = repositoryUrl;
this.resourceName = resourceName; this.resourceName = resourceName;
@@ -814,8 +814,8 @@ public abstract class Message {
return projectId; return projectId;
} }
public int getRequest() { public int getRequestType() {
return request; return requestType;
} }
public String getRepositoryId() { public String getRepositoryId() {
@@ -846,7 +846,7 @@ public abstract class Message {
public String toString() { public String toString() {
return mnemonic() + "{" + return mnemonic() + "{" +
"projectId=" + projectId + "projectId=" + projectId +
", request=" + request + ", requestType=" + requestType +
", repositoryId='" + repositoryId + '\'' + ", repositoryId='" + repositoryId + '\'' +
", repositoryUrl='" + repositoryUrl + '\'' + ", repositoryUrl='" + repositoryUrl + '\'' +
", resourceName='" + resourceName + '\'' + ", resourceName='" + resourceName + '\'' +
@@ -879,7 +879,7 @@ public abstract class Message {
public void write(DataOutputStream output) throws IOException { public void write(DataOutputStream output) throws IOException {
super.write(output); super.write(output);
writeUTF(output, projectId); writeUTF(output, projectId);
output.writeByte(request); output.writeByte(requestType);
writeUTF(output, repositoryId); writeUTF(output, repositoryId);
writeUTF(output, repositoryUrl); writeUTF(output, repositoryUrl);
writeUTF(output, resourceName); writeUTF(output, resourceName);
@@ -943,11 +943,11 @@ public abstract class Message {
return new ProjectEvent(Message.DISPLAY, projectId, 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 repositoryId, String repositoryUrl,
String resourceName, long contentLength, long transferredBytes, String resourceName, long contentLength, long transferredBytes,
String exception) { String exception) {
return new TransferEvent(event, projectId, request, return new TransferEvent(transferEventType, projectId, requestType,
repositoryId, repositoryUrl, resourceName, contentLength, transferredBytes, exception); repositoryId, repositoryUrl, resourceName, contentLength, transferredBytes, exception);
} }

View File

@@ -33,14 +33,24 @@ public class OsUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(OsUtils.class); private static final Logger LOGGER = LoggerFactory.getLogger(OsUtils.class);
private static final long KB = 1024; private static final long KB = 1024;
private static final String UNITS = "kmgt"; private static final String UNITS = "Bkmgt";
private OsUtils() { private OsUtils() {
} }
public static String kbTohumanReadable(long kb) { public static String bytesTohumanReadable(long bytes) {
int unit = 0; 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) { while (kb >= KB && unit < UNITS.length() - 1) {
kb /= KB; kb /= KB;
unit++; unit++;

View File

@@ -531,25 +531,26 @@ public class TerminalOutput implements ClientOutput {
return null; return null;
} }
TransferEvent event = transfers.iterator().next(); 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) { 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 cur = event.getTransferredBytes();
long max = event.getContentLength(); long max = event.getContentLength();
String prg = OsUtils.kbTohumanReadable(cur / 1024) + " / " + OsUtils.kbTohumanReadable(max / 1024);
AttributedStringBuilder asb = new AttributedStringBuilder(); AttributedStringBuilder asb = new AttributedStringBuilder();
asb.append(action); asb.append(action);
asb.append(" "); asb.append(' ');
asb.style(AttributedStyle.BOLD); asb.style(AttributedStyle.BOLD);
asb.append(pathToMaven(event.getResourceName())); asb.append(pathToMaven(event.getResourceName()));
asb.style(AttributedStyle.DEFAULT); asb.style(AttributedStyle.DEFAULT);
asb.append(" "); asb.append(' ');
asb.append(direction); asb.append(direction);
asb.append(" "); asb.append(' ');
asb.append(event.getRepositoryId()); asb.append(event.getRepositoryId());
if (cur > 0 && cur < max) { if (cur > 0 && cur < max) {
asb.append(": "); asb.append(' ');
asb.append(prg); asb.append(OsUtils.bytesTohumanReadable(cur));
asb.append('/');
asb.append(OsUtils.bytesTohumanReadable(max));
} }
return asb.toAttributedString(); return asb.toAttributedString();
} else { } else {

View File

@@ -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 // 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 // download progress all over the place
// //
return getDaemonTransferListener(); return getConsoleTransferListener();
} else { } else {
return getBatchTransferListener(); return getBatchTransferListener();
} }
} }
protected TransferListener getDaemonTransferListener() { protected TransferListener getConsoleTransferListener() {
return new DaemonMavenTransferListener(buildEventListener); return new DaemonMavenTransferListener(buildEventListener, new Slf4jMavenTransferListener());
} }
protected TransferListener getBatchTransferListener() { protected TransferListener getBatchTransferListener() {

View File

@@ -26,6 +26,8 @@ import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecution; import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
import org.eclipse.aether.transfer.TransferEvent; 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.builder.DependencyGraph;
import org.mvndaemon.mvnd.common.Message; import org.mvndaemon.mvnd.common.Message;
import org.mvndaemon.mvnd.common.Message.BuildException; import org.mvndaemon.mvnd.common.Message.BuildException;
@@ -114,7 +116,7 @@ public class ClientDispatcher extends BuildEventListener {
} }
public void transfer(String projectId, TransferEvent e) { public void transfer(String projectId, TransferEvent e) {
int event; final int event;
switch (e.getType()) { switch (e.getType()) {
case INITIATED: case INITIATED:
event = Message.TRANSFER_INITIATED; event = Message.TRANSFER_INITIATED;
@@ -135,16 +137,29 @@ public class ClientDispatcher extends BuildEventListener {
event = Message.TRANSFER_FAILED; event = Message.TRANSFER_FAILED;
break; break;
default: default:
throw new IllegalStateException(); 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 repositoryId = e.getResource().getRepositoryId();
String repositoryUrl = e.getResource().getRepositoryUrl(); String repositoryUrl = e.getResource().getRepositoryUrl();
String resourceName = e.getResource().getResourceName(); String resourceName = e.getResource().getResourceName();
long contentLength = e.getResource().getContentLength(); long contentLength = e.getResource().getContentLength();
long transferredBytes = e.getTransferredBytes(); long transferredBytes = e.getTransferredBytes();
String exception = e.getException() != null ? e.getException().toString() : null; 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)); contentLength, transferredBytes, exception));
} }

View File

@@ -24,38 +24,46 @@ import org.mvndaemon.mvnd.logging.smart.ProjectBuildLogAppender;
public class DaemonMavenTransferListener implements TransferListener { public class DaemonMavenTransferListener implements TransferListener {
private final BuildEventListener dispatcher; private final BuildEventListener dispatcher;
private final TransferListener delegate;
public DaemonMavenTransferListener(BuildEventListener dispatcher) { public DaemonMavenTransferListener(BuildEventListener dispatcher, TransferListener delegate) {
this.dispatcher = dispatcher; this.dispatcher = dispatcher;
this.delegate = delegate;
} }
@Override @Override
public void transferInitiated(TransferEvent event) throws TransferCancelledException { public void transferInitiated(TransferEvent event) throws TransferCancelledException {
dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event);
delegate.transferInitiated(event);
} }
@Override @Override
public void transferStarted(TransferEvent event) throws TransferCancelledException { public void transferStarted(TransferEvent event) throws TransferCancelledException {
dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event);
delegate.transferStarted(event);
} }
@Override @Override
public void transferProgressed(TransferEvent event) throws TransferCancelledException { public void transferProgressed(TransferEvent event) throws TransferCancelledException {
dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event);
delegate.transferProgressed(event);
} }
@Override @Override
public void transferCorrupted(TransferEvent event) throws TransferCancelledException { public void transferCorrupted(TransferEvent event) throws TransferCancelledException {
dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event);
delegate.transferCorrupted(event);
} }
@Override @Override
public void transferSucceeded(TransferEvent event) { public void transferSucceeded(TransferEvent event) {
dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event);
delegate.transferSucceeded(event);
} }
@Override @Override
public void transferFailed(TransferEvent event) { public void transferFailed(TransferEvent event) {
dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event); dispatcher.transfer(ProjectBuildLogAppender.getProjectId(), event);
delegate.transferFailed(event);
} }
} }