improved auto-connect-handling for boot processes started via the boot dashboard

This commit is contained in:
Martin Lippert
2019-10-01 19:03:08 +02:00
parent e9918a7f18
commit 9a3bebd775
4 changed files with 19 additions and 8 deletions

View File

@@ -67,7 +67,7 @@ public class SpringProcessCommandHandler {
if (processKey != null) {
// try local processes
SpringProcessDescriptor[] processes = localProcessConnector.getProcesses(false, SpringProcessStatus.REGULAR);
SpringProcessDescriptor[] processes = localProcessConnector.getProcesses(false, SpringProcessStatus.REGULAR, SpringProcessStatus.AUTO_CONNECT);
for (SpringProcessDescriptor process : processes) {
if (process.getProcessKey().equals(processKey)) {
localProcessConnector.connectProcess(process);
@@ -134,7 +134,7 @@ public class SpringProcessCommandHandler {
}
// other available local processes
SpringProcessDescriptor[] localProcesses = localProcessConnector.getProcesses(true, SpringProcessStatus.REGULAR);
SpringProcessDescriptor[] localProcesses = localProcessConnector.getProcesses(true, SpringProcessStatus.REGULAR, SpringProcessStatus.AUTO_CONNECT);
for (SpringProcessDescriptor localProcess : localProcesses) {
String processKey = localProcess.getProcessKey();
if (!alreadyConnected.contains(processKey)) {

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.boot.java.livehover.v2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -107,7 +108,7 @@ public class SpringProcessConnectorLocal {
return this.processes.stream().anyMatch(process -> processKey.equals(process.getProcessKey()));
}
public SpringProcessDescriptor[] getProcesses(boolean update, SpringProcessStatus status) {
public SpringProcessDescriptor[] getProcesses(boolean update, SpringProcessStatus... status) {
if (update) {
SpringProcessDescriptor[] newProcesses = updateProcesses();
if (newProcesses.length > 0) {
@@ -115,8 +116,9 @@ public class SpringProcessConnectorLocal {
}
}
if (status != null) {
return processes.stream().filter((process) -> status.equals(process.getStatus())).toArray(SpringProcessDescriptor[]::new);
if (status != null && status.length > 0) {
List<SpringProcessStatus> statusList = Arrays.asList(status);
return processes.stream().filter((process) -> statusList.contains(process.getStatus())).toArray(SpringProcessDescriptor[]::new);
}
else {
return (SpringProcessDescriptor[]) processes.toArray(new SpringProcessDescriptor[processes.size()]);
@@ -266,6 +268,10 @@ public class SpringProcessConnectorLocal {
}
}
}
public boolean isConnected(String processKey) {
return this.processConnectorService.isConnected(processKey);
}
private boolean shouldIgnore(VirtualMachineDescriptor vmDescriptor, VirtualMachine vm) {
try {

View File

@@ -92,6 +92,10 @@ public class SpringProcessConnectorService {
return (SpringProcessConnector[]) this.connectors.values().stream()
.filter((connector) -> connectedSuccess.get(connector.getProcessKey())).toArray(SpringProcessConnector[]::new);
}
public boolean isConnected(String processKey) {
return this.connectors.containsKey(processKey);
}
/**
* common method to generate process keys from process IDs and process names

View File

@@ -93,9 +93,10 @@ public class SpringProcessTracker {
SpringProcessDescriptor[] autoConnectProcesses = this.localProcessConnector.getProcesses(true, SpringProcessStatus.AUTO_CONNECT);
for (SpringProcessDescriptor process : autoConnectProcesses) {
log.info("auto-connect to process: " + process.getProcessKey());
this.localProcessConnector.connectProcess(process);
if (!this.localProcessConnector.isConnected(process.getProcessKey())) {
log.info("auto-connect to process: " + process.getProcessKey());
this.localProcessConnector.connectProcess(process);
}
}
}
catch (Throwable e) {