package com.nirima.jenkins.plugins.docker; import hudson.model.Executor; import hudson.model.Queue; import hudson.model.Run; import hudson.slaves.AbstractCloudComputer; import shaded.com.google.common.base.MoreObjects; import java.util.logging.Level; import java.util.logging.Logger; /** * Represents remote (running) container * * @author magnayn */ public class DockerComputer extends AbstractCloudComputer<DockerSlave> { private static final Logger LOGGER = Logger.getLogger(DockerComputer.class.getName()); /** * remember associated container id */ private String containerId; private String cloudId; public DockerComputer(DockerSlave dockerSlave) { super(dockerSlave); setContainerId(dockerSlave.getContainerId()); setCloudId(dockerSlave.getCloudId()); } public DockerCloud getCloud() { return getNode().getCloud(); } @Override public void taskAccepted(Executor executor, Queue.Task task) { super.taskAccepted(executor, task); LOGGER.log(Level.FINE, " Computer {0} taskAccepted", this); } @Override public void taskCompleted(Executor executor, Queue.Task task, long durationMS) { Queue.Executable executable = executor.getCurrentExecutable(); LOGGER.log(Level.FINE, " Computer {0} taskCompleted", this); if (executable instanceof Run) { Run build = (Run) executable; DockerSlave slave = getNode(); if (slave == null) { LOGGER.log(Level.FINE, " Ignoring TaskCompleted for {0} as node has already been removed.", this); } else { slave.setRun(build); } } // May take the slave offline and remove it, in which case getNode() // above would return null and we'd not find our DockerSlave anymore. super.taskCompleted(executor, task, durationMS); } @Override public void taskCompletedWithProblems(Executor executor, Queue.Task task, long durationMS, Throwable problems) { super.taskCompletedWithProblems(executor, task, durationMS, problems); LOGGER.log(Level.FINE, " Computer {0} taskCompletedWithProblems", this); } public String getContainerId() { return containerId; } public void setContainerId(String containerId) { this.containerId = containerId; getNode().setContainerId(containerId); // set for clean-ups } public String getCloudId() { return cloudId; } public void setCloudId(String cloudId) { this.cloudId = cloudId; getNode().setCloudId(cloudId); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("name", super.getName()) .add("slave", getNode()) .toString(); } }