diff --git a/pom.xml b/pom.xml index 94d6f19a..356b8d9f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.hobbit hobbit-java-sdk - 1.1.0 + 1.1.1 UTF-8 1.8 diff --git a/src/main/java/org/hobbit/sdk/docker/AbstractDockerizer.java b/src/main/java/org/hobbit/sdk/docker/AbstractDockerizer.java index 0c2da9fa..7c55a17a 100644 --- a/src/main/java/org/hobbit/sdk/docker/AbstractDockerizer.java +++ b/src/main/java/org/hobbit/sdk/docker/AbstractDockerizer.java @@ -1,450 +1,450 @@ -package org.hobbit.sdk.docker; - -import org.hobbit.core.components.Component; -import org.hobbit.sdk.docker.builders.common.AbstractDockersBuilder; -import com.google.common.collect.ImmutableList; -import com.spotify.docker.client.DefaultDockerClient; -import com.spotify.docker.client.DockerClient; -import com.spotify.docker.client.LogStream; -import com.spotify.docker.client.exceptions.ContainerNotFoundException; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.exceptions.DockerException; -import com.spotify.docker.client.exceptions.DockerRequestException; -import com.spotify.docker.client.messages.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.*; -import java.util.*; -import java.util.concurrent.*; - -import static java.lang.String.format; - -/** - * @author Roman Katerinenko - */ -public abstract class AbstractDockerizer implements Component { - - private String name; - public Logger logger; - - private String imageName; - private String hostName; - private String containerName; - private Map> portBindings; - private Collection environmentVariables; - private Collection networks; - - public Exception exception; - private String containerId; - - private Boolean skipLogsReading; - public Boolean useCachedContainer; - public DockerClient dockerClient; - private Callable onTermination; - - - protected AbstractDockerizer(AbstractDockersBuilder builder) { - name = builder.getName(); - logger = LoggerFactory.getLogger(name); - imageName = builder.getImageName(); - hostName = builder.getHostName(); - containerName = builder.getContainerName(); - portBindings = builder.getPortBindings(); - environmentVariables = builder.getEnvironmentVariables(); - networks = builder.getNetworks(); - skipLogsReading = builder.getSkipLogsReading(); - useCachedContainer = builder.getUseCachedContainer(); - onTermination = builder.getOnTermination(); - } - - - @Override - public void init() { - - } - - @Override - public void run() { - try { - stop(true); - Boolean requiresStart = createContainerIfNotExists(); - if(requiresStart) { - int readLogsSince = (int) (System.currentTimeMillis() / 1000L); - startContainer(); - startMonitoringAndLogsReading(readLogsSince); - } - - }catch (DockerRequestException e){ - logger.error("Exception: {}", e.getResponseBody()); - exception = e; - } - catch (Exception e){ - logger.error("Exception: {}", e); - exception = e; - } - } - - public DockerClient getDockerClient() throws DockerCertificateException { - if(dockerClient==null) - dockerClient = DefaultDockerClient.fromEnv().build(); - return dockerClient; - } - - public void stop() throws InterruptedException, DockerException, DockerCertificateException { - stop(false); - } - - public void stop(Boolean onstart) throws InterruptedException, DockerException, DockerCertificateException { - try { - if(useCachedContainer!=null && useCachedContainer) { - if(!onstart) - stopContainer(); - }else if(onstart) - removeAllSameNamedContainers(); - } - catch (Exception e){ - logger.error("Exception", e); - exception = e; - } - } - - public void setOnTermination(Callable value){ - this.onTermination = value; - } - - public String getName(){ - return name; - } - public String getImageName(){ - return imageName; - } - public String getContainerName(){ - return containerName; - } - - public String getHostName(){ return hostName;} - - public void removeAllSameNamedContainers(){ - logger.debug("Removing containers (imageName={})", imageName); - try { - removeAllSameNamedContainers(containerName); - } - catch (Exception e){ - logger.error("Exception", e); - exception = e; - } - } - - public void removeAllSameNamedImages() throws DockerException, InterruptedException, DockerCertificateException { - logger.debug("Removing images (imageName={})", imageName); - - removeAllSameNamedImages(imageName); - } - - public void addEnvironmentVariable(String keyValue){ - this.environmentVariables.add(keyValue); - } - - public void prepareImage() throws InterruptedException, DockerException, DockerCertificateException, IOException{ - prepareImage(imageName); - }; - - public abstract void prepareImage(String imageName) throws InterruptedException, DockerException, DockerCertificateException, IOException; - - - public Boolean createContainerIfNotExists() throws DockerException, InterruptedException, DockerCertificateException, IOException { - if(containerId!=null) - return true; - - Boolean requiresToBeStarted = false; - List results = findContainersByName(containerName, DockerClient.ListContainersParam.allContainers()); - if(results.size()==0){ - containerId = createContainer(); - requiresToBeStarted = true; - }else{ - for(Container container : results) - if(container.state().equals("running")) - containerId = results.get(0).id(); - - if(containerId==null) { - containerId = results.get(0).id(); - requiresToBeStarted = true; - } - } - return requiresToBeStarted; - } - - public void startContainer() throws Exception { - logger.debug("Starting container (imageName={}, containerId={})", imageName, containerId); - getDockerClient().restartContainer(containerId); - connectContainerToNetworks(networks); - //logger.debug("Waiting till container will start (imageName={})", imageName); - //awaitRunning(dockerClient, containerId); - logger.debug("Container started (imageName={}, containerId={})", imageName, containerId); - } - - public void startMonitoringAndLogsReading(int since) throws Exception { - logger.debug("Starting monitoring & logs reading for container (imageName={})", imageName); - - ExecutorService threadPool = Executors.newCachedThreadPool(); - - Callable callable = () -> { - //String ret=""; - LogStream logStream = null; - - String logs=""; - String prevLogs=""; - Boolean running = true; - while(running){ - if (skipLogsReading==null || !skipLogsReading){ - try { - logStream = getDockerClient().logs(containerId, - DockerClient.LogsParam.stderr(), - DockerClient.LogsParam.stdout(), - DockerClient.LogsParam.since(since) - ); - logs = logStream.readFully(); - } catch (Exception e) { - logger.debug(String.format("No logs are available (imageName=%s):", imageName), e); - } finally { - if (logStream != null) { - logStream.close(); - } - } - - if (logs.length() > prevLogs.length()) { - String logsToPrint = logs.substring(prevLogs.length()); - if (logsToPrint.toLowerCase().contains("error")) - logger.error(logsToPrint); - else - logger.debug(logsToPrint); - prevLogs = logs; - } - running = getDockerClient().inspectContainer(containerId).state().running(); - } - Thread.sleep(1000); - } - if(onTermination!=null) - onTermination.call(); - stop(); - return ""; - }; - //if(interruptable) { - Future future = threadPool.submit(callable); - try { - future.get(3000, TimeUnit.MILLISECONDS); - } catch (ExecutionException e) { - throw new RuntimeException(e.getCause()); - } catch (InterruptedException e) { - logger.debug("Logs reader was failed to attach"); - Thread.currentThread().interrupt(); - //throw new TimeoutException(); - } catch (TimeoutException e) { - //logger.debug("Logs reader was attached"); - //e.printStackTrace(); - } - //}else - //callable.call(); - - } - - public void waitForContainerFinish() throws DockerException, InterruptedException, DockerCertificateException { - logger.debug("Waiting for container finish (imageName={})", imageName); - getDockerClient().waitContainer(containerId); - - } - - public void stopContainer(){ - logger.debug("Stopping containers (imageName={})", imageName); - try{ - if(containerId==null){ - List results = findContainersByName(containerName, DockerClient.ListContainersParam.withStatusRunning()); - if(results.size()>0) - containerId = results.get(0).id(); - } - if(containerId!=null) - getDockerClient().stopContainer(containerId, 0); - } - catch (Exception e){ - logger.error("Exception", e); - exception = e; - } - } - - - private String createContainer() throws DockerException, InterruptedException, DockerCertificateException, IOException { - - if(findImagesByName(imageName).size()==0) - prepareImage(imageName); - - logger.debug("Creating container (imageName={})", imageName); - boolean removeContainerWhenItExits = false; - HostConfig hostConfig = HostConfig.builder() - .autoRemove(removeContainerWhenItExits) - .portBindings(portBindings) - .dns("1.2.3.4") - .dnsSearch("rabbit") - .build(); - - ContainerConfig.Builder builder = ContainerConfig.builder() - .hostConfig(hostConfig) - .exposedPorts(getExposedPorts()) - .image(imageName) - .env(getEnvironmentVariables()); - - ContainerConfig containerConfig = builder .build(); - ContainerCreation creation = getDockerClient().createContainer(containerConfig, containerName); - String contId = creation.id(); - if (contId == null) { - IllegalStateException exception = new IllegalStateException(format("Unable to create container %s", containerName)); - logger.error(String.format("Failed to create container (imageName=%s): ",imageName), exception); - throw exception; - } - - return contId; - } - - private static void awaitRunning(final DockerClient client, final String containerId) - throws Exception { - Boolean running = false; - while (!running) { - final ContainerInfo containerInfo = client.inspectContainer(containerId); - running = containerInfo.state().running() ? true : false; - Thread.sleep(300); - } - } - - - - private ContainerInfo getContainerInfo(DockerClient dockerClient) { - if (containerId == null) { - return null; - } - ContainerInfo info = null; - try { - info = getDockerClient().inspectContainer(containerId); - } catch (ContainerNotFoundException e) { - logger.error("The container " + containerId + " is not known.", e); - } catch (Throwable e) { - logger.error("Error while checking status of container " + containerId + ".", e); - } - return info; - } - - private void connectContainerToNetworks(Collection networks) throws DockerException, InterruptedException, DockerCertificateException { - logger.debug("Connecting container to networks (imageName={})", imageName); - -// ContainerInfo info = getContainerInfo(dockerClient); -// Map prev_networks = info.networkSettings().networks(); -// for (String networkName : prev_networks.keySet()) { -// getDockerClient().disconnectFromNetwork(containerId, networkName); -// } - - for (String network : networks) { - String networkId = createDockerNetworkIfNeeded(dockerClient, network); - getDockerClient().connectToNetwork(containerId, networkId); - } - } - - public String createDockerNetworkIfNeeded(DockerClient dockerClient, String networkName) throws - DockerException, InterruptedException, DockerCertificateException { - for (Network network : getDockerClient().listNetworks()) { - if (network.name() != null && network.name().equals(networkName)) { - return network.id(); - } - } - NetworkConfig networkConfig = NetworkConfig.builder() - .name(networkName) - .build(); - return getDockerClient().createNetwork(networkConfig).id(); - } - - private Set getExposedPorts() { - return portBindings.keySet(); - } - - private String[] getEnvironmentVariables() { - return environmentVariables.toArray(new String[environmentVariables.size()]); - } - - private List findContainersByName(String containerName, DockerClient.ListContainersParam param) throws - DockerException, InterruptedException, DockerCertificateException { - List ret = new ArrayList<>(); - for(Container container : getDockerClient().listContainers(param)) { - for(String name : container.names()){ - if (name.equals(dockerizeContainerName(containerName))) - ret.add(container); - } - } - - return ret; - } - - private void removeAllSameNamedContainers(String containerName) throws - DockerException, InterruptedException, DockerCertificateException { - for(Container container : findContainersByName(containerName, DockerClient.ListContainersParam.allContainers())) { - boolean removed = false; - while (!removed) { - try { - getDockerClient().removeContainer(container.id(), DockerClient.RemoveContainerParam.forceKill()); - removed = true; - containerId = null; - } catch (Exception e) { - //if(!e.getMessage().contains("not found")) - logger.error("Exception", e); - } - } - } - } - - private static String dockerizeContainerName(String intendedContainerName) { - return format("/%s", intendedContainerName); - } - - private List findImagesByName(String imageName) throws DockerException, InterruptedException, DockerCertificateException { - List ret = new ArrayList<>(); - String imageNameToSearch = (imageName.contains(":")?imageName:imageName+":"); - for (Image image : getDockerClient().listImages(DockerClient.ListImagesParam.allImages())) { - ImmutableList repoTags = image.repoTags(); - if (repoTags != null) { - boolean nameMatch = repoTags.stream().anyMatch(name -> name != null && name.contains(imageNameToSearch)); - if (nameMatch) - ret.add(image.id()); - } - } - return ret; - } - - private void removeAllSameNamedImages(String imageName) throws DockerException, InterruptedException, DockerCertificateException { - boolean force = true; - boolean dontDeleteUntaggedParents = false; - for (String id : findImagesByName(imageName)){ - getDockerClient().removeImage(id, force, dontDeleteUntaggedParents); - } - } - - - public Exception anyExceptions() { - return exception; - } - - public static String toEnvironmentEntry(String key, String value) { - return format("%s=%s", key, value); - } - - - @Override - public void close(){ - logger.debug("Close() (imageName={})", imageName); -// try { -// stop(); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } catch (DockerException e) { -// e.printStackTrace(); -// } catch (DockerCertificateException e) { -// e.printStackTrace(); -// } - } +package org.hobbit.sdk.docker; + +import org.hobbit.core.components.Component; +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import com.google.common.collect.ImmutableList; +import com.spotify.docker.client.DefaultDockerClient; +import com.spotify.docker.client.DockerClient; +import com.spotify.docker.client.LogStream; +import com.spotify.docker.client.exceptions.ContainerNotFoundException; +import com.spotify.docker.client.exceptions.DockerCertificateException; +import com.spotify.docker.client.exceptions.DockerException; +import com.spotify.docker.client.exceptions.DockerRequestException; +import com.spotify.docker.client.messages.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.*; +import java.util.concurrent.*; + +import static java.lang.String.format; + +/** + * @author Roman Katerinenko + */ +public abstract class AbstractDockerizer implements Component { + + private String name; + public Logger logger; + + private String imageName; + private String hostName; + private String containerName; + private Map> portBindings; + private Collection environmentVariables; + private Collection networks; + + public Exception exception; + private String containerId; + + private Boolean skipLogsReading; + public Boolean useCachedContainer; + public DockerClient dockerClient; + private Callable onTermination; + + + protected AbstractDockerizer(AbstractDockersBuilder builder) { + name = builder.getName(); + logger = LoggerFactory.getLogger(name); + imageName = builder.getImageName(); + hostName = builder.getHostName(); + containerName = builder.getContainerName(); + portBindings = builder.getPortBindings(); + environmentVariables = builder.getEnvironmentVariables(); + networks = builder.getNetworks(); + skipLogsReading = builder.getSkipLogsReading(); + useCachedContainer = builder.getUseCachedContainer(); + onTermination = builder.getOnTermination(); + } + + + @Override + public void init() { + + } + + @Override + public void run() { + try { + stop(true); + Boolean requiresStart = createContainerIfNotExists(); + if(requiresStart) { + int readLogsSince = (int) (System.currentTimeMillis() / 1000L); + startContainer(); + startMonitoringAndLogsReading(readLogsSince); + } + + }catch (DockerRequestException e){ + logger.error("Exception: {}", e.getResponseBody()); + exception = e; + } + catch (Exception e){ + logger.error("Exception: {}", e); + exception = e; + } + } + + public DockerClient getDockerClient() throws DockerCertificateException { + if(dockerClient==null) + dockerClient = DefaultDockerClient.fromEnv().build(); + return dockerClient; + } + + public void stop() throws InterruptedException, DockerException, DockerCertificateException { + stop(false); + } + + public void stop(Boolean onstart) throws InterruptedException, DockerException, DockerCertificateException { + try { + if(useCachedContainer!=null && useCachedContainer) { + if(!onstart) + stopContainer(); + }else if(onstart) + removeAllSameNamedContainers(); + } + catch (Exception e){ + logger.error("Exception", e); + exception = e; + } + } + + public void setOnTermination(Callable value){ + this.onTermination = value; + } + + public String getName(){ + return name; + } + public String getImageName(){ + return imageName; + } + public String getContainerName(){ + return containerName; + } + + public String getHostName(){ return hostName;} + + public void removeAllSameNamedContainers(){ + logger.debug("Removing containers (imageName={})", imageName); + try { + removeAllSameNamedContainers(containerName); + } + catch (Exception e){ + logger.error("Exception", e); + exception = e; + } + } + + public void removeAllSameNamedImages() throws DockerException, InterruptedException, DockerCertificateException { + logger.debug("Removing images (imageName={})", imageName); + + removeAllSameNamedImages(imageName); + } + + public void addEnvironmentVariable(String keyValue){ + this.environmentVariables.add(keyValue); + } + + public void prepareImage() throws InterruptedException, DockerException, DockerCertificateException, IOException{ + prepareImage(imageName); + }; + + public abstract void prepareImage(String imageName) throws InterruptedException, DockerException, DockerCertificateException, IOException; + + + public Boolean createContainerIfNotExists() throws DockerException, InterruptedException, DockerCertificateException, IOException { + if(containerId!=null) + return true; + + Boolean requiresToBeStarted = false; + List results = findContainersByName(containerName, DockerClient.ListContainersParam.allContainers()); + if(results.size()==0){ + containerId = createContainer(); + requiresToBeStarted = true; + }else{ + for(Container container : results) + if(container.state().equals("running")) + containerId = results.get(0).id(); + + if(containerId==null) { + containerId = results.get(0).id(); + requiresToBeStarted = true; + } + } + return requiresToBeStarted; + } + + public void startContainer() throws Exception { + logger.debug("Starting container (imageName={}, containerId={})", imageName, containerId); + getDockerClient().restartContainer(containerId); + connectContainerToNetworks(networks); + //logger.debug("Waiting till container will start (imageName={})", imageName); + //awaitRunning(dockerClient, containerId); + logger.debug("Container started (imageName={}, containerId={})", imageName, containerId); + } + + public void startMonitoringAndLogsReading(int since) throws Exception { + logger.debug("Starting monitoring & logs reading for container (imageName={})", imageName); + + ExecutorService threadPool = Executors.newCachedThreadPool(); + + Callable callable = () -> { + //String ret=""; + LogStream logStream = null; + + String logs=""; + String prevLogs=""; + Boolean running = true; + while(running){ + if (skipLogsReading==null || !skipLogsReading){ + try { + logStream = getDockerClient().logs(containerId, + DockerClient.LogsParam.stderr(), + DockerClient.LogsParam.stdout(), + DockerClient.LogsParam.since(since) + ); + logs = logStream.readFully(); + } catch (Exception e) { + logger.debug(String.format("No logs are available (imageName=%s):", imageName), e); + } finally { + if (logStream != null) { + logStream.close(); + } + } + + if (logs.length() > prevLogs.length()) { + String logsToPrint = logs.substring(prevLogs.length()); + if (logsToPrint.toLowerCase().contains("error")) + logger.error(logsToPrint); + else + logger.debug(logsToPrint); + prevLogs = logs; + } + running = getDockerClient().inspectContainer(containerId).state().running(); + } + Thread.sleep(1000); + } + if(onTermination!=null) + onTermination.call(); + stop(); + return ""; + }; + //if(interruptable) { + Future future = threadPool.submit(callable); + try { + future.get(3000, TimeUnit.MILLISECONDS); + } catch (ExecutionException e) { + throw new RuntimeException(e.getCause()); + } catch (InterruptedException e) { + logger.debug("Logs reader was failed to attach"); + Thread.currentThread().interrupt(); + //throw new TimeoutException(); + } catch (TimeoutException e) { + //logger.debug("Logs reader was attached"); + //e.printStackTrace(); + } + //}else + //callable.call(); + + } + + public void waitForContainerFinish() throws DockerException, InterruptedException, DockerCertificateException { + logger.debug("Waiting for container finish (imageName={})", imageName); + getDockerClient().waitContainer(containerId); + + } + + public void stopContainer(){ + logger.debug("Stopping containers (imageName={})", imageName); + try{ + if(containerId==null){ + List results = findContainersByName(containerName, DockerClient.ListContainersParam.withStatusRunning()); + if(results.size()>0) + containerId = results.get(0).id(); + } + if(containerId!=null) + getDockerClient().stopContainer(containerId, 0); + } + catch (Exception e){ + logger.error("Exception", e); + exception = e; + } + } + + + private String createContainer() throws DockerException, InterruptedException, DockerCertificateException, IOException { + + if(findImagesByName(imageName).size()==0) + prepareImage(imageName); + + logger.debug("Creating container (imageName={})", imageName); + boolean removeContainerWhenItExits = false; + HostConfig hostConfig = HostConfig.builder() + .autoRemove(removeContainerWhenItExits) + .portBindings(portBindings) + .dns("1.2.3.4") + .dnsSearch("rabbit") + .build(); + + ContainerConfig.Builder builder = ContainerConfig.builder() + .hostConfig(hostConfig) + .exposedPorts(getExposedPorts()) + .image(imageName) + .env(getEnvironmentVariables()); + + ContainerConfig containerConfig = builder .build(); + ContainerCreation creation = getDockerClient().createContainer(containerConfig, containerName); + String contId = creation.id(); + if (contId == null) { + IllegalStateException exception = new IllegalStateException(format("Unable to create container %s", containerName)); + logger.error(String.format("Failed to create container (imageName=%s): ",imageName), exception); + throw exception; + } + + return contId; + } + + private static void awaitRunning(final DockerClient client, final String containerId) + throws Exception { + Boolean running = false; + while (!running) { + final ContainerInfo containerInfo = client.inspectContainer(containerId); + running = containerInfo.state().running() ? true : false; + Thread.sleep(300); + } + } + + + + private ContainerInfo getContainerInfo(DockerClient dockerClient) { + if (containerId == null) { + return null; + } + ContainerInfo info = null; + try { + info = getDockerClient().inspectContainer(containerId); + } catch (ContainerNotFoundException e) { + logger.error("The container " + containerId + " is not known.", e); + } catch (Throwable e) { + logger.error("Error while checking status of container " + containerId + ".", e); + } + return info; + } + + private void connectContainerToNetworks(Collection networks) throws DockerException, InterruptedException, DockerCertificateException { + logger.debug("Connecting container to networks (imageName={})", imageName); + +// ContainerInfo info = getContainerInfo(dockerClient); +// Map prev_networks = info.networkSettings().networks(); +// for (String networkName : prev_networks.keySet()) { +// getDockerClient().disconnectFromNetwork(containerId, networkName); +// } + + for (String network : networks) { + String networkId = createDockerNetworkIfNeeded(dockerClient, network); + getDockerClient().connectToNetwork(containerId, networkId); + } + } + + public String createDockerNetworkIfNeeded(DockerClient dockerClient, String networkName) throws + DockerException, InterruptedException, DockerCertificateException { + for (Network network : getDockerClient().listNetworks()) { + if (network.name() != null && network.name().equals(networkName)) { + return network.id(); + } + } + NetworkConfig networkConfig = NetworkConfig.builder() + .name(networkName) + .build(); + return getDockerClient().createNetwork(networkConfig).id(); + } + + private Set getExposedPorts() { + return portBindings.keySet(); + } + + private String[] getEnvironmentVariables() { + return environmentVariables.toArray(new String[environmentVariables.size()]); + } + + private List findContainersByName(String containerName, DockerClient.ListContainersParam param) throws + DockerException, InterruptedException, DockerCertificateException { + List ret = new ArrayList<>(); + for(Container container : getDockerClient().listContainers(param)) { + for(String name : container.names()){ + if (name.equals(dockerizeContainerName(containerName))) + ret.add(container); + } + } + + return ret; + } + + private void removeAllSameNamedContainers(String containerName) throws + DockerException, InterruptedException, DockerCertificateException { + for(Container container : findContainersByName(containerName, DockerClient.ListContainersParam.allContainers())) { + boolean removed = false; + while (!removed) { + try { + getDockerClient().removeContainer(container.id(), DockerClient.RemoveContainerParam.forceKill()); + removed = true; + containerId = null; + } catch (Exception e) { + //if(!e.getMessage().contains("not found")) + logger.error("Exception", e); + } + } + } + } + + private static String dockerizeContainerName(String intendedContainerName) { + return format("/%s", intendedContainerName); + } + + private List findImagesByName(String imageName) throws DockerException, InterruptedException, DockerCertificateException { + List ret = new ArrayList<>(); + String imageNameToSearch = (imageName.contains(":")?imageName:imageName+":"); + for (Image image : getDockerClient().listImages(DockerClient.ListImagesParam.allImages())) { + ImmutableList repoTags = image.repoTags(); + if (repoTags != null) { + boolean nameMatch = repoTags.stream().anyMatch(name -> name != null && name.contains(imageNameToSearch)); + if (nameMatch) + ret.add(image.id()); + } + } + return ret; + } + + private void removeAllSameNamedImages(String imageName) throws DockerException, InterruptedException, DockerCertificateException { + boolean force = true; + boolean dontDeleteUntaggedParents = false; + for (String id : findImagesByName(imageName)){ + getDockerClient().removeImage(id, force, dontDeleteUntaggedParents); + } + } + + + public Exception anyExceptions() { + return exception; + } + + public static String toEnvironmentEntry(String key, String value) { + return format("%s=%s", key, value); + } + + + @Override + public void close(){ + logger.debug("Close() (imageName={})", imageName); +// try { +// stop(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } catch (DockerException e) { +// e.printStackTrace(); +// } catch (DockerCertificateException e) { +// e.printStackTrace(); +// } + } } \ No newline at end of file diff --git a/src/main/java/org/hobbit/sdk/docker/BuildBasedDockerizer.java b/src/main/java/org/hobbit/sdk/docker/BuildBasedDockerizer.java index 1d4f05c6..f9968714 100644 --- a/src/main/java/org/hobbit/sdk/docker/BuildBasedDockerizer.java +++ b/src/main/java/org/hobbit/sdk/docker/BuildBasedDockerizer.java @@ -1,117 +1,117 @@ -package org.hobbit.sdk.docker; - -import org.hobbit.sdk.docker.builders.common.BuildBasedDockersBuilder; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.exceptions.DockerException; - -import java.io.*; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; - -import static java.lang.String.format; - -/** - * @author Pavel Smirnov - */ - -public class BuildBasedDockerizer extends AbstractDockerizer { - - private static final Charset charset = Charset.forName("UTF-8"); - - - private final String imageName; - private final String containerName; - private final Path buildDirectory; - private final Reader dockerFileReader; - private final Boolean useCachedImage; - - - private String imageId; - //private String tempDockerFileName; - - - - public BuildBasedDockerizer(BuildBasedDockersBuilder builder) { - super(builder); - imageName = builder.getImageName(); - containerName = builder.getContainerName(); - buildDirectory = builder.getBuildDirectory(); - dockerFileReader = builder.getDockerFileReader(); - useCachedImage = builder.getUseCachedImage(); - - } - - @Override - public void prepareImage(String imageName) throws InterruptedException, DockerException, DockerCertificateException, IOException { - buildImage(imageName); - } - - @Override - public void stop(Boolean onstart) throws InterruptedException, DockerException, DockerCertificateException { - if(this.useCachedImage==null || this.useCachedImage==false) - useCachedContainer=false; - - super.stop(onstart); - - if(onstart) { - if (this.useCachedImage == null || this.useCachedImage == false) { - removeAllSameNamedImages(); - } - } - } - - private void buildImage(String imageName) throws - InterruptedException, DockerException, IOException, IllegalStateException, DockerCertificateException { - - logger.debug("Building image (imageName={})", imageName); - Path filePath = createTempDockerFile(); - fillDockerFile(filePath); - - imageId = getDockerClient().build(buildDirectory, imageName, filePath.getFileName().toString(), message -> { - - }); - - if (imageId == null) { - IllegalStateException exception = new IllegalStateException(format("Unable to create image %s", imageName)); - logger.error("Exception", exception); - throw exception; - } - removeTempDockerFile(filePath); - } - - private Path createTempDockerFile() throws IOException { - File file = File.createTempFile("Dockerfile", ".tmp", buildDirectory.toFile()); - return Paths.get(file.getPath()); - } - - private void fillDockerFile(Path filePath) throws IOException { - try (OutputStream outputStream = Files.newOutputStream(filePath, StandardOpenOption.WRITE)) { - outputStream.write(readAllFromDockerFileReader()); - } - } - - private byte[] readAllFromDockerFileReader() throws IOException { - try (BufferedReader reader = new BufferedReader(dockerFileReader)) { - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - String line; - while ((line = reader.readLine()) != null) { - buffer.write(line.getBytes(charset)); - buffer.write(format("%n").getBytes(charset)); - } - return buffer.toByteArray(); - } - } - - - private void removeTempDockerFile(Path path) throws IOException { - Files.deleteIfExists(path); - } - -// public void pushImage() throws DockerCertificateException, DockerException, InterruptedException { -// getDockerClient().push(imageName, RegistryAuth.builder().serverAddress("git.project-hobbit.eu:4567").identityToken("").build()); -// } - -} +package org.hobbit.sdk.docker; + +import org.hobbit.sdk.docker.builders.BuildBasedDockersBuilder; +import com.spotify.docker.client.exceptions.DockerCertificateException; +import com.spotify.docker.client.exceptions.DockerException; + +import java.io.*; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; + +import static java.lang.String.format; + +/** + * @author Pavel Smirnov + */ + +public class BuildBasedDockerizer extends AbstractDockerizer { + + private static final Charset charset = Charset.forName("UTF-8"); + + + private final String imageName; + private final String containerName; + private final Path buildDirectory; + private final Reader dockerFileReader; + private final Boolean useCachedImage; + + + private String imageId; + //private String tempDockerFileName; + + + + public BuildBasedDockerizer(BuildBasedDockersBuilder builder) { + super(builder); + imageName = builder.getImageName(); + containerName = builder.getContainerName(); + buildDirectory = builder.getBuildDirectory(); + dockerFileReader = builder.getDockerFileReader(); + useCachedImage = builder.getUseCachedImage(); + + } + + @Override + public void prepareImage(String imageName) throws InterruptedException, DockerException, DockerCertificateException, IOException { + buildImage(imageName); + } + + @Override + public void stop(Boolean onstart) throws InterruptedException, DockerException, DockerCertificateException { + if(this.useCachedImage==null || this.useCachedImage==false) + useCachedContainer=false; + + super.stop(onstart); + + if(onstart) { + if (this.useCachedImage == null || this.useCachedImage == false) { + removeAllSameNamedImages(); + } + } + } + + private void buildImage(String imageName) throws + InterruptedException, DockerException, IOException, IllegalStateException, DockerCertificateException { + + logger.debug("Building image (imageName={})", imageName); + Path filePath = createTempDockerFile(); + fillDockerFile(filePath); + + imageId = getDockerClient().build(buildDirectory, imageName, filePath.getFileName().toString(), message -> { + + }); + + if (imageId == null) { + IllegalStateException exception = new IllegalStateException(format("Unable to create image %s", imageName)); + logger.error("Exception", exception); + throw exception; + } + removeTempDockerFile(filePath); + } + + private Path createTempDockerFile() throws IOException { + File file = File.createTempFile("Dockerfile", ".tmp", buildDirectory.toFile()); + return Paths.get(file.getPath()); + } + + private void fillDockerFile(Path filePath) throws IOException { + try (OutputStream outputStream = Files.newOutputStream(filePath, StandardOpenOption.WRITE)) { + outputStream.write(readAllFromDockerFileReader()); + } + } + + private byte[] readAllFromDockerFileReader() throws IOException { + try (BufferedReader reader = new BufferedReader(dockerFileReader)) { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + String line; + while ((line = reader.readLine()) != null) { + buffer.write(line.getBytes(charset)); + buffer.write(format("%n").getBytes(charset)); + } + return buffer.toByteArray(); + } + } + + + private void removeTempDockerFile(Path path) throws IOException { + Files.deleteIfExists(path); + } + +// public void pushImage() throws DockerCertificateException, DockerException, InterruptedException { +// getDockerClient().push(imageName, RegistryAuth.builder().serverAddress("git.project-hobbit.eu:4567").identityToken("").build()); +// } + +} diff --git a/src/main/java/org/hobbit/sdk/docker/PullBasedDockerizer.java b/src/main/java/org/hobbit/sdk/docker/PullBasedDockerizer.java index 4ccf3da6..40a791a4 100644 --- a/src/main/java/org/hobbit/sdk/docker/PullBasedDockerizer.java +++ b/src/main/java/org/hobbit/sdk/docker/PullBasedDockerizer.java @@ -1,31 +1,31 @@ -package org.hobbit.sdk.docker; - -import org.hobbit.sdk.docker.builders.common.PullBasedDockersBuilder; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.exceptions.DockerException; - -import java.io.IOException; - -/** - * @author Pavel Smirnov - */ - -public class PullBasedDockerizer extends AbstractDockerizer { - - public PullBasedDockerizer(PullBasedDockersBuilder builder) { - super(builder); - } - - - @Override - public void prepareImage(String imageName) throws InterruptedException, DockerException, DockerCertificateException, IOException { - pullImage(imageName); - } - - public void pullImage(String imageName) throws InterruptedException, DockerException, IOException, DockerCertificateException { - logger.debug("Pulling image (imageName={})", imageName); - this.getDockerClient().pull(imageName); - } - - +package org.hobbit.sdk.docker; + +import org.hobbit.sdk.docker.builders.PullBasedDockersBuilder; +import com.spotify.docker.client.exceptions.DockerCertificateException; +import com.spotify.docker.client.exceptions.DockerException; + +import java.io.IOException; + +/** + * @author Pavel Smirnov + */ + +public class PullBasedDockerizer extends AbstractDockerizer { + + public PullBasedDockerizer(PullBasedDockersBuilder builder) { + super(builder); + } + + + @Override + public void prepareImage(String imageName) throws InterruptedException, DockerException, DockerCertificateException, IOException { + pullImage(imageName); + } + + public void pullImage(String imageName) throws InterruptedException, DockerException, IOException, DockerCertificateException { + logger.debug("Pulling image (imageName={})", imageName); + this.getDockerClient().pull(imageName); + } + + } \ No newline at end of file diff --git a/src/main/java/org/hobbit/sdk/docker/RabbitMqDockerizer.java b/src/main/java/org/hobbit/sdk/docker/RabbitMqDockerizer.java index 0ea91d71..b0bcbbe6 100644 --- a/src/main/java/org/hobbit/sdk/docker/RabbitMqDockerizer.java +++ b/src/main/java/org/hobbit/sdk/docker/RabbitMqDockerizer.java @@ -1,92 +1,90 @@ -package org.hobbit.sdk.docker; - -import com.spotify.docker.client.exceptions.DockerRequestException; -import org.hobbit.sdk.CommonConstants; -import org.hobbit.sdk.docker.builders.common.PullBasedDockersBuilder; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import com.spotify.docker.client.exceptions.DockerCertificateException; -import com.spotify.docker.client.messages.PortBinding; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; - -/** - * Note! Requires Docker to be installed - * - * @author Roman Katerinenko - */ -public class RabbitMqDockerizer extends PullBasedDockerizer { - private static final Logger logger = LoggerFactory.getLogger(RabbitMqDockerizer.class); - private final String hostName; - private final String imageName; - - private RabbitMqDockerizer(Builder builder) { - super(builder); - hostName = builder.getHostName(); - imageName = builder.getImageName(); - } - - @Override - public void run() { - try { - - super.run(); - waitUntilRunning(); - - } catch (Exception e) { - - logger.error("Exception", e); - } - } - - - - public void waitUntilRunning() throws DockerCertificateException, InterruptedException, TimeoutException { - logger.debug("Trying to connect to container at {} (imageName={})", hostName, imageName); - - ConnectionFactory factory = new ConnectionFactory(); - factory.setHost(hostName); - boolean connected = false; - while (!connected) { - try { - Connection connection = factory.newConnection(); - connected = true; - connection.close(); - } catch (IOException e) { - // ignore - } - if(!connected) - Thread.sleep(300); - } - } - - - public static Builder builder() { - return new Builder(); - - } - - public static class Builder extends PullBasedDockersBuilder { - - public Builder() { - super("RabbitMqDockerizer"); - hostName("rabbit"); - containerName("rabbit"); - imageName("rabbitmq:latest"); - addPortBindings("5672/tcp", PortBinding.of("0.0.0.0", 5672)); - useCachedContainer(true); - skipLogsReading(true); - addNetworks(HOBBIT_NETWORKS); - } - - - public RabbitMqDockerizer build() { - return new RabbitMqDockerizer(this); - } - } +package org.hobbit.sdk.docker; + +import org.hobbit.sdk.docker.builders.PullBasedDockersBuilder; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.spotify.docker.client.exceptions.DockerCertificateException; +import com.spotify.docker.client.messages.PortBinding; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.concurrent.TimeoutException; + +import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; + +/** + * Note! Requires Docker to be installed + * + * @author Roman Katerinenko + */ +public class RabbitMqDockerizer extends PullBasedDockerizer { + private static final Logger logger = LoggerFactory.getLogger(RabbitMqDockerizer.class); + private final String hostName; + private final String imageName; + + private RabbitMqDockerizer(Builder builder) { + super(builder); + hostName = builder.getHostName(); + imageName = builder.getImageName(); + } + + @Override + public void run() { + try { + + super.run(); + waitUntilRunning(); + + } catch (Exception e) { + + logger.error("Exception", e); + } + } + + + + public void waitUntilRunning() throws DockerCertificateException, InterruptedException, TimeoutException { + logger.debug("Trying to connect to container at {} (imageName={})", hostName, imageName); + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost(hostName); + boolean connected = false; + while (!connected) { + try { + Connection connection = factory.newConnection(); + connected = true; + connection.close(); + } catch (IOException e) { + // ignore + } + if(!connected) + Thread.sleep(300); + } + } + + + public static Builder builder() { + return new Builder(); + + } + + public static class Builder extends PullBasedDockersBuilder { + + public Builder() { + super("RabbitMqDockerizer"); + hostName("rabbit"); + containerName("rabbit"); + imageName("rabbitmq:latest"); + addPortBindings("5672/tcp", PortBinding.of("0.0.0.0", 5672)); + useCachedContainer(true); + skipLogsReading(true); + addNetworks(HOBBIT_NETWORKS); + } + + + public RabbitMqDockerizer build() { + return new RabbitMqDockerizer(this); + } + } } \ No newline at end of file diff --git a/src/main/java/org/hobbit/sdk/docker/builders/common/AbstractDockersBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/AbstractDockersBuilder.java similarity index 98% rename from src/main/java/org/hobbit/sdk/docker/builders/common/AbstractDockersBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/AbstractDockersBuilder.java index 40f9d9d3..388f2aa0 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/common/AbstractDockersBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/AbstractDockersBuilder.java @@ -1,4 +1,4 @@ -package org.hobbit.sdk.docker.builders.common; +package org.hobbit.sdk.docker.builders; import org.hobbit.sdk.docker.AbstractDockerizer; import com.spotify.docker.client.messages.PortBinding; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/common/BothTypesDockersBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/BothTypesDockersBuilder.java similarity index 95% rename from src/main/java/org/hobbit/sdk/docker/builders/common/BothTypesDockersBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/BothTypesDockersBuilder.java index 0f5e5d2c..8b7e2b99 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/common/BothTypesDockersBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/BothTypesDockersBuilder.java @@ -1,4 +1,4 @@ -package org.hobbit.sdk.docker.builders.common; +package org.hobbit.sdk.docker.builders; import org.hobbit.sdk.docker.AbstractDockerizer; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/common/BuildBasedDockersBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/BuildBasedDockersBuilder.java similarity index 97% rename from src/main/java/org/hobbit/sdk/docker/builders/common/BuildBasedDockersBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/BuildBasedDockersBuilder.java index b6577ad1..81ececd6 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/common/BuildBasedDockersBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/BuildBasedDockersBuilder.java @@ -1,4 +1,4 @@ -package org.hobbit.sdk.docker.builders.common; +package org.hobbit.sdk.docker.builders; import org.hobbit.sdk.docker.BuildBasedDockerizer; import com.spotify.docker.client.messages.PortBinding; @@ -103,12 +103,11 @@ public BuildBasedDockersBuilder addNetworks(String... nets){ @Override public BuildBasedDockerizer build() throws Exception { - if(buildDirectory==null) throw new Exception("Build directory is not specified for "+this.getClass().getSimpleName()); if(dockerFileReader==null) - throw new Exception("dockerFile reader is not specified for "+this.getClass().getSimpleName()+". You can initialize it by the calling the init()"); + throw new Exception("dockerFile reader is not specified for "+this.getClass().getSimpleName()+". You can initialize it by the calling the initFileReader()"); BuildBasedDockerizer ret = new BuildBasedDockerizer(this); return ret; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/common/DynamicDockerFileBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/DynamicDockerFileBuilder.java similarity index 93% rename from src/main/java/org/hobbit/sdk/docker/builders/common/DynamicDockerFileBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/DynamicDockerFileBuilder.java index 333118a2..b150d9d1 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/common/DynamicDockerFileBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/DynamicDockerFileBuilder.java @@ -1,146 +1,144 @@ -package org.hobbit.sdk.docker.builders.common; - -import org.hobbit.sdk.docker.BuildBasedDockerizer; - -import java.io.Reader; -import java.io.StringReader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author Pavel Smirnov - */ - -public class DynamicDockerFileBuilder extends BuildBasedDockersBuilder { - - private Class[] runnerClass; - private Path dockerWorkDir; - private Path jarFilePath; - private List filesToAdd; - - public DynamicDockerFileBuilder(String dockerizerName){ - super(dockerizerName); - filesToAdd = new ArrayList<>(); - } - - public DynamicDockerFileBuilder runnerClass(Class... values) { - this.runnerClass = values; - return this; - } - - public DynamicDockerFileBuilder dockerWorkDir(String value) { - this.dockerWorkDir = Paths.get(value); - return this; - } - - public DynamicDockerFileBuilder jarFilePath(String value) { - this.jarFilePath = Paths.get(value).toAbsolutePath(); - return this; - } - - public DynamicDockerFileBuilder useCachedImage(Boolean value) { - super.useCachedImage(value); - return this; - } - - public DynamicDockerFileBuilder useCachedContainer(Boolean value) { - super.useCachedContainer(value); - return this; - } - - public DynamicDockerFileBuilder customDockerFileReader(Reader value) { - super.dockerFileReader(value); - return this; - } - - public DynamicDockerFileBuilder imageName(String value) { - super.imageName(value); - return this; - } - - public DynamicDockerFileBuilder addFileOrFolder(String path) { - filesToAdd.add(path); - return this; - } - - public DynamicDockerFileBuilder init() throws Exception { - if(runnerClass==null) - throw new Exception("Runner class is not specified for "+this.getClass().getSimpleName()); - - if(dockerWorkDir ==null) - throw new Exception("WorkingDirName class is not specified for "+this.getClass().getSimpleName()); - - if(jarFilePath ==null) - throw new Exception("JarFileName class is not specified for "+this.getClass().getSimpleName()); - - if(!jarFilePath.toFile().exists()) - throw new Exception(jarFilePath +" not found. May be you did not packaged it by 'mvn package -DskipTests=true' first"); - - List classNames = Arrays.stream(runnerClass).map(c->"\""+c.getCanonicalName()+"\"").collect(Collectors.toList()); - String datasetsStr = ""; - - for(String dataSetPathStr : filesToAdd){ - - Path destPathRel = Paths.get(dataSetPathStr); - if(destPathRel.isAbsolute()) - destPathRel = getBuildDirectory().relativize(destPathRel); - - Path parent = destPathRel.getParent(); - List dirsToCreate = new ArrayList<>(); - if(Files.isDirectory(destPathRel)) - dirsToCreate.add(destPathRel.toString()); - while(parent!=null){ - dirsToCreate.add(parent.toString()); - parent=parent.getParent(); - } - - for(int i=dirsToCreate.size()-1; i>=0; i--){ - datasetsStr += "RUN mkdir -p "+dockerWorkDir.resolve(dirsToCreate.get(i))+"\n"; - } - - Path sourcePath = destPathRel; - String destPath = dockerWorkDir.resolve(destPathRel).toString(); - - if(sourcePath.toFile().isDirectory()){ - sourcePath = sourcePath.resolve("*"); - destPath+="/"; - }else { - if(sourcePath.getParent()!=null) - destPath = dockerWorkDir.resolve(sourcePath.getParent()).toString(); - else - destPath = dockerWorkDir.toString(); - } - datasetsStr += "ADD ./" + sourcePath + " " + destPath + "\n"; - } - - Path jarPathRel = jarFilePath; - if(jarPathRel.isAbsolute()) - jarPathRel = getBuildDirectory().relativize(jarFilePath); - - String content = - "FROM java\n" + - "RUN mkdir -p "+ dockerWorkDir +"\n" + - "WORKDIR "+ dockerWorkDir +"\n" + - datasetsStr+ - "ADD ./"+ jarPathRel +" "+ dockerWorkDir +"\n" + - "CMD [\"java\", \"-cp\", \""+ jarPathRel.getFileName() +"\", "+ String.join(",", classNames) +"]\n" - //"CMD [\"java\", \"-cp\", \""+ jarFilePath +"\", \""+runnerClass.getCanonicalName()+"\"]\n" - ; - dockerFileReader(new StringReader(content)); - return this; - } - - - - @Override - public BuildBasedDockerizer build() throws Exception { -// if(getDockerFileReader()==null) -// createDefaultReader(); - return super.build(); - } -} +package org.hobbit.sdk.docker.builders; + +import org.hobbit.sdk.docker.BuildBasedDockerizer; + +import java.io.Reader; +import java.io.StringReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author Pavel Smirnov + */ + +public class DynamicDockerFileBuilder extends BuildBasedDockersBuilder { + + private Class[] runnerClass; + private Path dockerWorkDir; + private Path jarFilePath; + private List filesToAdd; + + public DynamicDockerFileBuilder(String dockerizerName){ + super(dockerizerName); + filesToAdd = new ArrayList<>(); + } + + public DynamicDockerFileBuilder runnerClass(Class... values) { + this.runnerClass = values; + return this; + } + + public DynamicDockerFileBuilder dockerWorkDir(String value) { + this.dockerWorkDir = Paths.get(value); + return this; + } + + public DynamicDockerFileBuilder jarFilePath(String value) { + this.jarFilePath = Paths.get(value).toAbsolutePath(); + return this; + } + + public DynamicDockerFileBuilder useCachedImage(Boolean value) { + super.useCachedImage(value); + return this; + } + + public DynamicDockerFileBuilder useCachedContainer(Boolean value) { + super.useCachedContainer(value); + return this; + } + + public DynamicDockerFileBuilder customDockerFileReader(Reader value) { + super.dockerFileReader(value); + return this; + } + + public DynamicDockerFileBuilder imageName(String value) { + super.imageName(value); + return this; + } + + public DynamicDockerFileBuilder addFileOrFolder(String path) { + filesToAdd.add(path); + return this; + } + + private DynamicDockerFileBuilder initFileReader() throws Exception { + if(runnerClass==null) + throw new Exception("Runner class is not specified for "+this.getClass().getSimpleName()); + + if(dockerWorkDir ==null) + throw new Exception("WorkingDirName class is not specified for "+this.getClass().getSimpleName()); + + if(jarFilePath ==null) + throw new Exception("JarFileName class is not specified for "+this.getClass().getSimpleName()); + + if(!jarFilePath.toFile().exists()) + throw new Exception(jarFilePath +" not found. May be you did not packaged it by 'mvn package -DskipTests=true' first"); + + List classNames = Arrays.stream(runnerClass).map(c->"\""+c.getCanonicalName()+"\"").collect(Collectors.toList()); + String datasetsStr = ""; + + for(String dataSetPathStr : filesToAdd){ + + Path destPathRel = Paths.get(dataSetPathStr); + if(destPathRel.isAbsolute()) + destPathRel = getBuildDirectory().relativize(destPathRel); + + Path parent = destPathRel.getParent(); + List dirsToCreate = new ArrayList<>(); + if(Files.isDirectory(destPathRel)) + dirsToCreate.add(destPathRel.toString()); + while(parent!=null){ + dirsToCreate.add(parent.toString()); + parent=parent.getParent(); + } + + for(int i=dirsToCreate.size()-1; i>=0; i--){ + datasetsStr += "RUN mkdir -p "+dockerWorkDir.resolve(dirsToCreate.get(i))+"\n"; + } + + Path sourcePath = destPathRel; + String destPath = dockerWorkDir.resolve(destPathRel).toString(); + + if(sourcePath.toFile().isDirectory()){ + sourcePath = sourcePath.resolve("*"); + destPath+="/"; + }else { + if(sourcePath.getParent()!=null) + destPath = dockerWorkDir.resolve(sourcePath.getParent()).toString(); + else + destPath = dockerWorkDir.toString(); + } + datasetsStr += "ADD ./" + sourcePath + " " + destPath + "\n"; + } + + Path jarPathRel = jarFilePath; + if(jarPathRel.isAbsolute()) + jarPathRel = getBuildDirectory().relativize(jarFilePath); + + String content = + "FROM java\n" + + "RUN mkdir -p "+ dockerWorkDir +"\n" + + "WORKDIR "+ dockerWorkDir +"\n" + + datasetsStr+ + "ADD ./"+ jarPathRel +" "+ dockerWorkDir +"\n" + + "CMD [\"java\", \"-cp\", \""+ jarPathRel.getFileName() +"\", "+ String.join(",", classNames) +"]\n" + //"CMD [\"java\", \"-cp\", \""+ jarFilePath +"\", \""+runnerClass.getCanonicalName()+"\"]\n" + ; + dockerFileReader(new StringReader(content)); + return this; + } + + @Override + public BuildBasedDockerizer build() throws Exception { + if(getDockerFileReader()==null) + initFileReader(); + return super.build(); + } +} diff --git a/src/main/java/org/hobbit/sdk/docker/builders/common/PullBasedDockersBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/PullBasedDockersBuilder.java similarity index 88% rename from src/main/java/org/hobbit/sdk/docker/builders/common/PullBasedDockersBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/PullBasedDockersBuilder.java index fc0c5e2b..1381f022 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/common/PullBasedDockersBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/PullBasedDockersBuilder.java @@ -1,4 +1,4 @@ -package org.hobbit.sdk.docker.builders.common; +package org.hobbit.sdk.docker.builders; import org.hobbit.sdk.docker.PullBasedDockerizer; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/BenchmarkDockerBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/BenchmarkDockerBuilder.java similarity index 73% rename from src/main/java/org/hobbit/sdk/docker/builders/BenchmarkDockerBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/hobbit/BenchmarkDockerBuilder.java index b82bb4f2..106dce8e 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/BenchmarkDockerBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/BenchmarkDockerBuilder.java @@ -1,11 +1,7 @@ -package org.hobbit.sdk.docker.builders; - -import org.hobbit.sdk.JenaKeyValue; -import org.hobbit.sdk.docker.AbstractDockerizer; -import org.hobbit.sdk.docker.builders.common.AbstractDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BothTypesDockersBuilder; -import org.hobbit.sdk.docker.builders.common.DynamicDockerFileBuilder; -import org.hobbit.sdk.docker.builders.common.PullBasedDockersBuilder; +package org.hobbit.sdk.docker.builders.hobbit; + +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import org.hobbit.sdk.docker.builders.BothTypesDockersBuilder; import static org.hobbit.core.Constants.*; import static org.hobbit.sdk.CommonConstants.*; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/DataGenDockerBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/DataGenDockerBuilder.java similarity index 77% rename from src/main/java/org/hobbit/sdk/docker/builders/DataGenDockerBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/hobbit/DataGenDockerBuilder.java index 9134adc1..26b817cf 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/DataGenDockerBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/DataGenDockerBuilder.java @@ -1,9 +1,7 @@ -package org.hobbit.sdk.docker.builders; +package org.hobbit.sdk.docker.builders.hobbit; -import org.hobbit.sdk.docker.builders.common.AbstractDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BothTypesDockersBuilder; -import org.hobbit.sdk.docker.builders.common.DynamicDockerFileBuilder; -import org.hobbit.sdk.docker.builders.common.PullBasedDockersBuilder; +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import org.hobbit.sdk.docker.builders.BothTypesDockersBuilder; import static org.hobbit.core.Constants.*; import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/EvalModuleDockerBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/EvalModuleDockerBuilder.java similarity index 73% rename from src/main/java/org/hobbit/sdk/docker/builders/EvalModuleDockerBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/hobbit/EvalModuleDockerBuilder.java index 9d70c047..d6c54408 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/EvalModuleDockerBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/EvalModuleDockerBuilder.java @@ -1,40 +1,37 @@ -package org.hobbit.sdk.docker.builders; - -import org.hobbit.sdk.CommonConstants; -import org.hobbit.sdk.docker.builders.common.AbstractDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BothTypesDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BuildBasedDockersBuilder; -import org.hobbit.sdk.docker.builders.common.DynamicDockerFileBuilder; - -import static org.hobbit.core.Constants.*; -import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; - - -/** - * @author Pavel Smirnov - */ - -public class EvalModuleDockerBuilder extends BothTypesDockersBuilder { - private static final String name = "eval-module"; - - public EvalModuleDockerBuilder(AbstractDockersBuilder builder) { - super(builder); - } - - - @Override - public void addEnvVars(AbstractDockersBuilder ret) { - ret.addEnvironmentVariable(RABBIT_MQ_HOST_NAME_KEY, (String)System.getenv().get(RABBIT_MQ_HOST_NAME_KEY)); - ret.addEnvironmentVariable(HOBBIT_SESSION_ID_KEY, (String)System.getenv().get(HOBBIT_SESSION_ID_KEY)); - ret.addNetworks(HOBBIT_NETWORKS); - - ret.addEnvironmentVariable(HOBBIT_EXPERIMENT_URI_KEY, (String)System.getenv().get(HOBBIT_EXPERIMENT_URI_KEY)); - ret.addEnvironmentVariable(CONTAINER_NAME_KEY, ret.getContainerName()); - } - - @Override - public String getName() { - return name; - } - -} +package org.hobbit.sdk.docker.builders.hobbit; + +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import org.hobbit.sdk.docker.builders.BothTypesDockersBuilder; + +import static org.hobbit.core.Constants.*; +import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; + + +/** + * @author Pavel Smirnov + */ + +public class EvalModuleDockerBuilder extends BothTypesDockersBuilder { + private static final String name = "eval-module"; + + public EvalModuleDockerBuilder(AbstractDockersBuilder builder) { + super(builder); + } + + + @Override + public void addEnvVars(AbstractDockersBuilder ret) { + ret.addEnvironmentVariable(RABBIT_MQ_HOST_NAME_KEY, (String)System.getenv().get(RABBIT_MQ_HOST_NAME_KEY)); + ret.addEnvironmentVariable(HOBBIT_SESSION_ID_KEY, (String)System.getenv().get(HOBBIT_SESSION_ID_KEY)); + ret.addNetworks(HOBBIT_NETWORKS); + + ret.addEnvironmentVariable(HOBBIT_EXPERIMENT_URI_KEY, (String)System.getenv().get(HOBBIT_EXPERIMENT_URI_KEY)); + ret.addEnvironmentVariable(CONTAINER_NAME_KEY, ret.getContainerName()); + } + + @Override + public String getName() { + return name; + } + +} diff --git a/src/main/java/org/hobbit/sdk/docker/builders/EvalStorageDockerBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/EvalStorageDockerBuilder.java similarity index 77% rename from src/main/java/org/hobbit/sdk/docker/builders/EvalStorageDockerBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/hobbit/EvalStorageDockerBuilder.java index 48c1fc14..44dd4700 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/EvalStorageDockerBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/EvalStorageDockerBuilder.java @@ -1,9 +1,7 @@ -package org.hobbit.sdk.docker.builders; +package org.hobbit.sdk.docker.builders.hobbit; -import org.hobbit.sdk.docker.builders.common.AbstractDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BothTypesDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BuildBasedDockersBuilder; -import org.hobbit.sdk.docker.builders.common.DynamicDockerFileBuilder; +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import org.hobbit.sdk.docker.builders.BothTypesDockersBuilder; import static org.hobbit.core.Constants.*; import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; diff --git a/src/main/java/org/hobbit/sdk/docker/builders/SystemAdapterDockerBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/SystemAdapterDockerBuilder.java similarity index 77% rename from src/main/java/org/hobbit/sdk/docker/builders/SystemAdapterDockerBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/hobbit/SystemAdapterDockerBuilder.java index 5f2c474f..c4352c13 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/SystemAdapterDockerBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/SystemAdapterDockerBuilder.java @@ -1,51 +1,47 @@ -package org.hobbit.sdk.docker.builders; - -import org.hobbit.sdk.CommonConstants; -import org.hobbit.sdk.JenaKeyValue; -import org.hobbit.sdk.docker.builders.common.AbstractDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BothTypesDockersBuilder; -import org.hobbit.sdk.docker.builders.common.BuildBasedDockersBuilder; -import org.hobbit.sdk.docker.builders.common.DynamicDockerFileBuilder; - -import static org.hobbit.core.Constants.*; -import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; - - -/** - * @author Pavel Smirnov - */ - -public class SystemAdapterDockerBuilder extends BothTypesDockersBuilder { - private static final String name = "system-adapter"; -// private String parameters = new JenaKeyValue().encodeToString(); - - public SystemAdapterDockerBuilder(AbstractDockersBuilder builder) { - super(builder); - - } - -// public SystemAdapterDockerBuilder parameters(String parameters){ -// this.parameters = parameters; -// return this; -// } -// -// public SystemAdapterDockerBuilder parameters(JenaKeyValue parameters){ -// this.parameters = parameters.encodeToString(); -// return this; -// } - - @Override - public void addEnvVars(AbstractDockersBuilder ret) { - ret.addEnvironmentVariable(RABBIT_MQ_HOST_NAME_KEY, (String)System.getenv().get(RABBIT_MQ_HOST_NAME_KEY)); - ret.addEnvironmentVariable(HOBBIT_SESSION_ID_KEY, (String)System.getenv().get(HOBBIT_SESSION_ID_KEY)); - ret.addNetworks(HOBBIT_NETWORKS); - - ret.addEnvironmentVariable(SYSTEM_PARAMETERS_MODEL_KEY, (String)System.getenv().get(SYSTEM_PARAMETERS_MODEL_KEY)); - ret.addEnvironmentVariable(CONTAINER_NAME_KEY, ret.getContainerName()); - } - - @Override - public String getName() { - return name; - } -} +package org.hobbit.sdk.docker.builders.hobbit; + +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import org.hobbit.sdk.docker.builders.BothTypesDockersBuilder; + +import static org.hobbit.core.Constants.*; +import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; + + +/** + * @author Pavel Smirnov + */ + +public class SystemAdapterDockerBuilder extends BothTypesDockersBuilder { + private static final String name = "system-adapter"; +// private String parameters = new JenaKeyValue().encodeToString(); + + public SystemAdapterDockerBuilder(AbstractDockersBuilder builder) { + super(builder); + + } + +// public SystemAdapterDockerBuilder parameters(String parameters){ +// this.parameters = parameters; +// return this; +// } +// +// public SystemAdapterDockerBuilder parameters(JenaKeyValue parameters){ +// this.parameters = parameters.encodeToString(); +// return this; +// } + + @Override + public void addEnvVars(AbstractDockersBuilder ret) { + ret.addEnvironmentVariable(RABBIT_MQ_HOST_NAME_KEY, (String)System.getenv().get(RABBIT_MQ_HOST_NAME_KEY)); + ret.addEnvironmentVariable(HOBBIT_SESSION_ID_KEY, (String)System.getenv().get(HOBBIT_SESSION_ID_KEY)); + ret.addNetworks(HOBBIT_NETWORKS); + + ret.addEnvironmentVariable(SYSTEM_PARAMETERS_MODEL_KEY, (String)System.getenv().get(SYSTEM_PARAMETERS_MODEL_KEY)); + ret.addEnvironmentVariable(CONTAINER_NAME_KEY, ret.getContainerName()); + } + + @Override + public String getName() { + return name; + } +} diff --git a/src/main/java/org/hobbit/sdk/docker/builders/TaskGenDockerBuilder.java b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/TaskGenDockerBuilder.java similarity index 83% rename from src/main/java/org/hobbit/sdk/docker/builders/TaskGenDockerBuilder.java rename to src/main/java/org/hobbit/sdk/docker/builders/hobbit/TaskGenDockerBuilder.java index 738a5ab0..b0253096 100644 --- a/src/main/java/org/hobbit/sdk/docker/builders/TaskGenDockerBuilder.java +++ b/src/main/java/org/hobbit/sdk/docker/builders/hobbit/TaskGenDockerBuilder.java @@ -1,39 +1,39 @@ -package org.hobbit.sdk.docker.builders; - -import org.hobbit.sdk.CommonConstants; -import org.hobbit.sdk.docker.builders.common.*; - -import static org.hobbit.core.Constants.*; -import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; - - -/** - * @author Pavel Smirnov - */ - -public class TaskGenDockerBuilder extends BothTypesDockersBuilder { - private static final String name = "task-generator"; - - public TaskGenDockerBuilder(AbstractDockersBuilder builder) { - super(builder); - } - - @Override - public void addEnvVars(AbstractDockersBuilder ret) { - ret.addEnvironmentVariable(RABBIT_MQ_HOST_NAME_KEY, (String)System.getenv().get(RABBIT_MQ_HOST_NAME_KEY)); - ret.addEnvironmentVariable(HOBBIT_SESSION_ID_KEY, (String)System.getenv().get(HOBBIT_SESSION_ID_KEY)); - ret.addNetworks(HOBBIT_NETWORKS); - - ret.addEnvironmentVariable(GENERATOR_ID_KEY, (String)System.getenv().get(GENERATOR_ID_KEY)); - ret.addEnvironmentVariable(GENERATOR_COUNT_KEY, (String)System.getenv().get(GENERATOR_COUNT_KEY)); - ret.addEnvironmentVariable(CONTAINER_NAME_KEY, ret.getContainerName()); - } - - @Override - public String getName() { - return name; - } -} - - - +package org.hobbit.sdk.docker.builders.hobbit; + +import org.hobbit.sdk.docker.builders.AbstractDockersBuilder; +import org.hobbit.sdk.docker.builders.BothTypesDockersBuilder; + +import static org.hobbit.core.Constants.*; +import static org.hobbit.sdk.CommonConstants.HOBBIT_NETWORKS; + + +/** + * @author Pavel Smirnov + */ + +public class TaskGenDockerBuilder extends BothTypesDockersBuilder { + private static final String name = "task-generator"; + + public TaskGenDockerBuilder(AbstractDockersBuilder builder) { + super(builder); + } + + @Override + public void addEnvVars(AbstractDockersBuilder ret) { + ret.addEnvironmentVariable(RABBIT_MQ_HOST_NAME_KEY, (String)System.getenv().get(RABBIT_MQ_HOST_NAME_KEY)); + ret.addEnvironmentVariable(HOBBIT_SESSION_ID_KEY, (String)System.getenv().get(HOBBIT_SESSION_ID_KEY)); + ret.addNetworks(HOBBIT_NETWORKS); + + ret.addEnvironmentVariable(GENERATOR_ID_KEY, (String)System.getenv().get(GENERATOR_ID_KEY)); + ret.addEnvironmentVariable(GENERATOR_COUNT_KEY, (String)System.getenv().get(GENERATOR_COUNT_KEY)); + ret.addEnvironmentVariable(CONTAINER_NAME_KEY, ret.getContainerName()); + } + + @Override + public String getName() { + return name; + } +} + + + diff --git a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyBenchmarkController.java b/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyBenchmarkController.java index 6aded81a..c799874f 100644 --- a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyBenchmarkController.java +++ b/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyBenchmarkController.java @@ -11,6 +11,7 @@ import static org.hobbit.sdk.examples.dummybenchmark.docker.DummyDockersBuilder.*; + /** * This code is here just for testing and debugging the SDK. * For your projects please use code from the https://github.com/hobbit-project/java-sdk-example diff --git a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyDataGenerator.java b/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyDataGenerator.java index 92ae7384..e78039a6 100644 --- a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyDataGenerator.java +++ b/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyDataGenerator.java @@ -18,7 +18,7 @@ public class DummyDataGenerator extends AbstractDataGenerator { @Override public void init() throws Exception { - // Always init the super class first! + // Always initFileReader the super class first! super.init(); logger.debug("Init()"); diff --git a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyTaskGenerator.java b/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyTaskGenerator.java index 7c7989ca..624507ce 100644 --- a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyTaskGenerator.java +++ b/src/main/java/org/hobbit/sdk/examples/dummybenchmark/DummyTaskGenerator.java @@ -18,7 +18,7 @@ public class DummyTaskGenerator extends AbstractTaskGenerator { @Override public void init() throws Exception { - // Always init the super class first! + // Always initFileReader the super class first! super.init(); logger.debug("Init()"); if(System.getenv().containsKey(EXPERIMENT_URI+"/benchmarkParam1")){ diff --git a/src/test/java/org/hobbit/sdk/BuildBasedDockerizerTest.java b/src/test/java/org/hobbit/sdk/BuildBasedDockerizerTest.java index b5de26c5..e258527b 100644 --- a/src/test/java/org/hobbit/sdk/BuildBasedDockerizerTest.java +++ b/src/test/java/org/hobbit/sdk/BuildBasedDockerizerTest.java @@ -2,7 +2,7 @@ import org.hobbit.sdk.docker.AbstractDockerizer; import org.hobbit.sdk.docker.BuildBasedDockerizer; -import org.hobbit.sdk.docker.builders.common.BuildBasedDockersBuilder; +import org.hobbit.sdk.docker.builders.BuildBasedDockersBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; diff --git a/src/test/java/org/hobbit/sdk/DummyBenchmarkDockerizedTest.java b/src/test/java/org/hobbit/sdk/DummyBenchmarkDockerizedTest.java deleted file mode 100644 index 6ca5ba6d..00000000 --- a/src/test/java/org/hobbit/sdk/DummyBenchmarkDockerizedTest.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.hobbit.sdk; - -import org.hobbit.core.components.Component; -import org.hobbit.sdk.docker.AbstractDockerizer; -import org.hobbit.sdk.docker.RabbitMqDockerizer; -import org.hobbit.sdk.docker.builders.*; -import org.hobbit.sdk.examples.dummybenchmark.*; -import org.hobbit.sdk.examples.dummybenchmark.docker.DummyDockersBuilder; -import org.hobbit.sdk.utils.CommandQueueListener; -import org.hobbit.sdk.utils.commandreactions.MultipleCommandsReaction; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Date; - -import static org.hobbit.sdk.CommonConstants.EXPERIMENT_URI; -import static org.hobbit.sdk.examples.dummybenchmark.docker.DummyDockersBuilder.*; - -/** - * @author Pavel Smirnov - * This code here is just for testing and debugging SDK. - * For your projects please use code from the https://github.com/hobbit-project/java-sdk-example - */ - -public class DummyBenchmarkDockerizedTest extends EnvironmentVariablesWrapper { - - private RabbitMqDockerizer rabbitMqDockerizer; - private ComponentsExecutor componentsExecutor; - private CommandQueueListener commandQueueListener; - - BenchmarkDockerBuilder benchmarkBuilder; - DataGenDockerBuilder dataGeneratorBuilder; - TaskGenDockerBuilder taskGeneratorBuilder; - EvalStorageDockerBuilder evalStorageBuilder; - SystemAdapterDockerBuilder systemAdapterBuilder; - EvalModuleDockerBuilder evalModuleBuilder; - - Component benchmarkController; - Component dataGen; - Component taskGen; - Component evalStorage; - Component evalModule; - Component systemAdapter; - - public void init(Boolean useCachedImages) throws Exception { - - rabbitMqDockerizer = RabbitMqDockerizer.builder().build(); - - setupCommunicationEnvironmentVariables(rabbitMqDockerizer.getHostName(), "session_"+String.valueOf(new Date().getTime())); - setupBenchmarkEnvironmentVariables(EXPERIMENT_URI, createBenchmarkParameters()); - setupGeneratorEnvironmentVariables(1,1); - setupSystemEnvironmentVariables(SYSTEM_URI, createSystemParameters()); - - benchmarkBuilder = new BenchmarkDockerBuilder(new DummyDockersBuilder(DummyBenchmarkController.class, DUMMY_BENCHMARK_IMAGE_NAME).useCachedImage(useCachedImages).init()); - dataGeneratorBuilder = new DataGenDockerBuilder(new DummyDockersBuilder(DummyDataGenerator.class, DUMMY_DATAGEN_IMAGE_NAME).useCachedImage(useCachedImages).addFileOrFolder("data").init()); - taskGeneratorBuilder = new TaskGenDockerBuilder(new DummyDockersBuilder(DummyTaskGenerator.class, DUMMY_TASKGEN_IMAGE_NAME).useCachedImage(useCachedImages).init()); - - evalStorageBuilder = new EvalStorageDockerBuilder(new DummyDockersBuilder(InMemoryEvalStorage.class, DUMMY_EVAL_STORAGE_IMAGE_NAME).useCachedImage(useCachedImages).init()); - - systemAdapterBuilder = new SystemAdapterDockerBuilder(new DummyDockersBuilder(DummySystemAdapter.class, DUMMY_SYSTEM_IMAGE_NAME).useCachedImage(useCachedImages).init()); - evalModuleBuilder = new EvalModuleDockerBuilder(new DummyDockersBuilder(DummyEvalModule.class, DUMMY_EVALMODULE_IMAGE_NAME).useCachedImage(useCachedImages).init()); - - benchmarkController = benchmarkBuilder.build(); - dataGen = new DummyDataGenerator(); - //dataGen = dataGeneratorBuilder.build(); - taskGen = taskGeneratorBuilder.build(); - evalStorage = evalStorageBuilder.build(); - evalModule = evalModuleBuilder.build(); - systemAdapter = systemAdapterBuilder.build(); - } - - @Test - @Ignore - public void buildImages() throws Exception { - - init(false); - - ((AbstractDockerizer)benchmarkController).prepareImage(); - ((AbstractDockerizer)dataGen).prepareImage(); - ((AbstractDockerizer)taskGen).prepareImage(); - ((AbstractDockerizer)evalStorage).prepareImage(); - ((AbstractDockerizer)systemAdapter).prepareImage(); - ((AbstractDockerizer)evalModule).prepareImage(); - } - - @Test - public void checkHealth() throws Exception { - - Boolean useCachedImages = true; - - init(useCachedImages); - - commandQueueListener = new CommandQueueListener(); - componentsExecutor = new ComponentsExecutor(commandQueueListener, environmentVariables); - - rabbitMqDockerizer.run(); - - - commandQueueListener.setCommandReactions( - new MultipleCommandsReaction(componentsExecutor, commandQueueListener) - .dataGenerator(dataGen).dataGeneratorImageName(dataGeneratorBuilder.getImageName()) - .taskGenerator(taskGen).taskGeneratorImageName(taskGeneratorBuilder.getImageName()) - .evalStorage(evalStorage).evalStorageImageName(evalStorageBuilder.getImageName()) - .evalModule(evalModule).evalModuleImageName(evalModuleBuilder.getImageName()) - .systemContainerId(systemAdapterBuilder.getImageName()) - ); - - componentsExecutor.submit(commandQueueListener); - commandQueueListener.waitForInitialisation(); - - //you can run clear java-code instead of dockerized one - - //benchmarkController = new DummyBenchmarkController(); - //systemAdapter = new DummySystemAdapter(); - - componentsExecutor.submit(benchmarkController); - componentsExecutor.submit(systemAdapter, systemAdapterBuilder.getImageName()); - - commandQueueListener.waitForTermination(); - commandQueueListener.terminate(); - componentsExecutor.shutdown(); - - rabbitMqDockerizer.stop(); - - Assert.assertFalse(componentsExecutor.anyExceptions()); - } - - - public JenaKeyValue createBenchmarkParameters(){ - JenaKeyValue kv = new JenaKeyValue(); - kv.setValue(BENCHMARK_URI+"benchmarkParam1", 123); - kv.setValue(BENCHMARK_URI+"benchmarkParam2", 456); - return kv; - } - - public JenaKeyValue createSystemParameters(){ - JenaKeyValue kv = new JenaKeyValue(); - kv.setValue(SYSTEM_URI+"systemParam1", 123); - return kv; - } - - -} diff --git a/src/test/java/org/hobbit/sdk/DummyBenchmarkTest.java b/src/test/java/org/hobbit/sdk/DummyBenchmarkTest.java index 2c6053bb..818615ca 100644 --- a/src/test/java/org/hobbit/sdk/DummyBenchmarkTest.java +++ b/src/test/java/org/hobbit/sdk/DummyBenchmarkTest.java @@ -1,22 +1,20 @@ package org.hobbit.sdk; -import org.hobbit.core.Constants; import org.hobbit.core.components.Component; import org.hobbit.sdk.docker.AbstractDockerizer; import org.hobbit.sdk.docker.RabbitMqDockerizer; +import org.hobbit.sdk.docker.builders.hobbit.*; import org.hobbit.sdk.examples.dummybenchmark.*; +import org.hobbit.sdk.examples.dummybenchmark.docker.*; import org.hobbit.sdk.utils.CommandQueueListener; import org.hobbit.sdk.utils.commandreactions.MultipleCommandsReaction; - import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import java.util.Date; -import static org.hobbit.core.Constants.BENCHMARK_PARAMETERS_MODEL_KEY; -import static org.hobbit.core.Constants.EXPERIMENT_URI_NS; -import static org.hobbit.core.Constants.SYSTEM_PARAMETERS_MODEL_KEY; -import static org.hobbit.sdk.CommonConstants.*; +import static org.hobbit.sdk.CommonConstants.EXPERIMENT_URI; import static org.hobbit.sdk.examples.dummybenchmark.docker.DummyDockersBuilder.*; /** @@ -27,67 +25,122 @@ public class DummyBenchmarkTest extends EnvironmentVariablesWrapper { - private AbstractDockerizer rabbitMqDockerizer; + private RabbitMqDockerizer rabbitMqDockerizer; private ComponentsExecutor componentsExecutor; private CommandQueueListener commandQueueListener; - Component benchmark = new DummyBenchmarkController(); - Component datagen = new DummyDataGenerator(); - Component taskgen = new DummyTaskGenerator(); - Component evalstorage = new InMemoryEvalStorage(); - Component system = new DummySystemAdapter(); - Component evalmodule = new DummyEvalModule(); + BenchmarkDockerBuilder benchmarkBuilder; + DataGenDockerBuilder dataGeneratorBuilder; + TaskGenDockerBuilder taskGeneratorBuilder; + EvalStorageDockerBuilder evalStorageBuilder; + SystemAdapterDockerBuilder systemAdapterBuilder; + EvalModuleDockerBuilder evalModuleBuilder; + + public void init(Boolean useCachedImages) throws Exception { + + benchmarkBuilder = new BenchmarkDockerBuilder(new DummyDockersBuilder(DummyBenchmarkController.class, DUMMY_BENCHMARK_IMAGE_NAME).useCachedImage(useCachedImages)); + dataGeneratorBuilder = new DataGenDockerBuilder(new DummyDockersBuilder(DummyDataGenerator.class, DUMMY_DATAGEN_IMAGE_NAME).useCachedImage(useCachedImages).addFileOrFolder("data")); + taskGeneratorBuilder = new TaskGenDockerBuilder(new DummyDockersBuilder(DummyTaskGenerator.class, DUMMY_TASKGEN_IMAGE_NAME).useCachedImage(useCachedImages)); + evalStorageBuilder = new EvalStorageDockerBuilder(new DummyDockersBuilder(InMemoryEvalStorage.class, DUMMY_EVAL_STORAGE_IMAGE_NAME).useCachedImage(useCachedImages)); + systemAdapterBuilder = new SystemAdapterDockerBuilder(new DummyDockersBuilder(DummySystemAdapter.class, DUMMY_SYSTEM_IMAGE_NAME).useCachedImage(useCachedImages)); + evalModuleBuilder = new EvalModuleDockerBuilder(new DummyDockersBuilder(DummyEvalModule.class, DUMMY_EVALMODULE_IMAGE_NAME).useCachedImage(useCachedImages)); + } @Test - public void checkHealth() throws Exception { + @Ignore + public void buildImages() throws Exception { + + init(false); + ((AbstractDockerizer)benchmarkBuilder.build()).prepareImage(); + ((AbstractDockerizer)dataGeneratorBuilder.build()).prepareImage(); + ((AbstractDockerizer)taskGeneratorBuilder.build()).prepareImage(); + ((AbstractDockerizer)evalStorageBuilder.build()).prepareImage(); + ((AbstractDockerizer)evalModuleBuilder.build()).prepareImage(); + ((AbstractDockerizer)systemAdapterBuilder.build()).prepareImage(); + } - commandQueueListener = new CommandQueueListener(); - componentsExecutor = new ComponentsExecutor(commandQueueListener, environmentVariables); + @Test + public void checkHealth() throws Exception{ + checkHealth(false); + } - rabbitMqDockerizer = RabbitMqDockerizer.builder() - .build(); - rabbitMqDockerizer.run(); + @Test + public void checkHealthDockerized() throws Exception{ + checkHealth(true); + } + + private void checkHealth(Boolean dockerize) throws Exception { + + Boolean useCachedImages = true; + + init(useCachedImages); + + rabbitMqDockerizer = RabbitMqDockerizer.builder().build(); - String systemContainerId = "exampleSystem"; setupCommunicationEnvironmentVariables(rabbitMqDockerizer.getHostName(), "session_"+String.valueOf(new Date().getTime())); setupBenchmarkEnvironmentVariables(EXPERIMENT_URI, createBenchmarkParameters()); + setupGeneratorEnvironmentVariables(1,1); setupSystemEnvironmentVariables(SYSTEM_URI, createSystemParameters()); + commandQueueListener = new CommandQueueListener(); + componentsExecutor = new ComponentsExecutor(commandQueueListener, environmentVariables); + + rabbitMqDockerizer.run(); + + Component benchmarkController = new DummyBenchmarkController(); + Component dataGen = new DummyDataGenerator(); + Component taskGen = new DummyTaskGenerator(); + Component evalStorage = new InMemoryEvalStorage(); + Component evalModule = new DummyEvalModule(); + Component systemAdapter = new DummySystemAdapter(); + + if(dockerize) { + benchmarkController = benchmarkBuilder.build(); + dataGen = dataGeneratorBuilder.build(); + taskGen = taskGeneratorBuilder.build(); + evalStorage = evalStorageBuilder.build(); + evalModule = evalModuleBuilder.build(); + systemAdapter = systemAdapterBuilder.build(); + } + commandQueueListener.setCommandReactions( new MultipleCommandsReaction(componentsExecutor, commandQueueListener) - .dataGenerator(datagen).dataGeneratorImageName(DUMMY_DATAGEN_IMAGE_NAME) - .taskGenerator(taskgen).taskGeneratorImageName(DUMMY_TASKGEN_IMAGE_NAME) - .evalStorage(evalstorage).evalStorageImageName(DUMMY_EVAL_STORAGE_IMAGE_NAME) - .evalModule(evalmodule).evalModuleImageName(DUMMY_EVALMODULE_IMAGE_NAME) - .systemContainerId(systemContainerId) + .dataGenerator(dataGen).dataGeneratorImageName(dataGeneratorBuilder.getImageName()) + .taskGenerator(taskGen).taskGeneratorImageName(taskGeneratorBuilder.getImageName()) + .evalStorage(evalStorage).evalStorageImageName(evalStorageBuilder.getImageName()) + .evalModule(evalModule).evalModuleImageName(evalModuleBuilder.getImageName()) + .systemContainerId(systemAdapterBuilder.getImageName()) ); componentsExecutor.submit(commandQueueListener); commandQueueListener.waitForInitialisation(); - componentsExecutor.submit(benchmark); - componentsExecutor.submit(system, systemContainerId); + componentsExecutor.submit(benchmarkController); + componentsExecutor.submit(systemAdapter, systemAdapterBuilder.getImageName()); commandQueueListener.waitForTermination(); commandQueueListener.terminate(); componentsExecutor.shutdown(); - Assert.assertFalse(componentsExecutor.anyExceptions()); rabbitMqDockerizer.stop(); + + Assert.assertFalse(componentsExecutor.anyExceptions()); } public JenaKeyValue createBenchmarkParameters(){ - JenaKeyValue kv = new JenaKeyValue(EXPERIMENT_URI); - kv.setValue(BENCHMARK_URI+"/benchmarkParam1", 123); - kv.setValue(BENCHMARK_URI+"/benchmarkParam2", 456); + JenaKeyValue kv = new JenaKeyValue(); + kv.setValue(BENCHMARK_URI+"benchmarkParam1", 123); + kv.setValue(BENCHMARK_URI+"benchmarkParam2", 456); return kv; } public JenaKeyValue createSystemParameters(){ JenaKeyValue kv = new JenaKeyValue(); - kv.setValue(SYSTEM_URI+"/systemParam1", 123); + kv.setValue(SYSTEM_URI+"systemParam1", 123); return kv; } + + } diff --git a/src/test/java/org/hobbit/sdk/DummySystemTest.java b/src/test/java/org/hobbit/sdk/DummySystemTest.java deleted file mode 100644 index 7a616bc9..00000000 --- a/src/test/java/org/hobbit/sdk/DummySystemTest.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.hobbit.sdk; - -import org.hobbit.core.components.Component; -import org.hobbit.sdk.docker.AbstractDockerizer; -import org.hobbit.sdk.docker.RabbitMqDockerizer; -import org.hobbit.sdk.docker.builders.*; -import org.hobbit.sdk.docker.builders.common.PullBasedDockersBuilder; -import org.hobbit.sdk.examples.dummybenchmark.DummySystemAdapter; -import org.hobbit.sdk.examples.dummybenchmark.docker.DummyDockersBuilder; -import org.hobbit.sdk.utils.CommandQueueListener; -import org.hobbit.sdk.utils.commandreactions.MultipleCommandsReaction; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Date; - -import static org.hobbit.sdk.CommonConstants.*; -import static org.hobbit.sdk.examples.dummybenchmark.docker.DummyDockersBuilder.*; - - -/** - * @author Pavel Smirnov - * This code here is just for testing and debugging SDK. - * For your projects please use code from the https://github.com/hobbit-project/java-sdk-example - * - * - * This test shows how to debug your system under already published benchmark images (sml-v2 benchmark) - * if docker images of benchmarkController components are available online - * - * - */ - - -public class DummySystemTest extends EnvironmentVariablesWrapper { - - private RabbitMqDockerizer rabbitMqDockerizer; - private ComponentsExecutor componentsExecutor; - private CommandQueueListener commandQueueListener; - - - String benchmarkImageName = "git.project-hobbit.eu:4567/smirnp/sml-v2/benchmark-controller"; - String dataGeneratorImageName = "git.project-hobbit.eu:4567/smirnp/sml-v2/data-generator"; - String taskGeneratorImageName = "git.project-hobbit.eu:4567/smirnp/sml-v2/task-generator"; - String evalStorageImageName = "git.project-hobbit.eu:4567/smirnp/sml-v2/eval-storage"; - String evalModuleImageName = "git.project-hobbit.eu:4567/smirnp/sml-v2/eval-module"; - - BenchmarkDockerBuilder benchmarkBuilder; - DataGenDockerBuilder dataGeneratorBuilder; - TaskGenDockerBuilder taskGeneratorBuilder; - EvalStorageDockerBuilder evalStorageBuilder; - SystemAdapterDockerBuilder systemAdapterBuilder; - EvalModuleDockerBuilder evalModuleBuilder; - - Component benchmarkController; - Component dataGen; - Component taskGen; - Component evalStorage; - Component evalModule; - Component systemAdapter; - - - public void init(boolean useCachedImages) throws Exception { - - rabbitMqDockerizer = RabbitMqDockerizer.builder().build(); - - setupCommunicationEnvironmentVariables(rabbitMqDockerizer.getHostName(), "session_"+String.valueOf(new Date().getTime())); - setupBenchmarkEnvironmentVariables(EXPERIMENT_URI, createBenchmarkParameters()); - setupSystemEnvironmentVariables(SYSTEM_URI, createSystemParameters()); - - benchmarkBuilder = new BenchmarkDockerBuilder(new PullBasedDockersBuilder(benchmarkImageName)); - dataGeneratorBuilder = new DataGenDockerBuilder(new PullBasedDockersBuilder(dataGeneratorImageName)); - taskGeneratorBuilder = new TaskGenDockerBuilder(new PullBasedDockersBuilder(taskGeneratorImageName)); - evalStorageBuilder = new EvalStorageDockerBuilder(new PullBasedDockersBuilder(evalStorageImageName)); - evalModuleBuilder = new EvalModuleDockerBuilder(new PullBasedDockersBuilder(evalModuleImageName)); - - systemAdapterBuilder = new SystemAdapterDockerBuilder(new DummyDockersBuilder(DummySystemAdapter.class, DUMMY_SYSTEM_IMAGE_NAME).useCachedImage(useCachedImages).init()); - - benchmarkController = benchmarkBuilder.build(); - dataGen = dataGeneratorBuilder.build(); - taskGen = taskGeneratorBuilder.build(); - evalStorage = evalStorageBuilder.build(); - evalModule = evalModuleBuilder.build(); - systemAdapter = systemAdapterBuilder.build(); - } - - @Test - @Ignore - public void buildImages() throws Exception { - - init(false); - ((AbstractDockerizer)systemAdapter).prepareImage(); - } - - @Test - public void checkHealth() throws Exception { - - Boolean useCachedImages = true; - - init(useCachedImages); - - commandQueueListener = new CommandQueueListener(); - componentsExecutor = new ComponentsExecutor(commandQueueListener, environmentVariables); - - rabbitMqDockerizer.run(); - - commandQueueListener.setCommandReactions( - new MultipleCommandsReaction(componentsExecutor, commandQueueListener) - .dataGenerator(dataGen).dataGeneratorImageName(dataGeneratorBuilder.getImageName()) - .taskGenerator(taskGen).taskGeneratorImageName(taskGeneratorBuilder.getImageName()) - .evalStorage(evalStorage).evalStorageImageName(evalStorageBuilder.getImageName()) - .evalModule(evalModule).evalModuleImageName(evalModuleBuilder.getImageName()) - .systemContainerId(systemAdapterBuilder.getImageName()) - ); - - componentsExecutor.submit(commandQueueListener); - commandQueueListener.waitForInitialisation(); - - //Here you can switch between dockerized (by default) and pure java code of your system - //systemAdapter = new DummySystemAdapter(); - - componentsExecutor.submit(benchmarkController); - componentsExecutor.submit(systemAdapter, systemAdapterBuilder.getImageName()); - - commandQueueListener.waitForTermination(); - commandQueueListener.terminate(); - componentsExecutor.shutdown(); - - rabbitMqDockerizer.stop(); - - Assert.assertFalse(componentsExecutor.anyExceptions()); - } - - public JenaKeyValue createBenchmarkParameters(){ - JenaKeyValue kv = new JenaKeyValue(EXPERIMENT_URI); - kv.setValue(BENCHMARK_URI+"/benchmarkParam1", 123); - kv.setValue(BENCHMARK_URI+"/benchmarkParam2", 456); - return kv; - } - - public JenaKeyValue createSystemParameters(){ - JenaKeyValue kv = new JenaKeyValue(); - kv.setValue(SYSTEM_URI+"/systemParam1", 123); - return kv; - } - -} diff --git a/src/test/java/org/hobbit/sdk/RequiredArgumentsTest.java b/src/test/java/org/hobbit/sdk/RequiredArgumentsTest.java index a77333a9..e664ec06 100644 --- a/src/test/java/org/hobbit/sdk/RequiredArgumentsTest.java +++ b/src/test/java/org/hobbit/sdk/RequiredArgumentsTest.java @@ -2,7 +2,7 @@ import org.hobbit.sdk.docker.AbstractDockerizer; -import org.hobbit.sdk.docker.builders.common.BuildBasedDockersBuilder; +import org.hobbit.sdk.docker.builders.BuildBasedDockersBuilder; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/docker/DummyDockersBuilder.java b/src/test/java/org/hobbit/sdk/docker/DummyDockersBuilder.java similarity index 86% rename from src/main/java/org/hobbit/sdk/examples/dummybenchmark/docker/DummyDockersBuilder.java rename to src/test/java/org/hobbit/sdk/docker/DummyDockersBuilder.java index 4aa31cf8..1577906b 100644 --- a/src/main/java/org/hobbit/sdk/examples/dummybenchmark/docker/DummyDockersBuilder.java +++ b/src/test/java/org/hobbit/sdk/docker/DummyDockersBuilder.java @@ -1,45 +1,42 @@ -package org.hobbit.sdk.examples.dummybenchmark.docker; - -import org.hobbit.sdk.docker.builders.common.DynamicDockerFileBuilder; - - -/** - * @author Pavel Smirnov - * This code is here just for testing and debugging the SDK. - * For your projects please use code from the https://github.com/hobbit-project/java-sdk-example - */ - -//Common dockerizers builder for all components of your project -public class DummyDockersBuilder extends DynamicDockerFileBuilder { - - //public static final String GIT_REPO_PATH = "git.project-hobbit.eu:4567/smirnp/"; - public static final String GIT_REPO_PATH = ""; - public static final String PROJECT_NAME = "dummybenchmark/"; - - public static final String DUMMY_BENCHMARK_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"benchmark-controller"; - public static final String DUMMY_SYSTEM_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"system-adapter"; - - //use these constants within BenchmarkController - public static final String DUMMY_DATAGEN_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"datagen"; - public static final String DUMMY_TASKGEN_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"taskgen"; - public static final String DUMMY_EVAL_STORAGE_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"eval-storage"; - public static final String DUMMY_EVALMODULE_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"eval-module"; - - public static final String BENCHMARK_URI = "http://project-hobbit.eu/"+PROJECT_NAME; - public static final String SYSTEM_URI = "http://project-hobbit.eu/"+PROJECT_NAME+"system"; - - public DummyDockersBuilder(Class runnerClass, String imageName) { - super("DummyDockersBuilder"); - imageName(imageName); - buildDirectory("."); - jarFilePath("target/hobbit-java-sdk-1.1.0.jar"); - dockerWorkDir("/usr/src/"+PROJECT_NAME); - containerName(runnerClass.getSimpleName()); - runnerClass(org.hobbit.core.run.ComponentStarter.class, runnerClass); - } - - public DynamicDockerFileBuilder init() throws Exception { - return super.init(); - } - -} +package org.hobbit.sdk; + +import org.hobbit.sdk.docker.builders.DynamicDockerFileBuilder; + + +/** + * @author Pavel Smirnov + * This code is here just for testing and debugging the SDK. + * For your projects please use code from the https://github.com/hobbit-project/java-sdk-example + */ + +//Common dockerizers builder for all components of your project +public class DummyDockersBuilder extends DynamicDockerFileBuilder { + + //public static final String GIT_REPO_PATH = "git.project-hobbit.eu:4567/smirnp/"; + public static final String GIT_REPO_PATH = ""; + public static final String PROJECT_NAME = "dummybenchmark/"; + + public static final String DUMMY_BENCHMARK_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"benchmark-controller"; + public static final String DUMMY_SYSTEM_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"system-adapter"; + + //use these constants within BenchmarkController + public static final String DUMMY_DATAGEN_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"datagen"; + public static final String DUMMY_TASKGEN_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"taskgen"; + public static final String DUMMY_EVAL_STORAGE_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"eval-storage"; + public static final String DUMMY_EVALMODULE_IMAGE_NAME = GIT_REPO_PATH+PROJECT_NAME +"eval-module"; + + public static final String BENCHMARK_URI = "http://project-hobbit.eu/"+PROJECT_NAME; + public static final String SYSTEM_URI = "http://project-hobbit.eu/"+PROJECT_NAME+"system"; + + public DummyDockersBuilder(Class runnerClass, String imageName) { + super("DummyDockersBuilder"); + imageName(imageName); + buildDirectory("."); + jarFilePath("target/hobbit-java-sdk-1.1.1.jar"); + dockerWorkDir("/usr/src/"+PROJECT_NAME); + containerName(runnerClass.getSimpleName()); + runnerClass(org.hobbit.core.run.ComponentStarter.class, runnerClass); + } + + +}