use of org.eclipse.linuxtools.docker.core.DockerException in project linuxtools by eclipse.
the class DockerConnection method openTerminal.
private void openTerminal(LogStream pty_stream, String name, DockerConsoleOutputStream out) throws DockerException {
try {
OutputStream tout = noBlockingOutputStream(HttpHijackWorkaround.getOutputStream(pty_stream, getUri()));
InputStream tin = HttpHijackWorkaround.getInputStream(pty_stream);
TerminalOutputMonitorListener monitor = new TerminalOutputMonitorListener(out);
// org.eclipse.tm.terminal.connector.ssh.controls.SshWizardConfigurationPanel
Map<String, Object> properties = new HashMap<>();
properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, // $NON-NLS-1$
"org.eclipse.tm.terminal.connector.streams.launcher.streams");
properties.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, // $NON-NLS-1$
"org.eclipse.tm.terminal.connector.streams.StreamsConnector");
properties.put(ITerminalsConnectorConstants.PROP_TITLE, name);
properties.put(ITerminalsConnectorConstants.PROP_LOCAL_ECHO, false);
properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, true);
properties.put(ITerminalsConnectorConstants.PROP_STREAMS_STDIN, tout);
properties.put(ITerminalsConnectorConstants.PROP_STREAMS_STDOUT, tin);
properties.put(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS, new ITerminalServiceOutputStreamMonitorListener[] { monitor });
properties.put(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS, new ITerminalServiceOutputStreamMonitorListener[] { monitor });
properties.put(ITerminalsConnectorConstants.PROP_DATA, pty_stream);
/*
* The JVM will call finalize() on 'pty_stream' (LogStream)
* since we hold no references to it (although we do hold
* references to one of its heavily nested fields. The
* LogStream overrides finalize() to close the stream being
* used so we must preserve a reference to it.
*/
// $NON-NLS-1$
properties.put("PREVENT_JVM_GC_FINALIZE", pty_stream);
// save properties to remove terminal later
if (out != null) {
out.setTerminalProperties(properties);
}
ITerminalService service = TerminalServiceFactory.getService();
service.openConsole(properties, null);
} catch (Exception e) {
throw new DockerException(e.getMessage(), e.getCause());
}
}
use of org.eclipse.linuxtools.docker.core.DockerException in project linuxtools by eclipse.
the class DockerConnection method restartContainer.
public void restartContainer(final String id, int secondsToWait, final OutputStream stream) throws DockerException, InterruptedException {
try {
// restart container
client.restartContainer(id, secondsToWait);
// Log the started container if a stream is provided
final IDockerContainerInfo containerInfo = getContainerInfo(id);
if (stream != null && containerInfo != null && containerInfo.config() != null && !containerInfo.config().tty()) {
// display logs for container
synchronized (loggingThreads) {
LogThread t = loggingThreads.get(id);
if (t == null || !t.isAlive()) {
t = new LogThread(id, getClientCopy(), true);
loggingThreads.put(id, t);
t.setOutputStream(stream);
t.start();
}
}
}
// list of containers needs to be refreshed once the container
// started, to reflect it new state.
listContainers();
} catch (ContainerNotFoundException e) {
throw new DockerContainerNotFoundException(e);
} catch (com.spotify.docker.client.exceptions.DockerRequestException e) {
throw new DockerException(e.message());
} catch (com.spotify.docker.client.exceptions.DockerException e) {
throw new DockerException(e.getMessage(), e.getCause());
}
}
use of org.eclipse.linuxtools.docker.core.DockerException in project linuxtools by eclipse.
the class DockerConnection method searchImages.
@Override
public List<IDockerImageSearchResult> searchImages(final String term) throws DockerException {
try {
final List<ImageSearchResult> searchResults = client.searchImages(term);
final List<IDockerImageSearchResult> results = new ArrayList<>();
for (ImageSearchResult r : searchResults) {
if (r.name().contains(term)) {
results.add(new DockerImageSearchResult(r.description(), r.official(), r.automated(), r.name(), r.starCount()));
}
}
return results;
} catch (com.spotify.docker.client.exceptions.DockerException | InterruptedException e) {
throw new DockerException(e);
}
}
use of org.eclipse.linuxtools.docker.core.DockerException in project linuxtools by eclipse.
the class DockerConnection method listContainers.
private List<IDockerContainer> listContainers() throws DockerException {
final Map<String, IDockerContainer> updatedContainersById = new HashMap<>();
List<IDockerContainer> sortedContainers;
synchronized (containerLock) {
try {
final List<Container> nativeContainers = new ArrayList<>();
synchronized (clientLock) {
// containers list left in the queue
if (client == null) {
// there's no client.
return Collections.emptyList();
}
nativeContainers.addAll(client.listContainers(DockerClient.ListContainersParam.allContainers()));
}
// in the future.
for (Container nativeContainer : nativeContainers) {
// them with a logging thread.
if (nativeContainer.status() != null && nativeContainer.status().startsWith(Messages.Exited_specifier)) {
synchronized (loggingThreads) {
if (loggingThreads.containsKey(nativeContainer.id())) {
loggingThreads.get(nativeContainer.id()).requestStop();
loggingThreads.remove(nativeContainer.id());
}
}
}
// skip containers that are being removed
if (nativeContainer.status() != null && nativeContainer.status().equals(Messages.Removal_In_Progress_specifier)) {
continue;
}
// re-use info from existing container with same id
if (this.containers != null && this.containersById.containsKey(nativeContainer.id())) {
final IDockerContainer container = this.containersById.get(nativeContainer.id());
updatedContainersById.put(nativeContainer.id(), new DockerContainer(this, nativeContainer, container.info()));
} else {
updatedContainersById.put(nativeContainer.id(), new DockerContainer(this, nativeContainer));
}
}
} catch (DockerTimeoutException e) {
if (isOpen()) {
Activator.log(new Status(IStatus.WARNING, Activator.PLUGIN_ID, Messages.Docker_Connection_Timeout, e));
close();
}
} catch (com.spotify.docker.client.exceptions.DockerException | InterruptedException e) {
if (isOpen() && e.getCause() != null && e.getCause().getCause() != null && e.getCause().getCause() instanceof ProcessingException) {
close();
} else {
throw new DockerException(e.getMessage());
}
} finally {
this.containersById = updatedContainersById;
sortedContainers = sort(updatedContainersById.values(), (container, otherContainer) -> container.name().compareTo(otherContainer.name()));
this.containers = sortedContainers;
}
}
// perform notification outside of containerLock so we don't have a View
// causing a deadlock
// TODO: we should probably notify the listeners only if the containers
// list changed.
notifyContainerListeners(sortedContainers);
return sortedContainers;
}
use of org.eclipse.linuxtools.docker.core.DockerException in project linuxtools by eclipse.
the class DockerConnection method stopContainer.
@Override
public void stopContainer(final String id) throws DockerException, InterruptedException {
try {
// stop container or kill after 10 seconds
// allow up to 10 seconds to stop
client.stopContainer(id, 10);
synchronized (loggingThreads) {
if (loggingThreads.containsKey(id)) {
loggingThreads.get(id).kill();
loggingThreads.remove(id);
}
}
// list of containers needs to be updated once the given container is stopped, to reflect it new state.
listContainers();
} catch (ContainerNotFoundException e) {
throw new DockerContainerNotFoundException(e);
} catch (com.spotify.docker.client.exceptions.DockerRequestException e) {
throw new DockerException(e.message());
} catch (com.spotify.docker.client.exceptions.DockerException e) {
throw new DockerException(e.getMessage(), e.getCause());
}
}
Aggregations