You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2024/06/06 16:25:55 UTC
(camel-karavan) 05/10: Refactored app
This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit 2ffd0a7c9628d6c456dc44ec3dacff80e39b84f4
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Thu Jun 6 12:06:51 2024 -0400
Refactored app
---
...rEventListener.java => DockerEventHandler.java} | 4 +-
.../CamelReloadListener.java} | 52 +++++++++---------
.../{ => listener}/CamelStatusListener.java | 23 ++++----
.../DeploymentStatusListener.java | 0
.../DockerStatusListener.java} | 59 ++++++++++++++++-----
.../NotificationListener.java} | 6 +--
.../PodContainerStatusListener.java} | 61 ++++++----------------
.../ServiceStatusListener.java | 0
.../CamelStatusScheduler.java} | 21 ++++----
.../DockerStatusScheduler.java | 40 +++-----------
10 files changed, 125 insertions(+), 141 deletions(-)
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventHandler.java
similarity index 96%
rename from karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventHandler.java
index 76f33446..da2a24e8 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventHandler.java
@@ -24,7 +24,7 @@ import com.github.dockerjava.api.model.EventType;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.camel.karavan.RegistryService;
-import org.apache.camel.karavan.model.ContainerStatus;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.jboss.logging.Logger;
import java.io.Closeable;
@@ -65,7 +65,7 @@ public class DockerEventListener implements ResultCallback<Event> {
public void onContainerEvent(Event event, Container container) throws InterruptedException {
if ("exited".equalsIgnoreCase(container.getState())
- && Objects.equals(container.getLabels().get(LABEL_TYPE), ContainerStatus.ContainerType.build.name())) {
+ && Objects.equals(container.getLabels().get(LABEL_TYPE), PodContainerStatus.ContainerType.build.name())) {
String tag = container.getLabels().get(LABEL_TAG);
String projectId = container.getLabels().get(LABEL_PROJECT_ID);
syncImage(projectId, tag);
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/CamelService.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/CamelReloadListener.java
similarity index 72%
rename from karavan-app/src/main/java/org/apache/camel/karavan/CamelService.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/listener/CamelReloadListener.java
index 24703209..dc898a6c 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/CamelService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/listener/CamelReloadListener.java
@@ -25,8 +25,8 @@ import io.vertx.mutiny.ext.web.client.HttpResponse;
import io.vertx.mutiny.ext.web.client.WebClient;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.kubernetes.KubernetesManager;
-import org.apache.camel.karavan.model.ContainerStatus;
+import org.apache.camel.karavan.kubernetes.KubernetesService;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipse.microprofile.faulttolerance.CircuitBreaker;
import org.jboss.logging.Logger;
@@ -34,12 +34,12 @@ import org.jboss.logging.Logger;
import java.util.*;
import java.util.concurrent.ExecutionException;
-import static org.apache.camel.karavan.KaravanEvents.CONTAINER_UPDATED;
+import static org.apache.camel.karavan.KaravanEvents.POD_CONTAINER_UPDATED;
@ApplicationScoped
-public class CamelManager {
+public class CamelService {
- private static final Logger LOGGER = Logger.getLogger(CamelManager.class.getName());
+ private static final Logger LOGGER = Logger.getLogger(CamelService.class.getName());
public static final String RELOAD_PROJECT_CODE = "RELOAD_PROJECT_CODE";
@Inject
@@ -49,7 +49,7 @@ public class CamelManager {
CodeService codeService;
@Inject
- KubernetesManager kubernetesManager;
+ KubernetesService kubernetesService;
@ConfigProperty(name = "karavan.environment")
String environment;
@@ -73,22 +73,22 @@ public class CamelManager {
public void reloadProjectCode(String projectId) {
LOGGER.debug("Reload project code " + projectId);
try {
- ContainerStatus containerStatus = karavanCache.getDevModeContainerStatus(projectId, environment);
- deleteRequest(containerStatus);
+ PodContainerStatus podContainerStatus = karavanCache.getDevModePodContainerStatus(projectId, environment);
+ deleteRequest(podContainerStatus);
Map<String, String> files = codeService.getProjectFilesForDevMode(projectId, true);
- files.forEach((name, code) -> putRequest(containerStatus, name, code, 1000));
- reloadRequest(containerStatus);
- containerStatus.setCodeLoaded(true);
- eventBus.publish(CONTAINER_UPDATED, JsonObject.mapFrom(containerStatus));
+ files.forEach((name, code) -> putRequest(podContainerStatus, name, code, 1000));
+ reloadRequest(podContainerStatus);
+ podContainerStatus.setCodeLoaded(true);
+ eventBus.publish(POD_CONTAINER_UPDATED, JsonObject.mapFrom(podContainerStatus));
} catch (Exception ex) {
LOGGER.error("ReloadProjectCode " + (ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()));
}
}
@CircuitBreaker(requestVolumeThreshold = 10, failureRatio = 0.5, delay = 1000)
- public boolean putRequest(ContainerStatus containerStatus, String fileName, String body, int timeout) {
+ boolean putRequest(PodContainerStatus podContainerStatus, String fileName, String body, int timeout) {
try {
- String url = getContainerAddressForReload(containerStatus) + "/q/upload/" + fileName;
+ String url = getContainerAddressForReload(podContainerStatus) + "/q/upload/" + fileName;
HttpResponse<Buffer> result = getWebClient().putAbs(url)
.timeout(timeout).sendBuffer(Buffer.buffer(body)).subscribeAsCompletionStage().toCompletableFuture().get();
return result.statusCode() == 200;
@@ -98,8 +98,8 @@ public class CamelManager {
return false;
}
- public String deleteRequest(ContainerStatus containerStatus) throws Exception {
- String url = getContainerAddressForReload(containerStatus) + "/q/upload/*";
+ String deleteRequest(PodContainerStatus podContainerStatus) throws Exception {
+ String url = getContainerAddressForReload(podContainerStatus) + "/q/upload/*";
try {
return deleteResult(url, 1000);
} catch (InterruptedException | ExecutionException ex) {
@@ -108,8 +108,8 @@ public class CamelManager {
return null;
}
- public String reloadRequest(ContainerStatus containerStatus) throws Exception {
- String url = getContainerAddressForReload(containerStatus) + "/q/dev/reload?reload=true";
+ String reloadRequest(PodContainerStatus podContainerStatus) throws Exception {
+ String url = getContainerAddressForReload(podContainerStatus) + "/q/dev/reload?reload=true";
try {
return getResult(url, 1000);
} catch (InterruptedException | ExecutionException ex) {
@@ -118,22 +118,22 @@ public class CamelManager {
return null;
}
- public String getContainerAddressForReload(ContainerStatus containerStatus) throws Exception {
+ String getContainerAddressForReload(PodContainerStatus podContainerStatus) throws Exception {
if (ConfigService.inKubernetes()) {
- return "http://" + containerStatus.getProjectId() + "." + kubernetesManager.getNamespace();
+ return "http://" + podContainerStatus.getProjectId() + "." + kubernetesService.getNamespace();
} else if (ConfigService.inDocker()) {
- return "http://" + containerStatus.getProjectId() + ":8080";
- } else if (containerStatus.getPorts() != null && !containerStatus.getPorts().isEmpty()) {
- Integer port = containerStatus.getPorts().get(0).getPublicPort();
+ return "http://" + podContainerStatus.getProjectId() + ":8080";
+ } else if (podContainerStatus.getPorts() != null && !podContainerStatus.getPorts().isEmpty()) {
+ Integer port = podContainerStatus.getPorts().get(0).getPublicPort();
if (port != null) {
return "http://localhost:" + port;
}
}
- throw new Exception("No port configured for project " + containerStatus.getContainerName());
+ throw new Exception("No port configured for project " + podContainerStatus.getContainerName());
}
@CircuitBreaker(requestVolumeThreshold = 10, failureRatio = 0.5, delay = 1000)
- public String getResult(String url, int timeout) throws InterruptedException, ExecutionException {
+ String getResult(String url, int timeout) throws InterruptedException, ExecutionException {
try {
HttpResponse<Buffer> result = getWebClient().getAbs(url).putHeader("Accept", "application/json")
.timeout(timeout).send().subscribeAsCompletionStage().toCompletableFuture().get();
@@ -148,7 +148,7 @@ public class CamelManager {
return null;
}
- public String deleteResult(String url, int timeout) throws InterruptedException, ExecutionException {
+ String deleteResult(String url, int timeout) throws InterruptedException, ExecutionException {
try {
HttpResponse<Buffer> result = getWebClient().deleteAbs(url)
.timeout(timeout).send().subscribeAsCompletionStage().toCompletableFuture().get();
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/CamelStatusListener.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/CamelStatusListener.java
similarity index 85%
rename from karavan-app/src/main/java/org/apache/camel/karavan/CamelStatusListener.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/listener/CamelStatusListener.java
index 1996b381..fda54c2e 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/CamelStatusListener.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/listener/CamelStatusListener.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.karavan.status;
+package org.apache.camel.karavan;
import io.quarkus.vertx.ConsumeEvent;
import io.vertx.core.json.JsonObject;
@@ -24,11 +24,10 @@ import io.vertx.mutiny.ext.web.client.HttpResponse;
import io.vertx.mutiny.ext.web.client.WebClient;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.config.ConfigService;
-import org.apache.camel.karavan.status.model.CamelStatus;
-import org.apache.camel.karavan.status.model.CamelStatusRequest;
-import org.apache.camel.karavan.status.model.CamelStatusValue;
-import org.apache.camel.karavan.status.model.ContainerStatus;
+import org.apache.camel.karavan.model.CamelStatus;
+import org.apache.camel.karavan.model.CamelStatusRequest;
+import org.apache.camel.karavan.model.CamelStatusValue;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipse.microprofile.faulttolerance.CircuitBreaker;
import org.jboss.logging.Logger;
@@ -37,7 +36,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
-import static org.apache.camel.karavan.status.StatusEvents.CMD_COLLECT_CAMEL_STATUS;
+import static org.apache.camel.karavan.KaravanEvents.CMD_COLLECT_CAMEL_STATUS;
@ApplicationScoped
public class CamelStatusListener {
@@ -45,7 +44,7 @@ public class CamelStatusListener {
private static final Logger LOGGER = Logger.getLogger(CamelStatusListener.class.getName());
@Inject
- StatusCache statusCache;
+ KaravanCache karavanCache;
@ConfigProperty(name = "karavan.environment")
String environment;
@@ -66,7 +65,7 @@ public class CamelStatusListener {
public void collectCamelStatuses(JsonObject data) {
try {
CamelStatusRequest dms = data.getJsonObject("camelStatusRequest").mapTo(CamelStatusRequest.class);
- ContainerStatus containerStatus = data.getJsonObject("containerStatus").mapTo(ContainerStatus.class);
+ PodContainerStatus containerStatus = data.getJsonObject("containerStatus").mapTo(PodContainerStatus.class);
LOGGER.debug("Collect Camel Status for " + containerStatus.getContainerName());
String projectId = dms.getProjectId();
String containerName = dms.getContainerName();
@@ -78,13 +77,13 @@ public class CamelStatusListener {
}
}
CamelStatus cs = new CamelStatus(projectId, containerName, statuses, environment);
- statusCache.saveCamelStatus(cs);
+ karavanCache.saveCamelStatus(cs);
} catch (Exception ex) {
LOGGER.error("collectCamelStatuses " + (ex.getCause() != null ? ex.getCause().getMessage() : ex.getMessage()));
}
}
- public String getContainerAddressForStatus(ContainerStatus containerStatus) throws Exception {
+ public String getContainerAddressForStatus(PodContainerStatus containerStatus) throws Exception {
if (ConfigService.inKubernetes()) {
return "http://" + containerStatus.getPodIP() + ":8080";
} else if (ConfigService.inDocker()) {
@@ -98,7 +97,7 @@ public class CamelStatusListener {
throw new Exception("No port configured for project " + containerStatus.getContainerName());
}
- public String getCamelStatus(ContainerStatus containerStatus, CamelStatusValue.Name statusName) throws Exception {
+ public String getCamelStatus(PodContainerStatus containerStatus, CamelStatusValue.Name statusName) throws Exception {
String url = getContainerAddressForStatus(containerStatus) + "/q/dev/" + statusName.name();
try {
return getResult(url, 500);
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/DeploymentStatusListener.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/DeploymentStatusListener.java
similarity index 100%
rename from karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/DeploymentStatusListener.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/listener/DeploymentStatusListener.java
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerStatusScheduler.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/DockerStatusListener.java
similarity index 55%
copy from karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerStatusScheduler.java
copy to karavan-app/src/main/java/org/apache/camel/karavan/listener/DockerStatusListener.java
index 8d597f96..1c117444 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerStatusScheduler.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/listener/DockerStatusListener.java
@@ -21,15 +21,19 @@ import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Statistics;
import com.github.dockerjava.core.InvocationBuilder;
import io.quarkus.scheduler.Scheduled;
+import io.quarkus.vertx.ConsumeEvent;
import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.eventbus.EventBus;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.camel.karavan.ConfigService;
-import org.apache.camel.karavan.model.ContainerStatus;
+import org.apache.camel.karavan.KaravanCache;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import java.io.IOException;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@@ -44,12 +48,15 @@ public class DockerStatusScheduler {
@Inject
DockerService dockerService;
+ @Inject
+ KaravanCache karavanCache;
+
@Inject
EventBus eventBus;
@Scheduled(every = "{karavan.container.statistics.interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
void collectContainersStatistics() {
- List<ContainerStatus> statusesInDocker = getContainersStatuses();
+ List<PodContainerStatus> statusesInDocker = getContainersStatuses();
statusesInDocker.forEach(containerStatus -> {
eventBus.publish(CMD_COLLECT_CONTAINER_STATISTIC, JsonObject.mapFrom(containerStatus));
});
@@ -58,28 +65,56 @@ public class DockerStatusScheduler {
@Scheduled(every = "{karavan.container.status.interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
void collectContainersStatuses() {
if (!ConfigService.inKubernetes()) {
- List<ContainerStatus> statusesInDocker = getContainersStatuses();
+ List<PodContainerStatus> statusesInDocker = getContainersStatuses();
statusesInDocker.forEach(containerStatus -> {
- eventBus.publish(CONTAINER_UPDATED, JsonObject.mapFrom(containerStatus));
+ eventBus.publish(POD_CONTAINER_UPDATED, JsonObject.mapFrom(containerStatus));
});
eventBus.publish(CMD_CLEAN_STATUSES, "");
}
}
- public List<ContainerStatus> getContainersStatuses() {
- List<ContainerStatus> result = new ArrayList<>();
+ @ConsumeEvent(value = CMD_COLLECT_CONTAINER_STATISTIC, blocking = true)
+ void collectContainersStatistics(JsonObject data) {
+ PodContainerStatus status = data.mapTo(PodContainerStatus.class);
+ PodContainerStatus newStatus = getContainerStatistics(status);
+ eventBus.publish(POD_CONTAINER_UPDATED, JsonObject.mapFrom(newStatus));
+ }
+
+ @ConsumeEvent(value = CMD_CLEAN_STATUSES, blocking = true)
+ void cleanContainersStatuses(String data) {
+ List<PodContainerStatus> statusesInDocker = getContainersStatuses();
+ List<String> namesInDocker = statusesInDocker.stream().map(PodContainerStatus::getContainerName).toList();
+ List<PodContainerStatus> statusesInCache = karavanCache.getPodContainerStatuses(environment);
+ // clean deleted
+ statusesInCache.stream()
+ .filter(cs -> !checkTransit(cs))
+ .filter(cs -> !namesInDocker.contains(cs.getContainerName()))
+ .forEach(containerStatus -> {
+ eventBus.publish(POD_CONTAINER_DELETED, JsonObject.mapFrom(containerStatus));
+ });
+ }
+
+ private boolean checkTransit(PodContainerStatus cs) {
+ if (cs.getContainerId() == null && cs.getInTransit()) {
+ return Instant.parse(cs.getInitDate()).until(Instant.now(), ChronoUnit.SECONDS) < 10;
+ }
+ return false;
+ }
+
+ public List<PodContainerStatus> getContainersStatuses() {
+ List<PodContainerStatus> result = new ArrayList<>();
dockerService.getAllContainers().forEach(container -> {
- ContainerStatus containerStatus = DockerUtils.getContainerStatus(container, environment);
- result.add(containerStatus);
+ PodContainerStatus podContainerStatus = DockerUtils.getContainerStatus(container, environment);
+ result.add(podContainerStatus);
});
return result;
}
- public ContainerStatus getContainerStatistics(ContainerStatus containerStatus) {
- Container container = dockerService.getContainerByName(containerStatus.getContainerName());
+ public PodContainerStatus getContainerStatistics(PodContainerStatus podContainerStatus) {
+ Container container = dockerService.getContainerByName(podContainerStatus.getContainerName());
Statistics stats = getContainerStats(container.getId());
- DockerUtils.updateStatistics(containerStatus, stats);
- return containerStatus;
+ DockerUtils.updateStatistics(podContainerStatus, stats);
+ return podContainerStatus;
}
public Statistics getContainerStats(String containerId) {
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/NotificationService.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/NotificationListener.java
similarity index 91%
rename from karavan-app/src/main/java/org/apache/camel/karavan/NotificationService.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/listener/NotificationListener.java
index aba68b7d..bcccd2b9 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/NotificationService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/listener/NotificationListener.java
@@ -29,7 +29,7 @@ import java.util.UUID;
import static org.apache.camel.karavan.KaravanEvents.COMMIT_HAPPENED;
@ApplicationScoped
-public class NotificationManager {
+public class NotificationService {
public static final String NOTIFICATION_ADDRESS_SYSTEM = "karavanSystem";
public static final String NOTIFICATION_HEADER_EVENT_ID = "id";
@@ -47,7 +47,7 @@ public class NotificationManager {
sendSystem(eventId, "commit", Project.class.getSimpleName(), JsonObject.mapFrom(p));
}
- public void send(String userId, String eventId, String evenName, String className, JsonObject data) {
+ void send(String userId, String eventId, String evenName, String className, JsonObject data) {
eventBus.publish(userId, data, new DeliveryOptions()
.addHeader(NOTIFICATION_HEADER_EVENT_ID, eventId != null ? eventId : UUID.randomUUID().toString())
.addHeader(NOTIFICATION_HEADER_EVENT_NAME, evenName)
@@ -55,7 +55,7 @@ public class NotificationManager {
);
}
- public void sendSystem(String eventId, String evenName, String className, JsonObject data) {
+ void sendSystem(String eventId, String evenName, String className, JsonObject data) {
eventBus.publish(NOTIFICATION_ADDRESS_SYSTEM, data, new DeliveryOptions()
.addHeader(NOTIFICATION_HEADER_EVENT_ID, eventId != null ? eventId : UUID.randomUUID().toString())
.addHeader(NOTIFICATION_HEADER_EVENT_NAME, evenName)
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/ContainerStatusListener.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/PodContainerStatusListener.java
similarity index 52%
rename from karavan-app/src/main/java/org/apache/camel/karavan/ContainerStatusListener.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/listener/PodContainerStatusListener.java
index 301d7518..5e1e4b53 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/ContainerStatusListener.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/listener/PodContainerStatusListener.java
@@ -15,16 +15,15 @@
* limitations under the License.
*/
-package org.apache.camel.karavan.status;
+package org.apache.camel.karavan;
import io.quarkus.vertx.ConsumeEvent;
-import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.eventbus.EventBus;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.status.docker.DockerAPI;
-import org.apache.camel.karavan.status.model.ContainerStatus;
+import org.apache.camel.karavan.docker.DockerService;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
@@ -33,7 +32,7 @@ import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Objects;
-import static org.apache.camel.karavan.status.StatusEvents.*;
+import static org.apache.camel.karavan.KaravanEvents.*;
@ApplicationScoped
public class ContainerStatusListener {
@@ -43,66 +42,40 @@ public class ContainerStatusListener {
String environment;
@Inject
- StatusCache statusCache;
+ KaravanCache karavanCache;
@Inject
- DockerAPI dockerAPI;
+ DockerService dockerService;
@Inject
EventBus eventBus;
- @ConsumeEvent(value = CMD_COLLECT_CONTAINER_STATISTIC, blocking = true)
- void collectContainersStatistics(JsonObject data) {
- ContainerStatus status = data.mapTo(ContainerStatus.class);
- ContainerStatus newStatus = dockerAPI.collectContainerStatistics(status);
- eventBus.publish(CONTAINER_UPDATED, JsonObject.mapFrom(newStatus));
- }
- @ConsumeEvent(value = CMD_CLEAN_STATUSES, blocking = true)
- void cleanContainersStatuses(String data) {
- List<ContainerStatus> statusesInDocker = dockerAPI.collectContainersStatuses();
- List<String> namesInDocker = statusesInDocker.stream().map(ContainerStatus::getContainerName).toList();
- List<ContainerStatus> statusesInCache = statusCache.getContainerStatuses(environment);
- // clean deleted
- statusesInCache.stream()
- .filter(cs -> !checkTransit(cs))
- .filter(cs -> !namesInDocker.contains(cs.getContainerName()))
- .forEach(containerStatus -> {
- eventBus.publish(CONTAINER_DELETED, JsonObject.mapFrom(containerStatus));
- });
- }
@ConsumeEvent(value = CONTAINER_DELETED, blocking = true, ordered = true)
public void cleanContainersStatus(JsonObject data) {
- ContainerStatus containerStatus = data.mapTo(ContainerStatus.class);
- statusCache.deleteContainerStatus(containerStatus);
- statusCache.deleteCamelStatuses(containerStatus.getProjectId(), containerStatus.getEnv());
- }
-
- private boolean checkTransit(ContainerStatus cs) {
- if (cs.getContainerId() == null && cs.getInTransit()) {
- return Instant.parse(cs.getInitDate()).until(Instant.now(), ChronoUnit.SECONDS) < 10;
- }
- return false;
+ PodContainerStatus containerStatus = data.mapTo(PodContainerStatus.class);
+ karavanCache.deletePodContainerStatus(containerStatus);
+ karavanCache.deleteCamelStatuses(containerStatus.getProjectId(), containerStatus.getEnv());
}
@ConsumeEvent(value = CONTAINER_UPDATED, blocking = true, ordered = true)
- public void saveContainerStatus(JsonObject data) {
- ContainerStatus newStatus = data.mapTo(ContainerStatus.class);
- ContainerStatus oldStatus = statusCache.getContainerStatus(newStatus.getProjectId(), newStatus.getEnv(), newStatus.getContainerName());
+ public void savePodContainerStatus(JsonObject data) {
+ PodContainerStatus newStatus = data.mapTo(PodContainerStatus.class);
+ PodContainerStatus oldStatus = karavanCache.getPodContainerStatus(newStatus.getProjectId(), newStatus.getEnv(), newStatus.getContainerName());
if (oldStatus == null) {
- statusCache.saveContainerStatus(newStatus);
+ karavanCache.savePodContainerStatus(newStatus);
} else if (Objects.equals(oldStatus.getInTransit(), Boolean.FALSE)) {
- saveContainerStatus(newStatus, oldStatus);
+ savePodContainerStatus(newStatus, oldStatus);
} else if (Objects.equals(oldStatus.getInTransit(), Boolean.TRUE)) {
if (!Objects.equals(oldStatus.getState(), newStatus.getState()) || newStatus.getCpuInfo() == null || newStatus.getCpuInfo().isEmpty()) {
- saveContainerStatus(newStatus, oldStatus);
+ savePodContainerStatus(newStatus, oldStatus);
}
}
}
- private void saveContainerStatus(ContainerStatus newStatus, ContainerStatus oldStatus) {
+ private void savePodContainerStatus(PodContainerStatus newStatus, PodContainerStatus oldStatus) {
if (Objects.equals("exited", newStatus.getState()) || Objects.equals("dead", newStatus.getState())) {
if (Objects.isNull(oldStatus.getFinished())) {
newStatus.setFinished(Instant.now().toString());
@@ -116,6 +89,6 @@ public class ContainerStatusListener {
newStatus.setCpuInfo(oldStatus.getCpuInfo());
newStatus.setMemoryInfo(oldStatus.getMemoryInfo());
}
- statusCache.saveContainerStatus(newStatus);
+ karavanCache.savePodContainerStatus(newStatus);
}
}
\ No newline at end of file
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/ServiceStatusListener.java b/karavan-app/src/main/java/org/apache/camel/karavan/listener/ServiceStatusListener.java
similarity index 100%
rename from karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/ServiceStatusListener.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/listener/ServiceStatusListener.java
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/CamelStatusService.java b/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java
similarity index 77%
rename from karavan-app/src/main/java/org/apache/camel/karavan/CamelStatusService.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java
index 56faffb9..48234ee7 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/CamelStatusService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/CamelStatusScheduler.java
@@ -14,21 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.karavan.status;
+package org.apache.camel.karavan;
import io.quarkus.scheduler.Scheduled;
import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.eventbus.EventBus;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.status.model.CamelStatusRequest;
-import org.apache.camel.karavan.status.model.ContainerStatus;
+import org.apache.camel.karavan.model.CamelStatusRequest;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
-import java.util.*;
+import java.util.Map;
+import java.util.Objects;
-import static org.apache.camel.karavan.status.StatusEvents.CMD_COLLECT_CAMEL_STATUS;
+import static org.apache.camel.karavan.KaravanEvents.CMD_COLLECT_CAMEL_STATUS;
@ApplicationScoped
public class CamelStatusService {
@@ -36,7 +37,7 @@ public class CamelStatusService {
private static final Logger LOGGER = Logger.getLogger(CamelStatusService.class.getName());
@Inject
- StatusCache statusCache;
+ KaravanCache karavanCache;
@ConfigProperty(name = "karavan.environment")
String environment;
@@ -47,11 +48,11 @@ public class CamelStatusService {
@Scheduled(every = "{karavan.camel.status.interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
public void collectCamelStatuses() {
LOGGER.debug("Collect Camel Statuses");
- statusCache.getContainerStatuses(environment).stream()
+ karavanCache.getPodContainerStatuses(environment).stream()
.filter(cs ->
- cs.getType() == ContainerStatus.ContainerType.project
- || cs.getType() == ContainerStatus.ContainerType.devmode
- ).filter(cs -> Objects.equals(cs.getCamelRuntime(), StatusConstants.CamelRuntime.CAMEL_MAIN.getValue()))
+ cs.getType() == PodContainerStatus.ContainerType.project
+ || cs.getType() == PodContainerStatus.ContainerType.devmode
+ ).filter(cs -> Objects.equals(cs.getCamelRuntime(), KaravanConstants.CamelRuntime.CAMEL_MAIN.getValue()))
.forEach(cs -> {
CamelStatusRequest csr = new CamelStatusRequest(cs.getProjectId(), cs.getContainerName());
eventBus.publish(CMD_COLLECT_CAMEL_STATUS,
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerStatusScheduler.java b/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/DockerStatusScheduler.java
similarity index 57%
rename from karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerStatusScheduler.java
rename to karavan-app/src/main/java/org/apache/camel/karavan/scheduler/DockerStatusScheduler.java
index 8d597f96..dea41a2c 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerStatusScheduler.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/scheduler/DockerStatusScheduler.java
@@ -17,19 +17,15 @@
package org.apache.camel.karavan.docker;
-import com.github.dockerjava.api.model.Container;
-import com.github.dockerjava.api.model.Statistics;
-import com.github.dockerjava.core.InvocationBuilder;
import io.quarkus.scheduler.Scheduled;
import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.eventbus.EventBus;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.camel.karavan.ConfigService;
-import org.apache.camel.karavan.model.ContainerStatus;
+import org.apache.camel.karavan.model.PodContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -49,7 +45,7 @@ public class DockerStatusScheduler {
@Scheduled(every = "{karavan.container.statistics.interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
void collectContainersStatistics() {
- List<ContainerStatus> statusesInDocker = getContainersStatuses();
+ List<PodContainerStatus> statusesInDocker = getContainersStatuses();
statusesInDocker.forEach(containerStatus -> {
eventBus.publish(CMD_COLLECT_CONTAINER_STATISTIC, JsonObject.mapFrom(containerStatus));
});
@@ -58,40 +54,20 @@ public class DockerStatusScheduler {
@Scheduled(every = "{karavan.container.status.interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
void collectContainersStatuses() {
if (!ConfigService.inKubernetes()) {
- List<ContainerStatus> statusesInDocker = getContainersStatuses();
+ List<PodContainerStatus> statusesInDocker = getContainersStatuses();
statusesInDocker.forEach(containerStatus -> {
- eventBus.publish(CONTAINER_UPDATED, JsonObject.mapFrom(containerStatus));
+ eventBus.publish(POD_CONTAINER_UPDATED, JsonObject.mapFrom(containerStatus));
});
eventBus.publish(CMD_CLEAN_STATUSES, "");
}
}
- public List<ContainerStatus> getContainersStatuses() {
- List<ContainerStatus> result = new ArrayList<>();
+ public List<PodContainerStatus> getContainersStatuses() {
+ List<PodContainerStatus> result = new ArrayList<>();
dockerService.getAllContainers().forEach(container -> {
- ContainerStatus containerStatus = DockerUtils.getContainerStatus(container, environment);
- result.add(containerStatus);
+ PodContainerStatus podContainerStatus = DockerUtils.getContainerStatus(container, environment);
+ result.add(podContainerStatus);
});
return result;
}
-
- public ContainerStatus getContainerStatistics(ContainerStatus containerStatus) {
- Container container = dockerService.getContainerByName(containerStatus.getContainerName());
- Statistics stats = getContainerStats(container.getId());
- DockerUtils.updateStatistics(containerStatus, stats);
- return containerStatus;
- }
-
- public Statistics getContainerStats(String containerId) {
- InvocationBuilder.AsyncResultCallback<Statistics> callback = new InvocationBuilder.AsyncResultCallback<>();
- dockerService.getDockerClient().statsCmd(containerId).withContainerId(containerId).withNoStream(true).exec(callback);
- Statistics stats = null;
- try {
- stats = callback.awaitResult();
- callback.close();
- } catch (RuntimeException | IOException e) {
- // you may want to throw an exception here
- }
- return stats;
- }
}
\ No newline at end of file