package com.nirima.jenkins.plugins.docker; import com.nirima.jenkins.plugins.docker.utils.JenkinsUtils; import shaded.com.google.common.base.Function; import shaded.com.google.common.collect.Collections2; import com.github.dockerjava.api.model.Container; import org.kohsuke.stapler.StaplerProxy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Collection; import java.util.List; import javax.annotation.Nullable; import hudson.Extension; import hudson.model.Describable; import hudson.model.Descriptor; import hudson.model.ManagementLink; import hudson.model.Saveable; import jenkins.model.Jenkins; /** * Manage the docker images. * Docker page under "Manage Jenkins" page. */ @Extension public class DockerManagement extends ManagementLink implements StaplerProxy, Describable<DockerManagement>, Saveable { private static final Logger logger = LoggerFactory.getLogger(DockerManagement.class); @Override public String getIconFileName() { return com.nirima.jenkins.plugins.docker.utils.Consts.PLUGIN_IMAGES_URL + "/48x48/docker.png"; } @Override public String getUrlName() { return "docker-plugin"; } public String getDisplayName() { return Messages.DisplayName(); } @Override public String getDescription() { return Messages.PluginDescription(); } public static DockerManagement get() { return ManagementLink.all().get(DockerManagement.class); } public DescriptorImpl getDescriptor() { return Jenkins.getInstance().getDescriptorByType(DescriptorImpl.class); } public void save() throws IOException { } /** * Descriptor is only used for UI form bindings. */ @Extension public static final class DescriptorImpl extends Descriptor<DockerManagement> { @Override public String getDisplayName() { return null; // unused } } public DockerManagementServer getServer(String serverName) { return new DockerManagementServer(serverName); } public Object getTarget() { Jenkins.getInstance().checkPermission(Jenkins.ADMINISTER); return this; } public Collection<String> getServerNames() { return Collections2.transform(JenkinsUtils.getServers(), new Function<DockerCloud, String>() { public String apply(@Nullable DockerCloud input) { return input.getDisplayName(); } }); } public static class ServerDetail { final DockerCloud cloud; public ServerDetail(DockerCloud cloud) { this.cloud = cloud; } public String getName() { return cloud.getDisplayName(); } public String getActiveHosts() { try { List<Container> containers = cloud.getClient().listContainersCmd().exec(); return "(" + containers.size() + ")"; } catch(Exception ex) { return "Error"; } } } public Collection<ServerDetail> getServers() { return Collections2.transform(JenkinsUtils.getServers(), new Function<DockerCloud, ServerDetail>() { public ServerDetail apply(@Nullable DockerCloud input) { return new ServerDetail(input); } }); } }