getLabels() {
+ return labels;
+ }
+
+ /**
+ * Creates a new {@link Builder} instance to construct {@link ContainerCriteria} objects.
+ *
+ * @return a new {@link Builder}
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ @Override
+ public String toString() {
+ return "ContainerCriteria{" +
+ "containerId='" + containerId + '\'' +
+ ", containerName='" + containerName + '\'' +
+ ", labels=" + labels +
+ '}';
+ }
+}
diff --git a/platform-controller/src/main/java/org/hobbit/controller/data/ContainerCriteriaToServiceCriteriaMapper.java b/platform-controller/src/main/java/org/hobbit/controller/data/ContainerCriteriaToServiceCriteriaMapper.java
new file mode 100644
index 00000000..58297100
--- /dev/null
+++ b/platform-controller/src/main/java/org/hobbit/controller/data/ContainerCriteriaToServiceCriteriaMapper.java
@@ -0,0 +1,98 @@
+package org.hobbit.controller.data;
+
+import com.spotify.docker.client.messages.swarm.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collections;
+
+/**
+ * Maps Kubernetes-style {@link ContainerCriteria} to Docker Swarm {@link Service.Criteria}
+ * in order to enable service discovery or filtering across container orchestration platforms.
+ *
+ * This is particularly useful in hybrid environments or migration setups where systems
+ * originally designed for Kubernetes need to operate within a Docker Swarm context. It allows
+ * interoperability by translating container selection logic into the format understood by Docker clients.
+ *
+ * Mapping Logic:
+ *
+ * - {@code containerId} β {@code serviceId}
+ * - {@code containerName} β {@code serviceName}
+ * - {@code labels} β {@code labels}
+ *
+ *
+ * Note: This class logs an error and returns {@code null} if the input
+ * {@code ContainerCriteria} is {@code null}.
+ *
+ * Usage Example:
+ * {@code
+ * ContainerCriteria criteria = ContainerCriteria.builder()
+ * .withContainerId("12345")
+ * .withContainerName("my-service")
+ * .withLabel("app", "my-app")
+ * .build();
+ *
+ * Service.Criteria serviceCriteria = ContainerCriteriaToServiceCriteriaMapper.map(criteria);
+ * List services = dockerClient.listServices(serviceCriteria);
+ * }
+ * @author Farshad Afshari farshad.afshari@uni-paderborn.de
+ */
+
+public class ContainerCriteriaToServiceCriteriaMapper {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ContainerCriteriaToServiceCriteriaMapper.class);
+ public static Service.Criteria map(ContainerCriteria containerCriteria) {
+ if (containerCriteria == null) {
+ LOGGER.error("containerCriteria is null can not map it to ServiceCriteria");
+ return null;
+ }
+
+ Service.Criteria.Builder builder = Service.Criteria.builder();
+
+ if (containerCriteria.getContainerId() != null) {
+ // map container ID to service
+ builder.serviceId(containerCriteria.getContainerId());
+ // also is possible to use labels like bellow
+ //builder.labels(Collections.singletonMap("container_id", containerCriteria.getContainerId()));
+ }
+
+ if (containerCriteria.getContainerName() != null) {
+ //map container ID to service ID
+ builder.serviceName(containerCriteria.getContainerName());
+ //same as ID we can use label if need
+ //builder.labels(Collections.singletonMap("container_name", containerCriteria.getContainerName()));
+ }
+
+ if (containerCriteria.getLabels() != null && !containerCriteria.getLabels().isEmpty()) {
+ builder.labels(containerCriteria.getLabels());
+ }
+
+ return builder.build();
+ }
+
+
+ public static void main(String[] args) {
+ // Example Usage
+ ContainerCriteria criteria = ContainerCriteria.builder()
+ .withContainerId("12345")
+ .withContainerName("my-service")
+ .withLabel("app", "my-app")
+ .build();
+
+ Service.Criteria serviceCriteria = map(criteria);
+
+ if (serviceCriteria != null) {
+ System.out.println(serviceCriteria.labels()); // Print the labels for verification
+ }
+
+ ContainerCriteria criteria2 = ContainerCriteria.builder()
+ .withLabels(Collections.singletonMap("env", "prod"))
+ .build();
+
+ Service.Criteria serviceCriteria2 = map(criteria2);
+
+ if (serviceCriteria2 != null) {
+ System.out.println(serviceCriteria2.labels()); // Print the labels for verification
+ }
+
+ }
+}
diff --git a/platform-controller/src/main/java/org/hobbit/controller/data/ExperimentStatus.java b/platform-controller/src/main/java/org/hobbit/controller/data/ExperimentStatus.java
index 6ee359fb..7a41efb3 100644
--- a/platform-controller/src/main/java/org/hobbit/controller/data/ExperimentStatus.java
+++ b/platform-controller/src/main/java/org/hobbit/controller/data/ExperimentStatus.java
@@ -35,8 +35,8 @@
import org.apache.jena.vocabulary.RDF;
import org.hobbit.controller.ExperimentManager;
import org.hobbit.controller.PlatformController;
-import org.hobbit.controller.docker.ImageManager;
-import org.hobbit.controller.docker.MetaDataFactory;
+import org.hobbit.controller.containers.ImageManager;
+import org.hobbit.controller.containers.MetaDataFactory;
import org.hobbit.controller.execute.ExperimentAbortTimerTask;
import org.hobbit.core.rabbit.RabbitMQUtils;
import org.hobbit.vocab.HOBBIT;
@@ -598,7 +598,7 @@ public void addMetaDataToResult(ImageManager imageManager, long endTimeStamp,
/**
* Returns the next error report ID for this experiment. Note that each call of
* this method increases the error ID counter internally.
- *
+ *
* @return the next error report ID for this experiment
*/
public int getNextErrorReportId() {
diff --git a/platform-controller/src/main/java/org/hobbit/controller/data/NodeHardwareInformation.java b/platform-controller/src/main/java/org/hobbit/controller/data/NodeHardwareInformation.java
index 83ac5834..654a68d9 100644
--- a/platform-controller/src/main/java/org/hobbit/controller/data/NodeHardwareInformation.java
+++ b/platform-controller/src/main/java/org/hobbit/controller/data/NodeHardwareInformation.java
@@ -32,6 +32,8 @@
import org.hobbit.utils.rdf.TripleHashCalculator;
import org.hobbit.vocab.HobbitHardware;
import org.hobbit.vocab.MEXCORE;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This class is used to store information about hardware the experiment runs
@@ -42,6 +44,9 @@
*/
public class NodeHardwareInformation {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(NodeHardwareInformation.class);
+
/**
* Formatted hardware information.
*/
@@ -137,11 +142,34 @@ public Resource addToModel(Model model) {
}
private StmtIterator distinguishingProperties(Model model, Resource self) {
+
+ // Check for nulls and provide default values
+ String instanceValue = (instance == null) ? "default-instance" : instance;
+ if (instance == null) {
+ LOGGER.warn("instance is null, using default value: {}", instanceValue);
+ }
+
+ String cpuValue = (cpu == null) ? "default-cpu" : cpu;
+ if (cpu == null) {
+ LOGGER.warn("cpu is null, using default value: {}", cpuValue);
+ }
+
+ String memoryValue = (memory == null) ? "default-memory" : memory;
+ if (memory == null) {
+ LOGGER.warn("memory is null, using default value: {}", memoryValue);
+ }
+
+ String osValue = (os == null) ? "default-os" : os;
+ if (os == null) {
+ LOGGER.warn("os is null, using default value: {}", osValue);
+ }
+
+
return new StmtIteratorImpl(
- Stream.of((Statement) new StatementImpl(self, RDFS.label, model.createLiteral(instance)),
- (Statement) new StatementImpl(self, MEXCORE.cpu, model.createLiteral(cpu)),
- (Statement) new StatementImpl(self, MEXCORE.memory, model.createLiteral(memory)),
- (Statement) new StatementImpl(self, DOAP.os, model.createLiteral(os))).iterator());
+ Stream.of((Statement) new StatementImpl(self, RDFS.label, model.createLiteral(instanceValue)),
+ (Statement) new StatementImpl(self, MEXCORE.cpu, model.createLiteral(cpuValue)),
+ (Statement) new StatementImpl(self, MEXCORE.memory, model.createLiteral(memoryValue)),
+ (Statement) new StatementImpl(self, DOAP.os, model.createLiteral(osValue))).iterator());
}
@Override
diff --git a/platform-controller/src/test/java/org/hobbit/controller/ExperimentHardwareInformationTest.java b/platform-controller/src/test/java/org/hobbit/controller/ExperimentHardwareInformationTest.java
index 04c69df2..2ff27347 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/ExperimentHardwareInformationTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/ExperimentHardwareInformationTest.java
@@ -10,7 +10,7 @@
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
import org.hobbit.controller.data.ExperimentConfiguration;
-import org.hobbit.controller.docker.ResourceInformationCollectorImpl;
+import org.hobbit.controller.containers.docker.ResourceInformationCollectorImpl;
import org.hobbit.controller.mocks.DummyImageManager;
import org.hobbit.controller.mocks.DummyPlatformController;
import org.hobbit.controller.mocks.DummyStorageServiceClient;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/PlatformControllerTest.java b/platform-controller/src/test/java/org/hobbit/controller/PlatformControllerTest.java
index 5d8a287e..afca1c04 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/PlatformControllerTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/PlatformControllerTest.java
@@ -32,8 +32,8 @@
import org.hobbit.controller.data.ExperimentConfiguration;
import org.hobbit.controller.data.ExperimentStatus;
import org.hobbit.controller.data.ExperimentStatus.States;
-import org.hobbit.controller.docker.ContainerManagerBasedTest;
-import org.hobbit.controller.docker.ContainerManagerImpl;
+import org.hobbit.controller.containers.docker.ContainerManagerBasedTest;
+import org.hobbit.controller.containers.docker.ContainerManagerImpl;
import org.hobbit.core.Commands;
import org.hobbit.core.Constants;
import org.hobbit.utils.config.HobbitConfiguration;
@@ -93,7 +93,7 @@ public void close() throws Exception {
* container creation is checked by the test. The second command has an invalid
* (because unknown) session id and the test checks whether the second command
* creates an additional container.
- *
+ *
* @throws Exception
*/
@Test
@@ -103,7 +103,7 @@ public void receiveCreateContainerCommand() throws Exception {
// create and execute parent container
final String parentId = manager.startContainer("busybox", Constants.CONTAINER_TYPE_SYSTEM, null,
new String[] { "sh", "-c", "while :; do sleep 1; done" });
- final String parentName = manager.getContainerName(parentId);
+ final String parentName = manager.getContainerPodName(parentId);
services.add(parentId);
// create and execute test container
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ClusterManagerImplTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ClusterManagerImplTest.java
similarity index 91%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ClusterManagerImplTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ClusterManagerImplTest.java
index c3060c51..3d6e5751 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ClusterManagerImplTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ClusterManagerImplTest.java
@@ -1,7 +1,9 @@
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import com.spotify.docker.client.messages.Info;
+import org.hobbit.controller.containers.docker.ClusterManagerImpl;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;
@@ -15,7 +17,7 @@ public void setUp() throws Exception {
clusterManager = new ClusterManagerImpl();
}
- @Test
+ @Ignore
public void getClusterInfo() throws Exception {
final Info info = clusterManager.getClusterInfo();
assertNotNull(info);
@@ -55,4 +57,4 @@ public void setTaskHistoryLimit() throws Exception {
}
-}
\ No newline at end of file
+}
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerAccessByHostnameTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerAccessByHostnameTest.java
similarity index 97%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ContainerAccessByHostnameTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerAccessByHostnameTest.java
index f70bed93..314cbdd7 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerAccessByHostnameTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerAccessByHostnameTest.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerManagerBasedTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerManagerBasedTest.java
similarity index 97%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ContainerManagerBasedTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerManagerBasedTest.java
index dfa3512b..982022e0 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerManagerBasedTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerManagerBasedTest.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import java.util.ArrayList;
import java.util.List;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerManagerImplTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerManagerImplTest.java
similarity index 97%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ContainerManagerImplTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerManagerImplTest.java
index 2fc27180..e100110f 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerManagerImplTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerManagerImplTest.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -235,8 +235,8 @@ public void getContainerIdAndName() throws Exception {
services.add(containerId);
// compare containerId and retrieved id
- String containerName = manager.getContainerName(containerId);
- assertEquals(containerId, manager.getContainerId(containerName));
+ String containerName = manager.getContainerPodName(containerId);
+ assertEquals(containerId, manager.getContainerPodId(containerName));
}
private void removeImage(String imageName) throws Exception {
@@ -341,7 +341,7 @@ public void pullUpdatedImage() throws Exception {
Long exitCode = null;
while (exitCode == null) {
Thread.sleep(500);
- exitCode = manager.getContainerExitCode(testTask);
+ exitCode = manager.getContainerPodExitCode(testTask);
}
assertEquals("Service is using first image version",
Long.valueOf(1), exitCode);
@@ -361,7 +361,7 @@ public void pullUpdatedImage() throws Exception {
exitCode = null;
while (exitCode == null) {
Thread.sleep(500);
- exitCode = manager.getContainerExitCode(testTask);
+ exitCode = manager.getContainerPodExitCode(testTask);
}
assertEquals("Service is using second image version",
Long.valueOf(2), exitCode);
@@ -431,13 +431,13 @@ public void testNetworkAliases() throws Exception {
assertNotNull(pingContainer);
services.add(pingContainer);
Thread.sleep(10000);
- assertEquals("Result of pinging the container's network alias", Long.valueOf(0), manager.getContainerExitCode(pingContainer));
+ assertEquals("Result of pinging the container's network alias", Long.valueOf(0), manager.getContainerPodExitCode(pingContainer));
pingContainer = manager.startContainer(busyboxImageName, Constants.CONTAINER_TYPE_BENCHMARK,
null, null, null, new String[]{"ping", "-c", "1", "-W", "2", "nonexistant"});
assertNotNull(pingContainer);
services.add(pingContainer);
Thread.sleep(10000);
- assertEquals("Result of pinging the nonexisting host", Long.valueOf(1), manager.getContainerExitCode(pingContainer));
+ assertEquals("Result of pinging the nonexisting host", Long.valueOf(1), manager.getContainerPodExitCode(pingContainer));
}
}
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerStateObserverImplTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerStateObserverImplTest.java
similarity index 97%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ContainerStateObserverImplTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerStateObserverImplTest.java
index d13ae82f..08d01ce6 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerStateObserverImplTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerStateObserverImplTest.java
@@ -14,8 +14,9 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
+import org.hobbit.controller.containers.ContainerManager;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerTerminationCallbackImplTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerTerminationCallbackImplTest.java
similarity index 89%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ContainerTerminationCallbackImplTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerTerminationCallbackImplTest.java
index 6f08ead8..75fe7e71 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ContainerTerminationCallbackImplTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ContainerTerminationCallbackImplTest.java
@@ -14,8 +14,9 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
+import org.hobbit.controller.containers.docker.ContainerTerminationCallbackImpl;
import org.junit.Test;
import static org.junit.Assert.*;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/FileBasedImageManagerTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/FileBasedImageManagerTest.java
similarity index 90%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/FileBasedImageManagerTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/FileBasedImageManagerTest.java
index 37f3674f..c00fcda7 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/FileBasedImageManagerTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/FileBasedImageManagerTest.java
@@ -1,5 +1,6 @@
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
+import org.hobbit.controller.containers.FileBasedImageManager;
import org.hobbit.core.data.BenchmarkMetaData;
import org.hobbit.core.data.SystemMetaData;
import org.junit.Assert;
@@ -8,9 +9,10 @@
/**
* A simple test which tests the ability of the {@link FileBasedImageManager}
* class to load metadata from a file.
- *
+ *
* @author Michael Röder (michael.roeder@uni-paderborn.de)
*
+ * TODO: maybe need to move
*/
public class FileBasedImageManagerTest {
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/GitlabBasedImageManagerTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/GitlabBasedImageManagerTest.java
similarity index 98%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/GitlabBasedImageManagerTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/GitlabBasedImageManagerTest.java
index ee935ea9..5ecdbc1c 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/GitlabBasedImageManagerTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/GitlabBasedImageManagerTest.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import java.util.ArrayList;
import java.util.Collection;
@@ -26,6 +26,7 @@
import org.apache.jena.rdf.model.Model;
import org.apache.jena.vocabulary.RDF;
import org.hobbit.controller.ConnectivityAssumptionUtils;
+import org.hobbit.controller.containers.GitlabBasedImageManager;
import org.hobbit.controller.gitlab.GitlabControllerImplTest;
import org.hobbit.core.data.BenchmarkMetaData;
import org.hobbit.core.data.SystemMetaData;
@@ -41,6 +42,8 @@
/**
* Created by Timofey Ermilov on 22/09/16.
+ *
+ * TODO: maybe need to move
*/
public class GitlabBasedImageManagerTest {
private GitlabBasedImageManager imageManager;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/LongImageNameTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/LongImageNameTest.java
similarity index 93%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/LongImageNameTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/LongImageNameTest.java
index 35550252..b43bfd53 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/LongImageNameTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/LongImageNameTest.java
@@ -14,14 +14,17 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import static org.junit.Assert.assertNotNull;
import org.hobbit.core.Constants;
import org.junit.Test;
-
+/**
+ *
+ * TODO: maybe need to move
+ */
public class LongImageNameTest extends ContainerManagerBasedTest {
private static final String imageName = "hobbitproject/nonexisting_image_name_thats_too_long";
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/MetaDataFactoryTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/MetaDataFactoryTest.java
similarity index 97%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/MetaDataFactoryTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/MetaDataFactoryTest.java
index a67778cf..f2ea0de5 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/MetaDataFactoryTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/MetaDataFactoryTest.java
@@ -1,4 +1,4 @@
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import java.io.IOException;
import java.io.InputStream;
@@ -10,12 +10,17 @@
import org.apache.commons.compress.utils.IOUtils;
import org.apache.log4j.lf5.util.StreamUtils;
import org.hobbit.controller.ParameterForwardingTest;
+import org.hobbit.controller.containers.MetaDataFactory;
import org.hobbit.core.data.BenchmarkMetaData;
import org.hobbit.core.data.ImageMetaData;
import org.hobbit.core.data.SystemMetaData;
import org.junit.Assert;
import org.junit.Test;
+/**
+ *
+ * TODO: maybe need to move
+ */
public class MetaDataFactoryTest {
@Test
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/ResourceInformationCollectorTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ResourceInformationCollectorTest.java
similarity index 98%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/ResourceInformationCollectorTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/ResourceInformationCollectorTest.java
index 0fa2b317..73b95611 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/ResourceInformationCollectorTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/ResourceInformationCollectorTest.java
@@ -1,4 +1,4 @@
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import static org.junit.Assert.assertNotNull;
@@ -7,6 +7,7 @@
import org.apache.jena.sparql.vocabulary.DOAP;
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
+import org.hobbit.controller.containers.ResourceInformationCollector;
import org.hobbit.controller.data.SetupHardwareInformation;
import org.hobbit.core.Constants;
import org.hobbit.core.data.usage.ResourceUsageInformation;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/docker/VersionTagIdentificationTest.java b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/VersionTagIdentificationTest.java
similarity index 97%
rename from platform-controller/src/test/java/org/hobbit/controller/docker/VersionTagIdentificationTest.java
rename to platform-controller/src/test/java/org/hobbit/controller/containers/docker/VersionTagIdentificationTest.java
index 2a1a9a56..49cbf85b 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/docker/VersionTagIdentificationTest.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/containers/docker/VersionTagIdentificationTest.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with platform-controller. If not, see .
*/
-package org.hobbit.controller.docker;
+package org.hobbit.controller.containers.docker;
import java.io.IOException;
import java.util.ArrayList;
@@ -27,6 +27,7 @@
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
+
@RunWith(Parameterized.class)
public class VersionTagIdentificationTest {
diff --git a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyContainerManager.java b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyContainerManager.java
index 24e8ffe5..63353cc5 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyContainerManager.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyContainerManager.java
@@ -5,15 +5,18 @@
import java.util.Map;
import java.util.concurrent.Semaphore;
-import org.hobbit.controller.docker.ContainerManager;
-import org.hobbit.controller.docker.ContainerStateObserver;
-import org.hobbit.controller.docker.ContainerTerminationCallback;
+import io.kubernetes.client.openapi.models.V1Pod;
+import org.hobbit.controller.containers.ContainerManager;
+import org.hobbit.controller.containers.ContainerStateObserver;
+import org.hobbit.controller.containers.ContainerTerminationCallback;
import com.spotify.docker.client.messages.ContainerStats;
import com.spotify.docker.client.messages.swarm.Service;
import com.spotify.docker.client.messages.swarm.Service.Criteria;
+import org.hobbit.controller.containers.KubExtendedContainerManager;
+import org.hobbit.controller.data.ContainerCriteria;
-public class DummyContainerManager implements ContainerManager {
+public class DummyContainerManager implements ContainerManager, KubExtendedContainerManager {
private Semaphore benchmarkControllerTerminated;
private ContainerTerminationCallback terminationCallback;
@@ -107,28 +110,28 @@ public void removeParentAndChildren(String parent) {
stopContainer(parent);
}
- @Override
- public Service getContainerInfo(String serviceName) {
- return null;
- }
+// @Override
+// public Service getContainerInfo(String serviceName) {
+// return null;
+// }
@Override
- public List getContainers(Criteria criteria) {
+ public List getContainers(ContainerCriteria criteria) {
return new ArrayList<>(0);
}
@Override
- public Long getContainerExitCode(String serviceName) {
+ public Long getContainerPodExitCode(String serviceName) {
return null;
}
@Override
- public String getContainerId(String name) {
+ public String getContainerPodId(String name) {
return name;
}
@Override
- public String getContainerName(String containerId) {
+ public String getContainerPodName(String containerId) {
return containerId;
}
@@ -143,7 +146,7 @@ public void pullImage(String imageName) {
System.out.println("...");
}
- @Override
+ //@Override
public ContainerStats getStats(String containerId) {
return null;
}
@@ -153,4 +156,8 @@ public String getContainerType(String containerId) {
return null;
}
+ @Override
+ public V1Pod getPod(String podIP) {
+ return null;
+ }
}
diff --git a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyImageManager.java b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyImageManager.java
index ce815c2e..92cbc8ab 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyImageManager.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyImageManager.java
@@ -4,7 +4,7 @@
import java.util.HashSet;
import java.util.List;
import org.apache.jena.rdf.model.ModelFactory;
-import org.hobbit.controller.docker.ImageManager;
+import org.hobbit.controller.containers.ImageManager;
import org.hobbit.core.data.BenchmarkMetaData;
import org.hobbit.core.data.SystemMetaData;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyPlatformController.java b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyPlatformController.java
index 2ef8c689..62db965e 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyPlatformController.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyPlatformController.java
@@ -4,7 +4,7 @@
import com.spotify.docker.client.exceptions.DockerCertificateException;
import java.io.IOException;
import java.util.concurrent.Semaphore;
-import org.hobbit.controller.docker.ClusterManagerImpl;
+import org.hobbit.controller.containers.docker.ClusterManagerImpl;
import org.hobbit.controller.PlatformController;
import org.hobbit.controller.queue.InMemoryQueue;
diff --git a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyResourceInformationCollector.java b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyResourceInformationCollector.java
index 06bcb903..932420eb 100644
--- a/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyResourceInformationCollector.java
+++ b/platform-controller/src/test/java/org/hobbit/controller/mocks/DummyResourceInformationCollector.java
@@ -1,8 +1,9 @@
package org.hobbit.controller.mocks;
import com.spotify.docker.client.messages.swarm.Service;
+import org.hobbit.controller.data.ContainerCriteria;
import org.hobbit.controller.data.SetupHardwareInformation;
-import org.hobbit.controller.docker.ResourceInformationCollector;
+import org.hobbit.controller.containers.ResourceInformationCollector;
import org.hobbit.core.data.usage.ResourceUsageInformation;
public class DummyResourceInformationCollector implements ResourceInformationCollector {
@@ -13,7 +14,7 @@ public ResourceUsageInformation getSystemUsageInformation() {
};
@Override
- public ResourceUsageInformation getUsageInformation(Service.Criteria criteria) {
+ public ResourceUsageInformation getUsageInformation(ContainerCriteria criteria) {
return null;
};
diff --git a/platform-storage/storage-service/Dockerfile b/platform-storage/storage-service/Dockerfile
index 072e57ca..d8ae9ae3 100644
--- a/platform-storage/storage-service/Dockerfile
+++ b/platform-storage/storage-service/Dockerfile
@@ -2,12 +2,12 @@ FROM maven:3-eclipse-temurin-11 AS build
WORKDIR /usr/src/hobbit-platform
COPY parent-pom/pom.xml parent-pom/
RUN mvn --file parent-pom -Dmaven.test.skip=true install
-ARG project=platform-storage/storage-service
-COPY ${project}/pom.xml ${project}/
-RUN mvn --file ${project} dependency:go-offline
-COPY ${project}/src ${project}/src
-RUN mvn --file ${project} -Dmaven.test.skip=true package
-
+WORKDIR /usr/src/hobbit-platform/platform-storage/storage-service
+COPY platform-storage/storage-service/pom.xml .
+RUN mvn dependency:go-offline
+COPY platform-storage/storage-service/src src
+RUN mvn -Dmaven.test.skip=true package
FROM eclipse-temurin:11
+WORKDIR /app
COPY --from=build /usr/src/hobbit-platform/platform-storage/storage-service/target/storage-service.jar .
CMD ["java", "-cp", "storage-service.jar", "org.hobbit.core.run.ComponentStarter", "org.hobbit.storage.service.StorageService"]
diff --git a/platform-storage/storage-service/src/main/java/org/hobbit/storage/service/StorageService.java b/platform-storage/storage-service/src/main/java/org/hobbit/storage/service/StorageService.java
index 66f50db0..bd5f64e4 100644
--- a/platform-storage/storage-service/src/main/java/org/hobbit/storage/service/StorageService.java
+++ b/platform-storage/storage-service/src/main/java/org/hobbit/storage/service/StorageService.java
@@ -218,28 +218,36 @@ else if (query.isAskType())
public void init() throws Exception {
super.init();
- sparqlEndpointUrl = getEnvValue(SPARQL_ENDPOINT_URL_KEY, true) + "-auth";
- String username = getEnvValue(SPARQL_ENDPOINT_USERNAME_KEY, true);
- String password = getEnvValue(SPARQL_ENDPOINT_PASSWORD_KEY, true);
- credentials = new UsernamePasswordCredentials(username, password);
+ try {
+ sparqlEndpointUrl = getEnvValue(SPARQL_ENDPOINT_URL_KEY, true) ;//+ "-auth";
+ String username = getEnvValue(SPARQL_ENDPOINT_USERNAME_KEY, true);
+ String password = getEnvValue(SPARQL_ENDPOINT_PASSWORD_KEY, true);
+ credentials = new UsernamePasswordCredentials(username, password);
+
+ HttpClientBuilder clientBuilder = HttpClientBuilder.create();
+ clientBuilder.setDefaultCredentialsProvider(this);
+ client = clientBuilder.build();
+
+ queryExecFactory = new QueryExecutionFactoryHttp(sparqlEndpointUrl, new DatasetDescription(), client);
+ queryExecFactory = new QueryExecutionFactoryPaginated(queryExecFactory, MAX_RESULT_SIZE);
+
+ queue = incomingDataQueueFactory.createDefaultRabbitQueue(QUEUE_NAME);
- HttpClientBuilder clientBuilder = HttpClientBuilder.create();
- clientBuilder.setDefaultCredentialsProvider(this);
- client = clientBuilder.build();
+ queue.channel.basicQos(MAX_NUMBER_PARALLEL_REQUESTS);
- queryExecFactory = new QueryExecutionFactoryHttp(sparqlEndpointUrl, new DatasetDescription(), client);
- queryExecFactory = new QueryExecutionFactoryPaginated(queryExecFactory, MAX_RESULT_SIZE);
+ consumer = new QueueingConsumer(queue.channel);
- queue = incomingDataQueueFactory.createDefaultRabbitQueue(QUEUE_NAME);
- queue.channel.basicQos(MAX_NUMBER_PARALLEL_REQUESTS);
+ queue.channel.basicConsume(QUEUE_NAME, false, consumer);
- consumer = new QueueingConsumer(queue.channel);
- queue.channel.basicConsume(QUEUE_NAME, false, consumer);
+ } catch (Exception e) {
+ LOGGER.error("Error during initialization: ", e);
+ throw e; // Re-throw after logging
+ }
}
@Override
public void run() throws Exception {
- LOGGER.info("[Storage Service] Awaiting Storage Service requests");
+ LOGGER.info("[Storage Service] Awaiting Storage Service requests ");
ExecutorService executor = Executors.newFixedThreadPool(MAX_NUMBER_PARALLEL_REQUESTS);
Delivery delivery;
while (true) {
@@ -341,7 +349,7 @@ public void setCredentials(AuthScope arg0, Credentials arg1) {
/**
* Main method for debugging purposes.
- *
+ *
* @param args
*/
public static void main(String[] args) {
diff --git a/rabbitmq-cluster/Makefile b/rabbitmq-cluster/Makefile
index 085018df..c9e9b0be 100644
--- a/rabbitmq-cluster/Makefile
+++ b/rabbitmq-cluster/Makefile
@@ -1,11 +1,11 @@
-haproxy=$(shell docker ps -a | grep haproxy | cut -d' ' -f 1)
+haproxy=$(shell docker ps -a | grep haproxy | cut -d' ' -f 1)
start:
- docker-compose up -d
+ docker compose up -d
restart-haproxy:
docker stop ${haproxy} && docker rm ${haproxy}
- docker-compose up -d
+ docker compose up -d
stop:
- docker-compose down
+ docker compose down