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
The following commit(s) were added to refs/heads/main by this push:
new 73435d86 Cleanup
73435d86 is described below
commit 73435d861adc75491f4c0fefaecb2b1a1a733dc5
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Mon Nov 27 16:40:39 2023 -0500
Cleanup
---
.../camel/karavan/api/ContainerResource.java | 5 +-
.../apache/camel/karavan/api/DevModeResource.java | 3 +-
.../apache/camel/karavan/api/ImagesResource.java | 3 +-
.../apache/camel/karavan/api/KameletResources.java | 2 -
.../apache/camel/karavan/api/LogWatchResource.java | 14 +-
.../camel/karavan/api/ProjectFileResource.java | 15 +-
.../camel/karavan/api/ProjectGitResource.java | 11 +-
.../apache/camel/karavan/api/ProjectResource.java | 14 +-
.../apache/camel/karavan/api/StatusResource.java | 12 +-
.../apache/camel/karavan/api/UsersResource.java | 7 +-
.../org/apache/camel/karavan/code/CodeService.java | 4 +-
.../karavan/code/model/DockerComposeService.java | 5 +-
.../camel/karavan/docker/DockerEventListener.java | 3 -
.../camel/karavan/docker/DockerForGitea.java | 4 +-
.../camel/karavan/docker/DockerForInfinispan.java | 2 +-
.../camel/karavan/docker/DockerForRegistry.java | 2 +-
.../apache/camel/karavan/docker/DockerService.java | 14 +-
.../camel/karavan/docker/DockerServiceUtils.java | 12 +-
.../org/apache/camel/karavan/git/GitService.java | 23 +-
.../karavan/infinispan/InfinispanService.java | 5 +-
.../camel/karavan/infinispan/model/Project.java | 1 +
.../karavan/kubernetes/KubernetesService.java | 14 +-
.../camel/karavan/kubernetes/PodEventHandler.java | 3 +-
.../apache/camel/karavan/service/AuthService.java | 2 +-
.../apache/camel/karavan/service/CamelService.java | 5 +-
.../camel/karavan/service/ConfigService.java | 5 +-
.../karavan/service/ContainerStatusService.java | 23 +-
.../camel/karavan/service/KaravanService.java | 6 +-
.../camel/karavan/service/ProjectService.java | 14 +-
.../webui/src/containers/ContainerTableRow.tsx | 4 +-
.../main/webui/src/containers/ContainersPage.tsx | 2 +-
.../main/webui/src/project/build/BuildPanel.tsx | 207 ------------------
.../main/webui/src/project/build/ImagesPanel.tsx | 238 ---------------------
.../webui/src/project/build/ProjectBuildTab.tsx | 32 ---
34 files changed, 102 insertions(+), 614 deletions(-)
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ContainerResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ContainerResource.java
index 5eefe265..23e0d8e8 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ContainerResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ContainerResource.java
@@ -32,7 +32,6 @@ import
org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.kubernetes.KubernetesService;
import org.apache.camel.karavan.service.ConfigService;
import org.apache.camel.karavan.service.ProjectService;
-import org.apache.camel.karavan.shared.Constants;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
@@ -100,7 +99,7 @@ public class ContainerResource {
if (dockerComposeService != null) {
Map<String,String> labels = new HashMap<>();
labels.put(LABEL_TYPE,
ContainerStatus.ContainerType.devservice.name());
- labels.put(LABEL_CAMEL_RUNTIME,
Constants.CamelRuntime.CAMEL_MAIN.getValue());
+ labels.put(LABEL_CAMEL_RUNTIME,
CamelRuntime.CAMEL_MAIN.getValue());
labels.put(LABEL_PROJECT_ID, name);
dockerService.createContainerFromCompose(dockerComposeService, labels);
dockerService.runContainer(dockerComposeService.getContainer_name());
@@ -110,7 +109,7 @@ public class ContainerResource {
if (dockerComposeService != null) {
Map<String,String> labels = new HashMap<>();
labels.put(LABEL_TYPE,
ContainerStatus.ContainerType.project.name());
- labels.put(LABEL_CAMEL_RUNTIME,
Constants.CamelRuntime.CAMEL_MAIN.getValue());
+ labels.put(LABEL_CAMEL_RUNTIME,
CamelRuntime.CAMEL_MAIN.getValue());
labels.put(LABEL_PROJECT_ID, name);
dockerService.createContainerFromCompose(dockerComposeService, labels);
dockerService.runContainer(dockerComposeService.getContainer_name());
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
index 2b73642a..1a8fe8ad 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
@@ -24,13 +24,12 @@ import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.apache.camel.karavan.docker.DockerService;
import org.apache.camel.karavan.infinispan.InfinispanService;
-import org.apache.camel.karavan.infinispan.model.CamelStatus;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.infinispan.model.Project;
import org.apache.camel.karavan.kubernetes.KubernetesService;
import org.apache.camel.karavan.service.CamelService;
-import org.apache.camel.karavan.service.ProjectService;
import org.apache.camel.karavan.service.ConfigService;
+import org.apache.camel.karavan.service.ProjectService;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import static
org.apache.camel.karavan.service.ContainerStatusService.CONTAINER_STATUS;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
index 21b0d6ba..6bbe60f5 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ImagesResource.java
@@ -23,12 +23,11 @@ import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.apache.camel.karavan.docker.DockerService;
import org.apache.camel.karavan.registry.RegistryConfig;
+import org.apache.camel.karavan.registry.RegistryService;
import org.apache.camel.karavan.service.ConfigService;
import org.apache.camel.karavan.service.ProjectService;
-import org.apache.camel.karavan.registry.RegistryService;
import org.jose4j.base64url.Base64;
-import java.io.IOException;
import java.util.Comparator;
import java.util.List;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
index 3c771080..6c419e88 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/KameletResources.java
@@ -27,9 +27,7 @@ import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
-import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
import java.util.stream.Collectors;
@Path("/api/kamelet")
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/LogWatchResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/LogWatchResource.java
index e640b583..f0d71eb0 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/LogWatchResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/LogWatchResource.java
@@ -21,13 +21,6 @@ import io.fabric8.kubernetes.client.dsl.LogWatch;
import io.smallrye.context.api.ManagedExecutorConfig;
import io.smallrye.context.api.NamedInstance;
import io.smallrye.mutiny.tuples.Tuple2;
-import org.apache.camel.karavan.docker.DockerService;
-import org.apache.camel.karavan.docker.LogCallback;
-import org.apache.camel.karavan.kubernetes.KubernetesService;
-import org.apache.camel.karavan.service.ConfigService;
-import org.eclipse.microprofile.context.ManagedExecutor;
-import org.jboss.logging.Logger;
-
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
@@ -38,6 +31,13 @@ import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.SecurityContext;
import jakarta.ws.rs.sse.Sse;
import jakarta.ws.rs.sse.SseEventSink;
+import org.apache.camel.karavan.docker.DockerService;
+import org.apache.camel.karavan.docker.LogCallback;
+import org.apache.camel.karavan.kubernetes.KubernetesService;
+import org.apache.camel.karavan.service.ConfigService;
+import org.eclipse.microprofile.context.ManagedExecutor;
+import org.jboss.logging.Logger;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
index ae8e50f0..bf00fa8a 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
@@ -16,20 +16,13 @@
*/
package org.apache.camel.karavan.api;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import org.apache.camel.karavan.code.CodeService;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.ProjectFile;
-import org.apache.camel.karavan.code.CodeService;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.Consumes;
-import jakarta.ws.rs.DELETE;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.HeaderParam;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java
index 99588861..948b88a2 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectGitResource.java
@@ -16,17 +16,12 @@
*/
package org.apache.camel.karavan.api;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
import org.apache.camel.karavan.infinispan.model.Project;
import org.apache.camel.karavan.service.ProjectService;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.Consumes;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
import java.util.HashMap;
@Path("/api/git")
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
index ab2042e2..52cfe36e 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
@@ -16,17 +16,19 @@
*/
package org.apache.camel.karavan.api;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.apache.camel.karavan.docker.DockerService;
+import org.apache.camel.karavan.git.GitService;
import org.apache.camel.karavan.infinispan.InfinispanService;
-import org.apache.camel.karavan.infinispan.model.*;
+import org.apache.camel.karavan.infinispan.model.CamelStatus;
+import org.apache.camel.karavan.infinispan.model.CamelStatusValue;
+import org.apache.camel.karavan.infinispan.model.Project;
import org.apache.camel.karavan.kubernetes.KubernetesService;
-import org.apache.camel.karavan.git.GitService;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-import org.apache.camel.karavan.service.ProjectService;
import org.apache.camel.karavan.service.ConfigService;
+import org.apache.camel.karavan.service.ProjectService;
import org.jboss.logging.Logger;
import java.net.URLDecoder;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
index 5faabe0d..e62924e7 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
@@ -16,11 +16,6 @@
*/
package org.apache.camel.karavan.api;
-import io.vertx.core.eventbus.EventBus;
-import org.apache.camel.karavan.infinispan.InfinispanService;
-import org.apache.camel.karavan.infinispan.model.*;
-import org.jboss.logging.Logger;
-
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
@@ -28,8 +23,13 @@ import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
+import org.apache.camel.karavan.infinispan.InfinispanService;
+import org.apache.camel.karavan.infinispan.model.CamelStatus;
+import org.apache.camel.karavan.infinispan.model.CamelStatusValue;
+import org.apache.camel.karavan.infinispan.model.DeploymentStatus;
+import org.jboss.logging.Logger;
+
import java.util.List;
-import java.util.Optional;
@Path("/api/status")
public class StatusResource {
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/UsersResource.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/UsersResource.java
index 0d03c133..fbf6e61e 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/UsersResource.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/UsersResource.java
@@ -17,16 +17,13 @@
package org.apache.camel.karavan.api;
+import io.quarkus.security.identity.SecurityIdentity;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
-
-import io.quarkus.oidc.IdToken;
-import org.eclipse.microprofile.jwt.JsonWebToken;
import org.jboss.resteasy.reactive.NoCache;
-import io.quarkus.security.identity.SecurityIdentity;
import java.util.Set;
@@ -47,7 +44,7 @@ public class UsersResource {
public static class User {
private final String userName;
- private final java.util.Set<java.lang.String> roles;
+ private final Set<String> roles;
User(SecurityIdentity securityIdentity) {
this.userName = securityIdentity.getPrincipal().getName();
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
index 0877c3a2..18e44f57 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/CodeService.java
@@ -31,11 +31,11 @@ import org.apache.camel.CamelContext;
import org.apache.camel.generator.openapi.RestDslGenerator;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.karavan.api.KameletResources;
-import org.apache.camel.karavan.docker.DockerService;
import org.apache.camel.karavan.code.model.DockerComposeService;
-import org.apache.camel.karavan.infinispan.InfinispanService;
+import org.apache.camel.karavan.docker.DockerService;
import org.apache.camel.karavan.git.model.GitRepo;
import org.apache.camel.karavan.git.model.GitRepoFile;
+import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.Project;
import org.apache.camel.karavan.infinispan.model.ProjectFile;
import org.apache.camel.karavan.kubernetes.KubernetesService;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/model/DockerComposeService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/model/DockerComposeService.java
index 98f6ed2a..0370faae 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/model/DockerComposeService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/code/model/DockerComposeService.java
@@ -17,7 +17,10 @@
package org.apache.camel.karavan.code.model;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
public class DockerComposeService {
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
index 6555ff3d..d3ed22a3 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java
@@ -21,18 +21,15 @@ import com.github.dockerjava.api.async.ResultCallback;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Event;
import com.github.dockerjava.api.model.EventType;
-import io.vertx.core.eventbus.EventBus;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
-import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
import java.io.Closeable;
import java.io.IOException;
import java.util.Objects;
-import java.util.Optional;
import static org.apache.camel.karavan.shared.Constants.*;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
index ab7bf72d..407e0baa 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
@@ -20,11 +20,11 @@ import
com.github.dockerjava.api.command.ExecCreateCmdResponse;
import com.github.dockerjava.api.model.Container;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.infinispan.model.ContainerStatus;
-import org.apache.camel.karavan.git.model.GitConfig;
import org.apache.camel.karavan.code.CodeService;
import org.apache.camel.karavan.git.GitService;
import org.apache.camel.karavan.git.GiteaService;
+import org.apache.camel.karavan.git.model.GitConfig;
+import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.jboss.logging.Logger;
@ApplicationScoped
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
index 7af32ff3..29874102 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
@@ -18,8 +18,8 @@ package org.apache.camel.karavan.docker;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.code.CodeService;
+import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
index f3fee4c7..0bd9c6d0 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
@@ -18,8 +18,8 @@ package org.apache.camel.karavan.docker;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
-import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.code.CodeService;
+import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.jboss.logging.Logger;
@ApplicationScoped
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
index 6ffb3d1b..3941a4bc 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
@@ -33,20 +33,23 @@ import jakarta.inject.Inject;
import org.apache.camel.karavan.code.CodeService;
import org.apache.camel.karavan.code.model.DockerComposeService;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
-import org.apache.camel.karavan.shared.Constants;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.io.IOUtils;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
-import static org.apache.camel.karavan.shared.Constants.*;
+import static org.apache.camel.karavan.shared.Constants.LABEL_PROJECT_ID;
+import static org.apache.camel.karavan.shared.Constants.LABEL_TYPE;
@ApplicationScoped
public class DockerService extends DockerServiceUtils {
@@ -280,7 +283,6 @@ public class DockerService extends DockerServiceUtils {
public void copyFiles(String containerId, String containerPath,
Map<String, String> files) throws IOException {
String temp = codeService.saveProjectFilesInTemp(files);
- System.out.println(temp);
dockerClient.copyArchiveToContainerCmd(containerId).withRemotePath(containerPath)
.withDirChildrenOnly(true).withHostResource(temp).exec();
}
@@ -321,7 +323,7 @@ public class DockerService extends DockerServiceUtils {
.withStdErr(true)
.withTimestamps(false)
.withFollowStream(true)
- .withTailAll()
+ .withTail(100)
.exec(callback);
callback.awaitCompletion();
}
@@ -395,7 +397,7 @@ public class DockerService extends DockerServiceUtils {
public int getMaxPortMapped(int port) {
return
getDockerClient().listContainersCmd().withShowAll(true).exec().stream()
.map(c -> List.of(c.ports))
- .flatMap(java.util.List::stream)
+ .flatMap(List::stream)
.filter(p -> Objects.equals(p.getPrivatePort(), port))
.map(ContainerPort::getPublicPort).filter(Objects::nonNull)
.mapToInt(Integer::intValue)
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
index 79cb561d..049a9f62 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
@@ -18,11 +18,10 @@ package org.apache.camel.karavan.docker;
import com.github.dockerjava.api.model.*;
import io.smallrye.mutiny.tuples.Tuple2;
-import io.vertx.core.json.JsonArray;
import org.apache.camel.karavan.api.KameletResources;
import org.apache.camel.karavan.code.model.DockerComposeHealthCheck;
-import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.infinispan.model.ContainerPort;
+import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import java.io.BufferedReader;
import java.io.InputStream;
@@ -59,10 +58,13 @@ public class DockerServiceUtils {
protected void updateStatistics(ContainerStatus containerStatus,
Statistics stats) {
if (stats != null && stats.getMemoryStats() != null) {
- String memoryUsage =
formatMemory(stats.getMemoryStats().getUsage());
- String memoryLimit =
formatMemory(stats.getMemoryStats().getLimit());
- containerStatus.setMemoryInfo(memoryUsage + " / " + memoryLimit);
+ String memoryUsageString =
formatMemory(stats.getMemoryStats().getUsage());
+ String memoryLimitString =
formatMemory(stats.getMemoryStats().getLimit());
+ containerStatus.setMemoryInfo(memoryUsageString + " / " +
memoryLimitString);
containerStatus.setCpuInfo(formatCpu(containerStatus.getContainerName(),
stats));
+ } else {
+ containerStatus.setMemoryInfo("0MiB/0MiB");
+ containerStatus.setCpuInfo("0%");
}
}
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/git/GitService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/git/GitService.java
index 99cb38ff..098b79bd 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/git/GitService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/git/GitService.java
@@ -19,43 +19,32 @@ package org.apache.camel.karavan.git;
import io.fabric8.kubernetes.api.model.Secret;
import io.smallrye.mutiny.tuples.Tuple2;
import io.vertx.core.Vertx;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
import org.apache.camel.karavan.git.model.GitConfig;
import org.apache.camel.karavan.git.model.GitRepo;
import org.apache.camel.karavan.git.model.GitRepoFile;
-import org.apache.camel.karavan.infinispan.model.*;
+import org.apache.camel.karavan.infinispan.model.Project;
+import org.apache.camel.karavan.infinispan.model.ProjectFile;
import org.apache.camel.karavan.kubernetes.KubernetesService;
-import org.apache.camel.karavan.registry.RegistryConfig;
import org.apache.camel.karavan.service.ConfigService;
-import org.eclipse.jgit.api.CheckoutCommand;
-import org.eclipse.jgit.api.CloneCommand;
-import org.eclipse.jgit.api.FetchCommand;
-import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.api.PullCommand;
-import org.eclipse.jgit.api.PullResult;
-import org.eclipse.jgit.api.RemoteAddCommand;
+import org.eclipse.jgit.api.*;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.RefNotFoundException;
import org.eclipse.jgit.api.errors.TransportException;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.transport.CredentialsProvider;
-import org.eclipse.jgit.transport.FetchResult;
-import org.eclipse.jgit.transport.PushResult;
-import org.eclipse.jgit.transport.URIish;
-import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
+import org.eclipse.jgit.transport.*;
import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.treewalk.filter.TreeFilter;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.faulttolerance.Retry;
import org.jboss.logging.Logger;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
index 27492c57..109781e3 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
@@ -41,7 +41,10 @@ import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.time.Instant;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
index 562b8b30..6c4beac4 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
@@ -32,6 +32,7 @@ public class Project {
@ProtoEnumValue (number = 1, name = "kamelets") kamelets,
@ProtoEnumValue (number = 2, name = "services") services,
@ProtoEnumValue (number = 3, name = "normal") normal,
+ @ProtoEnumValue (number = 4, name = "ephemeral") ephemeral,
}
@ProtoField(number = 1)
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
index 14a6d6a0..5b2459ab 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
@@ -27,29 +27,25 @@ import io.fabric8.openshift.client.OpenShiftClient;
import io.quarkus.runtime.configuration.ProfileManager;
import io.smallrye.mutiny.tuples.Tuple2;
import io.vertx.mutiny.core.eventbus.EventBus;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Default;
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Inject;
+import org.apache.camel.karavan.code.CodeService;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
import org.apache.camel.karavan.infinispan.model.Project;
-import org.apache.camel.karavan.infinispan.model.ProjectFile;
-import org.apache.camel.karavan.code.CodeService;
import org.apache.camel.karavan.service.ConfigService;
-import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Readiness;
import org.jboss.logging.Logger;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Default;
-import jakarta.enterprise.inject.Produces;
-import jakarta.inject.Inject;
-
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
-import static
org.apache.camel.karavan.code.CodeService.APPLICATION_PROPERTIES_FILENAME;
import static org.apache.camel.karavan.shared.Constants.*;
@Default
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java
index c137a560..0af91999 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java
@@ -26,15 +26,14 @@ import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.eventbus.EventBus;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
-import org.apache.camel.karavan.infinispan.model.ProjectFile;
import org.jboss.logging.Logger;
import java.util.List;
import java.util.Objects;
import static
org.apache.camel.karavan.code.CodeService.DEFAULT_CONTAINER_RESOURCES;
-import static org.apache.camel.karavan.shared.Constants.LABEL_PROJECT_ID;
import static
org.apache.camel.karavan.service.ContainerStatusService.CONTAINER_STATUS;
+import static org.apache.camel.karavan.shared.Constants.LABEL_PROJECT_ID;
import static org.apache.camel.karavan.shared.Constants.LABEL_TYPE;
public class PodEventHandler implements ResourceEventHandler<Pod> {
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/AuthService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/AuthService.java
index ae56f23f..099c2571 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/AuthService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/AuthService.java
@@ -16,10 +16,10 @@
*/
package org.apache.camel.karavan.service;
+import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.ConfigProvider;
import org.jboss.logging.Logger;
-import jakarta.enterprise.context.ApplicationScoped;
import java.net.MalformedURLException;
import java.util.Map;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
index a945bcc0..134b41fe 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
@@ -24,6 +24,8 @@ import io.vertx.mutiny.core.buffer.Buffer;
import io.vertx.mutiny.core.eventbus.EventBus;
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.code.CodeService;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.CamelStatus;
@@ -35,9 +37,6 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipse.microprofile.faulttolerance.CircuitBreaker;
import org.jboss.logging.Logger;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-
import java.util.*;
import java.util.concurrent.ExecutionException;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ConfigService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ConfigService.java
index 4dc2dd5a..fca69c3b 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ConfigService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ConfigService.java
@@ -17,11 +17,10 @@
package org.apache.camel.karavan.service;
import io.quarkus.runtime.StartupEvent;
-import org.apache.camel.karavan.shared.Configuration;
-import org.eclipse.microprofile.config.inject.ConfigProperty;
-
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
+import org.apache.camel.karavan.shared.Configuration;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
import java.nio.file.Files;
import java.nio.file.Paths;
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
index b9cca03c..9909b20b 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
@@ -26,7 +26,6 @@ import jakarta.inject.Inject;
import org.apache.camel.karavan.docker.DockerService;
import org.apache.camel.karavan.infinispan.InfinispanService;
import org.apache.camel.karavan.infinispan.model.ContainerStatus;
-import org.apache.camel.karavan.infinispan.model.Project;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.logging.Logger;
@@ -39,6 +38,7 @@ import java.util.Objects;
public class ContainerStatusService {
public static final String CONTAINER_STATUS = "CONTAINER_STATUS";
+ public static final String CONTAINER_DELETED = "CONTAINER_DELETED";
private static final Logger LOGGER =
Logger.getLogger(ContainerStatusService.class.getName());
@ConfigProperty(name = "karavan.environment")
String environment;
@@ -57,7 +57,7 @@ public class ContainerStatusService {
if (infinispanService.isReady() && !ConfigService.inKubernetes()) {
List<ContainerStatus> statusesInDocker =
dockerService.collectContainersStatistics();
statusesInDocker.forEach(containerStatus -> {
- eventBus.send(ContainerStatusService.CONTAINER_STATUS,
JsonObject.mapFrom(containerStatus));
+ eventBus.publish(ContainerStatusService.CONTAINER_STATUS,
JsonObject.mapFrom(containerStatus));
});
}
}
@@ -68,7 +68,7 @@ public class ContainerStatusService {
if (!ConfigService.inKubernetes()) {
List<ContainerStatus> statusesInDocker =
dockerService.collectContainersStatuses();
statusesInDocker.forEach(containerStatus -> {
- eventBus.send(ContainerStatusService.CONTAINER_STATUS,
JsonObject.mapFrom(containerStatus));
+ eventBus.publish(ContainerStatusService.CONTAINER_STATUS,
JsonObject.mapFrom(containerStatus));
});
cleanContainersStatuses(statusesInDocker);
}
@@ -84,6 +84,7 @@ public class ContainerStatusService {
.filter(cs -> !checkTransit(cs))
.filter(cs ->
!namesInDocker.contains(cs.getContainerName()))
.forEach(containerStatus -> {
+
eventBus.publish(ContainerStatusService.CONTAINER_DELETED,
JsonObject.mapFrom(containerStatus));
infinispanService.deleteContainerStatus(containerStatus);
infinispanService.deleteCamelStatuses(containerStatus.getProjectId(),
containerStatus.getEnv());
});
@@ -114,24 +115,12 @@ public class ContainerStatusService {
}
}
- @ConsumeEvent(value = CONTAINER_STATUS, blocking = true, ordered = true)
- public void checkProjectExists(JsonObject data) {
- if (infinispanService.isReady()) {
- ContainerStatus status = data.mapTo(ContainerStatus.class);
- if
(status.getType().equals(ContainerStatus.ContainerType.project)) {
- Project project =
infinispanService.getProject(status.getProjectId());
- if (project == null) {
- project = new Project(status.getProjectId(),
status.getProjectId(), status.getProjectId());
- infinispanService.saveProject(project);
- }
- }
- }
- }
-
private void saveContainerStatus(ContainerStatus newStatus,
ContainerStatus oldStatus) {
if (Objects.equals("exited", newStatus.getState()) ||
Objects.equals("dead", newStatus.getState())) {
if (Objects.isNull(oldStatus.getFinished())) {
newStatus.setFinished(Instant.now().toString());
+ newStatus.setMemoryInfo("0MiB/0MiB");
+ newStatus.setCpuInfo("0%");
} else if (Objects.nonNull(oldStatus.getFinished())) {
return;
}
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
index 582f3a98..3748e4d3 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
@@ -22,6 +22,8 @@ import io.quarkus.runtime.Startup;
import io.quarkus.runtime.StartupEvent;
import io.quarkus.vertx.ConsumeEvent;
import io.vertx.core.eventbus.EventBus;
+import jakarta.enterprise.event.Observes;
+import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import org.apache.camel.karavan.docker.DockerForGitea;
import org.apache.camel.karavan.docker.DockerForInfinispan;
@@ -36,8 +38,6 @@ import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Liveness;
import org.jboss.logging.Logger;
-import jakarta.enterprise.event.Observes;
-import jakarta.inject.Inject;
import java.io.IOException;
@Startup
@@ -82,7 +82,7 @@ public class KaravanService implements HealthCheck {
private static final String START_KUBERNETES_SERVICES =
"START_KUBERNETES_LISTENERS";
private static final String START_INTERNAL_DOCKER_SERVICES =
"START_INTERNAL_DOCKER_SERVICES";
- private static final String START_SERVICES = "START_SERVICES";
+ public static final String START_SERVICES = "START_SERVICES";
@Override
public HealthCheckResponse call() {
diff --git
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index b163dbd8..37e71092 100644
---
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -18,14 +18,20 @@ package org.apache.camel.karavan.service;
import io.vertx.core.json.JsonObject;
import io.vertx.mutiny.core.eventbus.EventBus;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Default;
+import jakarta.inject.Inject;
import org.apache.camel.karavan.code.CodeService;
import org.apache.camel.karavan.code.DockerComposeConverter;
-import org.apache.camel.karavan.docker.DockerForKaravan;
import org.apache.camel.karavan.code.model.DockerComposeService;
+import org.apache.camel.karavan.docker.DockerForKaravan;
import org.apache.camel.karavan.git.GitService;
import org.apache.camel.karavan.git.model.GitRepo;
import org.apache.camel.karavan.infinispan.InfinispanService;
-import org.apache.camel.karavan.infinispan.model.*;
+import org.apache.camel.karavan.infinispan.model.ContainerStatus;
+import org.apache.camel.karavan.infinispan.model.GroupedKey;
+import org.apache.camel.karavan.infinispan.model.Project;
+import org.apache.camel.karavan.infinispan.model.ProjectFile;
import org.apache.camel.karavan.kubernetes.KubernetesService;
import org.apache.camel.karavan.registry.RegistryService;
import org.apache.camel.karavan.shared.Property;
@@ -37,10 +43,6 @@ import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Readiness;
import org.jboss.logging.Logger;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Default;
-import jakarta.inject.Inject;
-
import java.time.Instant;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
diff --git
a/karavan-web/karavan-app/src/main/webui/src/containers/ContainerTableRow.tsx
b/karavan-web/karavan-app/src/main/webui/src/containers/ContainerTableRow.tsx
index 5a751f48..edc74604 100644
---
a/karavan-web/karavan-app/src/main/webui/src/containers/ContainerTableRow.tsx
+++
b/karavan-web/karavan-app/src/main/webui/src/containers/ContainerTableRow.tsx
@@ -98,7 +98,9 @@ export function ContainerTableRow(props: Props) {
<Td>
<Label color={color}>{container.containerName}</Label>
</Td>
- <Td>{image}</Td>
+ <Td>
+ <p style={{wordWrap:"break-word"}}>{image}</p>
+ </Td>
<Td>
{isRunning && container.cpuInfo && <Label
color={color}>{container.cpuInfo}</Label>}
</Td>
diff --git
a/karavan-web/karavan-app/src/main/webui/src/containers/ContainersPage.tsx
b/karavan-web/karavan-app/src/main/webui/src/containers/ContainersPage.tsx
index 5fe8adc4..d8523b6f 100644
--- a/karavan-web/karavan-app/src/main/webui/src/containers/ContainersPage.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/containers/ContainersPage.tsx
@@ -137,7 +137,7 @@ export function ContainersPage () {
const conts = containers.filter(d =>
d.containerName.toLowerCase().includes(filter));
return (
- <PageSection className="kamelet-section dashboard-page"
padding={{default: 'noPadding'}}>
+ <PageSection className="kamelet-section" padding={{default:
'noPadding'}}>
<PageSection className="tools-section" padding={{default:
'noPadding'}}>
<MainToolbar title={title()} tools={tools()}/>
</PageSection>
diff --git
a/karavan-web/karavan-app/src/main/webui/src/project/build/BuildPanel.tsx
b/karavan-web/karavan-app/src/main/webui/src/project/build/BuildPanel.tsx
deleted file mode 100644
index f1dedba6..00000000
--- a/karavan-web/karavan-app/src/main/webui/src/project/build/BuildPanel.tsx
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React, {useEffect, useState} from 'react';
-import {
- Button,
- DescriptionList,
- DescriptionListTerm,
- DescriptionListGroup,
- DescriptionListDescription, Spinner, Tooltip, Flex, FlexItem, LabelGroup,
Label, Modal, Badge, CardBody, Card
-} from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {KaravanApi} from "../../api/KaravanApi";
-import BuildIcon from "@patternfly/react-icons/dist/esm/icons/build-icon";
-import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
-import DownIcon from
"@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
-import ClockIcon from "@patternfly/react-icons/dist/esm/icons/clock-icon";
-import TagIcon from "@patternfly/react-icons/dist/esm/icons/tag-icon";
-import DeleteIcon from
"@patternfly/react-icons/dist/esm/icons/times-circle-icon";
-import {useAppConfigStore, useLogStore, useProjectStore, useStatusesStore}
from "../../api/ProjectStore";
-import {shallow} from "zustand/shallow";
-import {EventBus} from "../../designer/utils/EventBus";
-import {ProjectService} from "../../api/ProjectService";
-
-export function BuildPanel () {
-
- const [config] = useAppConfigStore((state) => [state.config], shallow)
- const [project] = useProjectStore((s) => [s.project], shallow);
- const [setShowLog] = useLogStore((s) => [s.setShowLog], shallow);
- const [containers, deployments, camels] =
- useStatusesStore((s) => [s.containers, s.deployments, s.camels],
shallow);
- const [isPushing, setIsPushing] = useState<boolean>(false);
- const [isBuilding, setIsBuilding] = useState<boolean>(false);
- const [showDeleteConfirmation, setShowDeleteConfirmation] =
useState<boolean>(false);
- const [deleteEntityName, setDeleteEntityName] = useState<string>();
- const [tag, setTag] = useState<string>(
- new Date().toISOString().substring(0,19).replaceAll(':',
'').replaceAll('-', '')
- );
-
- function deleteEntity() {
- const buildName = getBuildName();
- if (buildName) {
- KaravanApi.manageContainer(config.environment, 'build', buildName,
'delete', res => {
- EventBus.sendAlert("Container deleted", "Container " +
buildName + " deleted", 'info')
- setShowLog(false, 'container', undefined)
- });
- }
- }
-
- function build() {
- setIsBuilding(true);
- setShowLog(false,'none')
- KaravanApi.buildProject(project, tag, res => {
- if (res.status === 200 || res.status === 201) {
- setIsBuilding(false);
- } else {
- console.log(res);
- EventBus.sendAlert("Error", (res as any)?.response?.data,
'danger')
- }
- });
- }
-
- function buildButton() {
- const status = containers.filter(c => c.projectId ===
project.projectId && c.type === 'build').at(0);
- const isRunning = status?.state === 'running';
- return (<Tooltip content="Start build" position={"left"}>
- <Button isLoading={isBuilding ? true : undefined}
- isDisabled={isBuilding || isRunning || isPushing}
- size="sm"
- variant="secondary"
- className="project-button"
- icon={!isBuilding ? <BuildIcon/> : <div></div>}
- onClick={e => build()}>
- {isBuilding ? "..." : "Build"}
- </Button>
- </Tooltip>)
- }
-
- function getContainerStatus() {
- return containers.filter(c => c.projectId === project.projectId &&
c.type === 'build').at(0);
- }
-
- function getBuildName() {
- const status = getContainerStatus();
- return status?.containerName;
- }
-
- function getBuildState() {
- const status = getContainerStatus();
- const buildName = getBuildName();
- const state = status?.state;
- let buildTime = 0;
- if (status?.created) {
- const start: Date = new Date(status.created);
- const finish: Date = status.finished !== undefined &&
status.finished !== null ? new Date(status.finished) : new Date();
- buildTime = Math.round((finish.getTime() - start.getTime()) /
1000);
- }
- const showTime = buildTime && buildTime > 0;
- const isRunning = state === 'running';
- const isExited = state === 'exited';
- const isFailed = state === 'failed';
- const color = (isRunning ? "blue" : (isFailed ? "red" : "grey"));
- const icon = isExited ? <UpIcon className="not-spinner"/> : <DownIcon
className="not-spinner"/>
- return (
- <Flex justifyContent={{default: "justifyContentSpaceBetween"}}
alignItems={{default: "alignItemsCenter"}}>
- <FlexItem>
- <LabelGroup numLabels={3}>
- <Label icon={isRunning ? <Spinner diameter="16px"
className="spinner"/> : icon}
- color={color}>
- {buildName
- ? <Button className='labeled-button'
variant="link" onClick={e =>
- useLogStore.setState({showLog: true, type:
'build', podName: buildName})
- }>
- {buildName}
- </Button>
- : "No builder"}
- {status !== undefined && <Tooltip content={"Delete
build"}>
- <Button
- icon={<DeleteIcon/>}
- className="labeled-button"
- variant="link" onClick={e => {
- setShowDeleteConfirmation(true);
- setDeleteEntityName(buildName);
- }}></Button>
- </Tooltip>}
- </Label>
- {buildName !== undefined && showTime === true &&
buildTime !== undefined &&
- <Label icon={<ClockIcon className="not-spinner"/>}
- color={color}>{buildTime + "s"}</Label>}
- </LabelGroup>
- </FlexItem>
- <FlexItem>{buildButton()}</FlexItem>
- </Flex>
- )
- }
-
- function getBuildTag() {
- const status = containers.filter(c => c.projectId ===
project.projectId && c.type === 'build').at(0);
- const state = status?.state;
- const isRunning = state === 'running';
- const isExited = state === 'exited';
- const color = isExited ? "grey" : (isRunning ? "blue" : "grey");
- return (
- <Label isEditable={!isRunning} onEditComplete={(_, v) => setTag(v)}
- icon={<TagIcon className="not-spinner"/>}
- color={color}>{tag}</Label>
- )
- }
-
- function getDeleteConfirmation() {
- return (<Modal
- className="modal-delete"
- title="Confirmation"
- isOpen={showDeleteConfirmation}
- onClose={() => setShowDeleteConfirmation(false)}
- actions={[
- <Button key="confirm" variant="primary" onClick={e => {
- if (deleteEntityName && deleteEntity) {
- deleteEntity();
- setShowDeleteConfirmation(false);
- }
- }}>Delete
- </Button>,
- <Button key="cancel" variant="link"
- onClick={e =>
setShowDeleteConfirmation(false)}>Cancel</Button>
- ]}
- onEscapePress={e => setShowDeleteConfirmation(false)}>
- <div>{"Delete build " + deleteEntityName + "?"}</div>
- </Modal>)
- }
-
- return (
- <Card className="project-status">
- <CardBody>
- <DescriptionList isHorizontal
horizontalTermWidthModifier={{default: '20ch'}}>
- <DescriptionListGroup>
- <DescriptionListTerm>Tag</DescriptionListTerm>
- <DescriptionListDescription>
- {getBuildTag()}
- </DescriptionListDescription>
- </DescriptionListGroup>
- <DescriptionListGroup>
- <DescriptionListTerm>Build
container</DescriptionListTerm>
- <DescriptionListDescription>
- {getBuildState()}
- </DescriptionListDescription>
- </DescriptionListGroup>
- </DescriptionList>
- </CardBody>
- {showDeleteConfirmation && getDeleteConfirmation()}
- </Card>
- )
-}
diff --git
a/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx
b/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx
deleted file mode 100644
index 22c22a93..00000000
--- a/karavan-web/karavan-app/src/main/webui/src/project/build/ImagesPanel.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React, {useState} from 'react';
-import {
- Button,
- Tooltip,
- Flex,
- FlexItem,
- Modal,
- Panel,
- PanelHeader,
- TextContent,
- Text,
- TextVariants,
- Bullseye, EmptyState, EmptyStateVariant, EmptyStateHeader, EmptyStateIcon,
PageSection, Switch, TextInput
-} from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {useFilesStore, useProjectStore} from "../../api/ProjectStore";
-import {shallow} from "zustand/shallow";
-import {Table} from "@patternfly/react-table/deprecated";
-import {Tbody, Td, Th, Thead, Tr} from "@patternfly/react-table";
-import SearchIcon from "@patternfly/react-icons/dist/esm/icons/search-icon";
-import SetIcon from "@patternfly/react-icons/dist/esm/icons/check-icon";
-import {KaravanApi} from "../../api/KaravanApi";
-import {ProjectService} from "../../api/ProjectService";
-import {ServicesYaml} from "../../api/ServiceModels";
-import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
-import {EventBus} from "../../designer/utils/EventBus";
-
-export function ImagesPanel () {
-
- const [project, images] = useProjectStore((s) => [s.project, s.images],
shallow);
- const [files] = useFilesStore((s) => [s.files], shallow);
- const [showSetConfirmation, setShowSetConfirmation] =
useState<boolean>(false);
- const [showDeleteConfirmation, setShowDeleteConfirmation] =
useState<boolean>(false);
- const [imageName, setImageName] = useState<string>();
- const [commitChanges, setCommitChanges] = useState<boolean>(false);
- const [commitMessage, setCommitMessage] = useState('');
-
- function setProjectImage() {
- if (imageName) {
- KaravanApi.setProjectImage(project.projectId, imageName,
commitChanges, commitMessage, (res: any) => {
- ProjectService.refreshProjectData(project.projectId);
- });
- }
- }
-
- function getProjectImage(): string | undefined {
- const file = files.filter(f => f.name === 'docker-compose.yaml').at(0);
- if (file) {
- const dc = ServicesYaml.yamlToServices(file.code);
- const dcs = dc.services.filter(s => s.container_name ===
project.projectId).at(0);
- return dcs?.image;
- }
- return undefined;
- }
-
- function getSetConfirmation() {
- const index = imageName?.lastIndexOf(":");
- const name = imageName?.substring(0, index);
- const tag = index ? imageName?.substring(index+1) : "";
- return (<Modal
- className="modal-delete"
- title="Confirmation"
- isOpen={showSetConfirmation}
- onClose={() => setShowSetConfirmation(false)}
- actions={[
- <Button key="confirm" variant="primary" onClick={e => {
- if (imageName) {
- setProjectImage();
- setShowSetConfirmation(false);
- setCommitChanges(false);
- }
- }}>Set
- </Button>,
- <Button key="cancel" variant="link"
- onClick={e => {
- setShowSetConfirmation(false);
- setCommitChanges(false);
- }}>Cancel</Button>
- ]}
- onEscapePress={e => setShowSetConfirmation(false)}>
- <Flex direction={{default:"column"}}
justifyContent={{default:"justifyContentFlexStart"}}>
- <FlexItem>
- <div>{"Set image for project " + project.projectId +
":"}</div>
- <div>{"Name: " + name}</div>
- <div>{"Tag: " + tag}</div>
- </FlexItem>
- <FlexItem>
- <Switch
- id="commit-switch"
- label="Commit changes"
- isChecked={commitChanges}
- onChange={(event, checked) =>
setCommitChanges(checked)}
- isReversed
- />
- </FlexItem>
- {commitChanges && <FlexItem>
- <TextInput value={commitMessage} type="text"
- onChange={(_, value) => setCommitMessage(value)}
- aria-label="commit message"/>
- </FlexItem>}
- </Flex>
- </Modal>)
- }
-
- function getDeleteConfirmation() {
- return (<Modal
- className="modal-delete"
- title="Confirmation"
- isOpen={showDeleteConfirmation}
- onClose={() => setShowDeleteConfirmation(false)}
- actions={[
- <Button key="confirm" variant="primary" onClick={e => {
- if (imageName) {
- KaravanApi.deleteImage(imageName, () => {
- EventBus.sendAlert("Image deleted", "Image " +
imageName + " deleted", 'info');
- setShowDeleteConfirmation(false);
- });
- }
- }}>Delete
- </Button>,
- <Button key="cancel" variant="link"
- onClick={e =>
setShowDeleteConfirmation(false)}>Cancel</Button>
- ]}
- onEscapePress={e => setShowDeleteConfirmation(false)}>
- <div>{"Delete image:"}</div>
- <div>{imageName}</div>
- </Modal>)
- }
-
- const projectImage = getProjectImage();
- return (
- <PageSection className="project-tab-panel project-images-panel"
padding={{default: "padding"}}>
- <Panel>
- <PanelHeader>
- <Flex direction={{default: "row"}}
justifyContent={{default:"justifyContentFlexStart"}}>
- <FlexItem>
- <TextContent>
- <Text component={TextVariants.h6}>Images</Text>
- </TextContent>
- </FlexItem>
- <FlexItem>
-
- </FlexItem>
- </Flex>
- </PanelHeader>
- </Panel>
- <Table aria-label="Images" variant={"compact"} className={"table"}>
- <Thead>
- <Tr>
- <Th key='status' width={10}></Th>
- <Th key='image' width={20}>Image</Th>
- <Th key='tag' width={10}>Tag</Th>
- <Th key='actions' width={10}></Th>
- </Tr>
- </Thead>
- <Tbody>
- {images.map(image => {
- const index = image.lastIndexOf(":");
- const name = image.substring(0, index);
- const tag = image.substring(index+1);
- return <Tr key={image}>
- <Td modifier={"fitContent"} >
- {image === projectImage ? <SetIcon/> : <div/>}
- </Td>
- <Td>
- {name}
- </Td>
- <Td>
- {tag}
- </Td>
- <Td modifier={"fitContent"} isActionCell>
- <Flex direction={{default: "row"}}
justifyContent={{default: "justifyContentFlexEnd"}}
- spaceItems={{default: 'spaceItemsNone'}}>
- <FlexItem>
- <Tooltip content={"Delete image"}
position={"bottom"}>
- <Button variant={"plain"}
- icon={<DeleteIcon/>}
- isDisabled={image ===
projectImage}
- onClick={e => {
- setImageName(image);
-
setShowDeleteConfirmation(true);
- }}>
- </Button>
- </Tooltip>
- </FlexItem>
- <FlexItem>
- <Tooltip content="Set project image"
position={"bottom"}>
- <Button style={{padding: '0'}}
- variant={"plain"}
- isDisabled={image ===
projectImage}
- onClick={e => {
- setImageName(image);
-
setCommitMessage(commitMessage === '' ? new Date().toLocaleString() :
commitMessage);
-
setShowSetConfirmation(true);
- }}>
- <SetIcon/>
- </Button>
- </Tooltip>
- </FlexItem>
- </Flex>
- </Td>
- </Tr>
- })}
- {images.length === 0 &&
- <Tr>
- <Td colSpan={8}>
- <Bullseye>
- <EmptyState variant={EmptyStateVariant.sm}>
- <EmptyStateHeader titleText="No
results found" icon={<EmptyStateIcon icon={SearchIcon}/>} headingLevel="h2" />
- </EmptyState>
- </Bullseye>
- </Td>
- </Tr>
- }
- </Tbody>
- </Table>
- {showSetConfirmation && getSetConfirmation()}
- {showDeleteConfirmation && getDeleteConfirmation()}
- </PageSection>
- )
-}
diff --git
a/karavan-web/karavan-app/src/main/webui/src/project/build/ProjectBuildTab.tsx
b/karavan-web/karavan-app/src/main/webui/src/project/build/ProjectBuildTab.tsx
deleted file mode 100644
index 31e6b19a..00000000
---
a/karavan-web/karavan-app/src/main/webui/src/project/build/ProjectBuildTab.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React from 'react';
-import '../../designer/karavan.css';
-import {BuildPanel} from "./BuildPanel";
-import {PageSection} from "@patternfly/react-core";
-
-export function ProjectBuildTab () {
-
- return (
- <PageSection className="project-tab-panel project-build-panel"
padding={{default: "padding"}}>
- <div>
- <BuildPanel/>
- </div>
- </PageSection>
- )
-}