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 2023/07/13 16:10:09 UTC

[camel-karavan] 05/07: Run/Stop In docker #817

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 2c8849bcbc10372a8c60b25d8d82000f51161d9c
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed Jul 12 20:07:40 2023 -0400

    Run/Stop In docker #817
---
 .../apache/camel/karavan/api/DevModeResource.java  | 13 ++++++------
 .../apache/camel/karavan/api/StatusResource.java   |  2 +-
 .../camel/karavan/handler/PodEventHandler.java     | 10 ++++++---
 .../karavan/listener/DevModeCommandListener.java   |  2 +-
 .../camel/karavan/service/CamelStatusService.java  |  8 ++++----
 .../camel/karavan/service/KaravanService.java      |  2 +-
 .../src/main/resources/application.properties      |  2 +-
 .../src/main/webui/src/api/KaravanApi.tsx          |  4 +---
 .../src/main/webui/src/api/ProjectModels.ts        |  8 +++-----
 .../src/main/webui/src/api/ProjectService.ts       | 20 +++++++++---------
 .../src/main/webui/src/api/ProjectStore.ts         |  6 +++---
 .../src/main/webui/src/dashboard/DashboardPage.tsx | 16 +++++++--------
 .../src/main/webui/src/project/DevModeToolbar.tsx  |  4 ++--
 .../src/main/webui/src/project/ProjectPage.tsx     |  3 +--
 .../webui/src/project/dashboard/DashboardTab.tsx   |  9 ++++----
 .../webui/src/project/pipeline/ProjectStatus.tsx   | 24 +++++++++++-----------
 .../apache/camel/karavan/bashi/KaravanBashi.java   |  2 +-
 .../karavan/bashi/docker/DockerEventListener.java  |  3 +--
 .../camel/karavan/datagrid/DatagridService.java    |  8 ++++----
 .../camel/karavan/datagrid/DataGridTest.java       | 15 ++++++++++----
 karavan-cloud/pom.xml                              |  3 +--
 21 files changed, 83 insertions(+), 81 deletions(-)

diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
index 0984076e..3cdef756 100644
--- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
+++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
@@ -18,7 +18,7 @@ package org.apache.camel.karavan.api;
 
 import org.apache.camel.karavan.datagrid.DatagridService;
 import org.apache.camel.karavan.datagrid.model.*;
-import org.apache.camel.karavan.service.DevModeService;
+import org.apache.camel.karavan.service.CamelStatusService;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 import javax.inject.Inject;
@@ -34,7 +34,7 @@ import javax.ws.rs.core.Response;
 import java.time.Instant;
 import java.util.Optional;
 
-import static org.apache.camel.karavan.service.DevModeService.DEVMODE_SUFFIX;
+import static org.apache.camel.karavan.service.CamelStatusService.DEVMODE_SUFFIX;
 
 @Path("/api/devmode")
 public class DevModeResource {
@@ -43,7 +43,7 @@ public class DevModeResource {
     String environment;
 
     @Inject
-    DevModeService devModeService;
+    CamelStatusService camelStatusService;
 
     @Inject
     DatagridService datagridService;
@@ -74,7 +74,7 @@ public class DevModeResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/reload/{projectId}")
     public Response reload(@PathParam("projectId") String projectId) {
-        devModeService.reloadProjectCode(projectId);
+        camelStatusService.reloadProjectCode(projectId);
         DevModeStatus dms = datagridService.getDevModeStatus(projectId);
         dms.setCodeLoaded(true);
         datagridService.saveDevModeStatus(dms);
@@ -108,10 +108,9 @@ public class DevModeResource {
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    @Path("/console/{projectId}/{statusName}")
+    @Path("/status/{projectId}/{statusName}")
     public Response getCamelStatusByProjectAndEnv(@PathParam("projectId") String projectId, @PathParam("statusName") String statusName) {
-        String name = projectId + "-" + DEVMODE_SUFFIX;
-        CamelStatus status = datagridService.getCamelStatus(name, statusName, environment);
+        CamelStatus status = datagridService.getCamelStatus(projectId, environment, statusName);
         if (status != null) {
             return Response.ok(status).build();
         } else {
diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
index 2df5a937..29304c19 100644
--- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
+++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
@@ -84,6 +84,6 @@ public class StatusResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/camel/{env}")
     public List<CamelStatus> getCamelStatusByEnv(@PathParam("env") String env) {
-        return datagridService.getCamelStatusesByEnv(env, CamelStatusName.context.name());
+        return datagridService.getCamelStatusesByEnv(env, CamelStatusName.context);
     }
 }
\ No newline at end of file
diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java
index 3ae8a199..a834829b 100644
--- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java
+++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java
@@ -11,7 +11,7 @@ import org.apache.camel.karavan.service.KubernetesService;
 import org.jboss.logging.Logger;
 
 import static org.apache.camel.karavan.service.CodeService.DEFAULT_CONTAINER_RESOURCES;
-import static org.apache.camel.karavan.service.DevModeService.DEVMODE_SUFFIX;
+import static org.apache.camel.karavan.service.CamelStatusService.DEVMODE_SUFFIX;
 
 public class PodEventHandler implements ResourceEventHandler<Pod> {
 
@@ -64,6 +64,7 @@ public class PodEventHandler implements ResourceEventHandler<Pod> {
         String project = deployment != null ? deployment : pod.getMetadata().getLabels().get("karavan/projectId");
         try {
             boolean ready = pod.getStatus().getConditions().stream().anyMatch(c -> c.getType().equals("Ready"));
+            String creationTimestamp = pod.getMetadata().getCreationTimestamp();
 
             ResourceRequirements defaultRR = kubernetesService.getResourceRequirements(DEFAULT_CONTAINER_RESOURCES);
             ResourceRequirements resourceRequirements = pod.getSpec().getContainers().stream().findFirst()
@@ -81,7 +82,9 @@ public class PodEventHandler implements ResourceEventHandler<Pod> {
                     kubernetesService.environment,
                     deployment == null || pod.getMetadata().getName().endsWith(DEVMODE_SUFFIX),
                     requestMemory + " : " + limitMemory,
-                    requestCpu + " : " + limitCpu
+                    requestCpu + " : " + limitCpu,
+                    creationTimestamp
+
             );
         } catch (Exception ex) {
             LOGGER.error(ex.getMessage(), ex.getCause());
@@ -91,7 +94,8 @@ public class PodEventHandler implements ResourceEventHandler<Pod> {
                     null,
                     project,
                     kubernetesService.environment,
-                    false);
+                    false,
+                    "");
         }
     }
 }
\ No newline at end of file
diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/listener/DevModeCommandListener.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/listener/DevModeCommandListener.java
index 9a66fb71..32d83ce8 100644
--- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/listener/DevModeCommandListener.java
+++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/listener/DevModeCommandListener.java
@@ -14,7 +14,7 @@ import javax.inject.Inject;
 
 import java.util.Objects;
 
-import static org.apache.camel.karavan.service.DevModeService.DEVMODE_SUFFIX;
+import static org.apache.camel.karavan.service.CamelStatusService.DEVMODE_SUFFIX;
 
 @ApplicationScoped
 public class DevModeCommandListener {
diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelStatusService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelStatusService.java
index da50f844..a3ef1288 100644
--- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelStatusService.java
+++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelStatusService.java
@@ -37,9 +37,9 @@ import java.util.Objects;
 import java.util.concurrent.ExecutionException;
 
 @ApplicationScoped
-public class DevModeService {
+public class CamelStatusService {
 
-    private static final Logger LOGGER = Logger.getLogger(DevModeService.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(CamelStatusService.class.getName());
     public static final String CMD_COLLECT_CAMEL_STATUS = "collect-camel-status";
     public static final String CMD_DELETE_CAMEL_STATUS = "delete-camel-status";
     public static final String DEVMODE_SUFFIX = "devmode";
@@ -115,7 +115,7 @@ public class DevModeService {
     void collectDevModeStatuses() {
         System.out.println("Collect DevMode Statuses");
         if (datagridService.isReady()) {
-            datagridService.getLoadedDevModeStatuses().forEach(dms -> {
+            datagridService.getDevModeStatuses().forEach(dms -> {
                 CamelStatusRequest csr = new CamelStatusRequest(dms.getProjectId(), dms.getContainerName());
                 eventBus.publish(CMD_COLLECT_CAMEL_STATUS, JsonObject.mapFrom(csr));
             });
@@ -150,7 +150,7 @@ public class DevModeService {
     void cleanupDevModeStatuses() {
         System.out.println("Clean DevMode Statuses");
         if (datagridService.isReady()) {
-            datagridService.getLoadedDevModeStatuses().forEach(dms -> {
+            datagridService.getDevModeStatuses().forEach(dms -> {
                 PodStatus pod = datagridService.getDevModePodStatuses(dms.getProjectId(), environment);
                 if (pod == null) {
                     eventBus.publish(CMD_DELETE_CAMEL_STATUS, JsonObject.mapFrom(dms));
diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
index b0b1f359..177401a6 100644
--- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
+++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
@@ -48,7 +48,7 @@ public class KaravanService {
     void onStart(@Observes StartupEvent ev) {
         LOGGER.info("Start Karavan");
         datagridService.start();
-        datagridService.clearAllStatuses();
+//        datagridService.clearAllStatuses();
         setEnvironment();
         initialImport();
         startInformers();
diff --git a/karavan-cloud/karavan-app/src/main/resources/application.properties b/karavan-cloud/karavan-app/src/main/resources/application.properties
index c7a39319..4c7a49e6 100644
--- a/karavan-cloud/karavan-app/src/main/resources/application.properties
+++ b/karavan-cloud/karavan-app/src/main/resources/application.properties
@@ -2,7 +2,7 @@ karavan.version=3.21.1-SNAPSHOT
 karavan.environment=dev
 karavan.default-runtime=quarkus
 karavan.runtimes=quarkus,spring-boot
-karavan.camel-status-interval=2s
+karavan.camel-status-interval=10s
 karavan.devmode-status-interval=2s
 quarkus.scheduler.enabled=true
 
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/api/KaravanApi.tsx b/karavan-cloud/karavan-app/src/main/webui/src/api/KaravanApi.tsx
index efb86595..f1549a3a 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/api/KaravanApi.tsx
+++ b/karavan-cloud/karavan-app/src/main/webui/src/api/KaravanApi.tsx
@@ -306,7 +306,6 @@ export class KaravanApi {
     static async getDevModePodStatus(projectId: string, after: (res: AxiosResponse<PodStatus>) => void) {
         instance.get('/api/devmode/pod/' + projectId)
             .then(res => {
-                console.log(res);
                 after(res);
             }).catch(err => {
             after(err);
@@ -322,10 +321,9 @@ export class KaravanApi {
         });
     }
 
-    static async getDevModeStatus(projectId: string, statusName: string, after: (res: AxiosResponse<string>) => void) {
+    static async getDevModeStatus(projectId: string, statusName: string, after: (res: AxiosResponse<CamelStatus>) => void) {
         instance.get('/api/devmode/status/' + projectId + "/" + statusName)
             .then(res => {
-                console.log(res);
                 after(res);
             }).catch(err => {
             after(err);
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectModels.ts b/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectModels.ts
index d743bef0..66ebe79b 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectModels.ts
+++ b/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectModels.ts
@@ -75,11 +75,9 @@ export class PodStatus {
 
 export class CamelStatus {
     projectId: string = '';
-    registryStatus: string = '';
-    routesStatus: string = '';
-    consumerStatus: string = '';
-    contextStatus: string = '';
-    contextVersion: string = '';
+    containerName: string = '';
+    name: string = '';
+    status: string = '';
     env: string = '';
 }
 
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectService.ts b/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectService.ts
index c358ca52..d3a60eb2 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectService.ts
+++ b/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectService.ts
@@ -9,14 +9,14 @@ import {
     useFilesStore,
     useFileStore, useLogStore,
     useProjectsStore,
-    useProjectStore, useRunnerStore
+    useProjectStore, useDevModeStore
 } from "./ProjectStore";
 import {ProjectEventBus} from "./ProjectEventBus";
 
 export class ProjectService {
 
     public static startRunner(project: Project, verbose: boolean) {
-        useRunnerStore.setState({status: "starting"})
+        useDevModeStore.setState({status: "starting"})
         KaravanApi.runProject(project, verbose, res => {
             if (res.status === 200 || res.status === 201) {
                 ProjectEventBus.sendLog("set", '');
@@ -28,7 +28,7 @@ export class ProjectService {
     }
 
     public static reloadRunner(project: Project) {
-        useRunnerStore.setState({status: "reloading"})
+        useDevModeStore.setState({status: "reloading"})
         KaravanApi.reloadDevMode(project.projectId, res => {
             if (res.status === 200 || res.status === 201) {
                 // setIsReloadingPod(false);
@@ -40,7 +40,7 @@ export class ProjectService {
     }
 
     public static deleteRunner(project: Project) {
-        useRunnerStore.setState({status: "deleting"})
+        useDevModeStore.setState({status: "deleting"})
         ProjectEventBus.sendLog("set", '');
         KaravanApi.deleteRunner(project.projectId, false, res => {
             if (res.status === 202) {
@@ -57,19 +57,19 @@ export class ProjectService {
             if (res.status === 200) {
                 unstable_batchedUpdates(() => {
                     const podStatus = res.data;
-                    if (useRunnerStore.getState().podName !== podStatus.name){
-                        useRunnerStore.setState({podName: podStatus.name})
+                    if (useDevModeStore.getState().podName !== podStatus.name){
+                        useDevModeStore.setState({podName: podStatus.name})
                     }
-                    if (useRunnerStore.getState().status !== "running"){
-                        useRunnerStore.setState({status: "running"})
+                    if (useDevModeStore.getState().status !== "running"){
+                        useDevModeStore.setState({status: "running"})
                         useLogStore.setState({isRunning: true})
                     }
                     useProjectStore.setState({podStatus: res.data});
                 })
             } else {
                 unstable_batchedUpdates(() => {
-                    if (useRunnerStore.getState().status !== 'none') {
-                        useRunnerStore.setState({status: "none", podName: undefined})
+                    if (useDevModeStore.getState().status !== 'none') {
+                        useDevModeStore.setState({status: "none", podName: undefined})
                         useProjectStore.setState({podStatus: new PodStatus()});
                     }
                 })
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectStore.ts b/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectStore.ts
index 9298e283..d04fa3c2 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectStore.ts
+++ b/karavan-cloud/karavan-app/src/main/webui/src/api/ProjectStore.ts
@@ -151,17 +151,17 @@ export const useDeploymentStatusesStore = create<DeploymentStatusesState>((set)
 }))
 
 
-interface RunnerState {
+interface DevModeState {
     podName?: string,
     status: "none" | "starting" | "deleting"| "reloading" | "running",
     setStatus: (status: "none" | "starting" | "deleting"| "reloading" | "running") => void,
 }
 
-export const useRunnerStore = create<RunnerState>((set) => ({
+export const useDevModeStore = create<DevModeState>((set) => ({
     podName: undefined,
     status: "none",
     setStatus: (status: "none" | "starting" | "deleting"| "reloading" | "running") =>  {
-        set((state: RunnerState) => ({
+        set((state: DevModeState) => ({
             status: status,
         }));
     },
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx b/karavan-cloud/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
index 8bc9be07..448c865e 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
+++ b/karavan-cloud/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
@@ -323,15 +323,15 @@ export class DashboardPage extends React.Component<Props, State> {
                                     <Td modifier={"fitContent"}>
                                         <Flex direction={{default: "column"}}>
                                             {this.getCamelStatusByEnvironments(deployment).map(value => {
-                                                const color = value[1] ? (value[1].consumerStatus === "UP" ? "green" : "red") : "grey";
-                                                let icon = undefined;
-                                                if (value[1]?.consumerStatus === "UP") icon = <UpIcon/>
-                                                if (value[1]?.consumerStatus === "DOWN") icon = <DownIcon/>
-                                                const text = value[1] && value[1]?.contextVersion ? value[1]?.contextVersion : "???";
+                                                // const color = value[1] ? (value[1].consumerStatus === "UP" ? "green" : "red") : "grey";
+                                                // let icon = undefined;
+                                                // if (value[1]?.consumerStatus === "UP") icon = <UpIcon/>
+                                                // if (value[1]?.consumerStatus === "DOWN") icon = <DownIcon/>
+                                                // const text = value[1] && value[1]?.contextVersion ? value[1]?.contextVersion : "???";
                                                 return <FlexItem key={value[0]}>
-                                                    <LabelGroup numLabels={4} className="camel-label-group">
-                                                        <Label color={color} className="table-label" icon={icon}>{text}</Label>
-                                                    </LabelGroup>
+                                                    {/*<LabelGroup numLabels={4} className="camel-label-group">*/}
+                                                    {/*    <Label color={color} className="table-label" icon={icon}>{text}</Label>*/}
+                                                    {/*</LabelGroup>*/}
                                                 </FlexItem>
                                             })}
                                         </Flex>
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx b/karavan-cloud/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
index fc099b50..ee9e2c8b 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
+++ b/karavan-cloud/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
@@ -8,7 +8,7 @@ import '../designer/karavan.css';
 import RocketIcon from "@patternfly/react-icons/dist/esm/icons/rocket-icon";
 import ReloadIcon from "@patternfly/react-icons/dist/esm/icons/bolt-icon";
 import DeleteIcon from "@patternfly/react-icons/dist/esm/icons/times-circle-icon";
-import {useProjectStore, useRunnerStore} from "../api/ProjectStore";
+import {useProjectStore, useDevModeStore} from "../api/ProjectStore";
 import {ProjectService} from "../api/ProjectService";
 import {shallow} from "zustand/shallow";
 
@@ -19,7 +19,7 @@ interface Props {
 
 export const DevModeToolbar = (props: Props) => {
 
-    const [status] = useRunnerStore((state) => [state.status], shallow)
+    const [status] = useDevModeStore((state) => [state.status], shallow)
     const [project] = useProjectStore((state) => [state.project], shallow)
     const [verbose, setVerbose] = useState(false);
 
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/project/ProjectPage.tsx b/karavan-cloud/karavan-app/src/main/webui/src/project/ProjectPage.tsx
index 6ad2bdd9..53febea5 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/project/ProjectPage.tsx
+++ b/karavan-cloud/karavan-app/src/main/webui/src/project/ProjectPage.tsx
@@ -18,7 +18,6 @@ import {shallow} from "zustand/shallow";
 
 export const ProjectPage = () => {
 
-    const [isUploadModalOpen, setIsUploadModalOpen] = useState<boolean>(false);
     const {file, operation} = useFileStore();
     const [mode, setMode] = useState<"design" | "code">("design");
     const [key, setKey] = useState<string>('');
@@ -28,7 +27,7 @@ export const ProjectPage = () => {
         // TODO: make status request only when started or just opened
         const interval = setInterval(() => {
             ProjectService.getDevModePodStatus(project);
-        }, 2000);
+        }, 1000);
         return () => {
             clearInterval(interval)
         };
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx b/karavan-cloud/karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx
index a2b90e28..0c065908 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx
+++ b/karavan-cloud/karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx
@@ -40,28 +40,27 @@ export const DashboardTab = () => {
         return () => {
             clearInterval(interval)
         };
-
-    }, [podStatus]);
+    }, []);
 
     function onRefreshStatus() {
         const projectId = project.projectId;
         KaravanApi.getDevModeStatus(projectId, "memory", res => {
             if (res.status === 200) {
-                setMemory(res.data);
+                setMemory(JSON.parse(res.data.status));
             } else {
                 setMemory({});
             }
         })
         KaravanApi.getDevModeStatus(projectId, "jvm", res => {
             if (res.status === 200) {
-                setJvm(res.data);
+                setJvm(JSON.parse(res.data.status));
             } else {
                 setJvm({});
             }
         })
         KaravanApi.getDevModeStatus(projectId, "context", res => {
             if (res.status === 200) {
-                setContext(res.data);
+                setContext(JSON.parse(res.data.status));
             } else {
                 setContext({});
             }
diff --git a/karavan-cloud/karavan-app/src/main/webui/src/project/pipeline/ProjectStatus.tsx b/karavan-cloud/karavan-app/src/main/webui/src/project/pipeline/ProjectStatus.tsx
index 25ac03f9..29e2b8a4 100644
--- a/karavan-cloud/karavan-app/src/main/webui/src/project/pipeline/ProjectStatus.tsx
+++ b/karavan-cloud/karavan-app/src/main/webui/src/project/pipeline/ProjectStatus.tsx
@@ -248,20 +248,20 @@ export class ProjectStatus extends React.Component<Props, State> {
 
     getHealthPanel(env: string) {
         const status = this.state.camelStatus;
-        const routesStatus = status?.routesStatus;
-        const consumersStatus = status?.consumerStatus;
-        const contextStatus = status?.contextStatus;
-        const contextVersion = status?.contextVersion;
+        // const routesStatus = status?.routesStatus;
+        // const consumersStatus = status?.consumerStatus;
+        // const contextStatus = status?.contextStatus;
+        // const contextVersion = status?.contextVersion;
         return (
             <LabelGroup numLabels={4}>
-                {contextVersion &&
-                    <Label icon={this.getStatusIcon(contextStatus)}
-                           color={this.getStatusColor(contextStatus)}>{contextVersion}</Label>}
-                <Label icon={this.getStatusIcon(contextStatus)}
-                       color={this.getStatusColor(contextStatus)}>Context</Label>
-                <Label icon={this.getStatusIcon(consumersStatus)}
-                       color={this.getStatusColor(consumersStatus)}>Consumers</Label>
-                <Label icon={this.getStatusIcon(routesStatus)} color={this.getStatusColor(routesStatus)}>Routes</Label>
+                {/*{contextVersion &&*/}
+                {/*    <Label icon={this.getStatusIcon(contextStatus)}*/}
+                {/*           color={this.getStatusColor(contextStatus)}>{contextVersion}</Label>}*/}
+                {/*<Label icon={this.getStatusIcon(contextStatus)}*/}
+                {/*       color={this.getStatusColor(contextStatus)}>Context</Label>*/}
+                {/*<Label icon={this.getStatusIcon(consumersStatus)}*/}
+                {/*       color={this.getStatusColor(consumersStatus)}>Consumers</Label>*/}
+                {/*<Label icon={this.getStatusIcon(routesStatus)} color={this.getStatusColor(routesStatus)}>Routes</Label>*/}
             </LabelGroup>
         )
     }
diff --git a/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/KaravanBashi.java b/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/KaravanBashi.java
index f0a8a630..98c3f40d 100644
--- a/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/KaravanBashi.java
+++ b/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/KaravanBashi.java
@@ -21,7 +21,7 @@ public class KaravanBashi {
 
     private static final Logger LOGGER = Logger.getLogger(KaravanBashi.class.getName());
 
-    void onStart(@Observes StartupEvent ev) throws InterruptedException {
+    void onStart(@Observes StartupEvent ev) {
         LOGGER.info("Karavan Bashi is starting...");
         dockerService.createNetwork();
         dockerService.checkDataGridHealth();
diff --git a/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/docker/DockerEventListener.java b/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/docker/DockerEventListener.java
index be068895..db7b8358 100644
--- a/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/docker/DockerEventListener.java
+++ b/karavan-cloud/karavan-bashi/src/main/java/org/apache/camel/karavan/bashi/docker/DockerEventListener.java
@@ -57,13 +57,12 @@ public class DockerEventListener implements ResultCallback<Event> {
                     if (Arrays.asList("stop", "die", "kill", "pause", "destroy").contains(event.getStatus())) {
                         String name = container.getNames()[0].replace("/", "");
                         String projectId = name.replace("-" + Constants.DEVMODE_SUFFIX, "");
-                        LOGGER.info("Deleted PodStatus for " + projectId);
                         datagridService.deletePodStatus(projectId, environment, name);
+                        datagridService.deleteCamelStatuses(projectId, environment);
                     } else if (Arrays.asList("start", "unpause").contains(event.getStatus())) {
                         String name = container.getNames()[0].replace("/", "");
                         String projectId = name.replace("-" + Constants.DEVMODE_SUFFIX, "");
                         PodStatus ps = new PodStatus(name, true, null, projectId, environment, true, Instant.ofEpochSecond(container.getCreated()).toString());
-                        LOGGER.info("Saved PodStatus for " + projectId);
                         datagridService.savePodStatus(ps);
                     }
                 }
diff --git a/karavan-cloud/karavan-datagrid/src/main/java/org/apache/camel/karavan/datagrid/DatagridService.java b/karavan-cloud/karavan-datagrid/src/main/java/org/apache/camel/karavan/datagrid/DatagridService.java
index 6141addd..5535211c 100644
--- a/karavan-cloud/karavan-datagrid/src/main/java/org/apache/camel/karavan/datagrid/DatagridService.java
+++ b/karavan-cloud/karavan-datagrid/src/main/java/org/apache/camel/karavan/datagrid/DatagridService.java
@@ -309,7 +309,7 @@ public class DatagridService  {
         return camelStatuses.get(key);
     }
 
-    public List<CamelStatus> getCamelStatusesByEnv(String env, String name) {
+    public List<CamelStatus> getCamelStatusesByEnv(String env, CamelStatusName name) {
         QueryFactory queryFactory = Search.getQueryFactory(camelStatuses);
         return queryFactory.<CamelStatus>create("FROM karavan.CamelStatus WHERE env = :env AND name = :name")
                 .setParameter("env", env)
@@ -317,11 +317,11 @@ public class DatagridService  {
                 .execute().list();
     }
 
-    public List<CamelStatus> getCamelStatusesByProjectIdEnv(String projectId, String name) {
+    public List<CamelStatus> getCamelStatusesByProjectIdEnv(String projectId, String env) {
         QueryFactory queryFactory = Search.getQueryFactory(camelStatuses);
-        return queryFactory.<CamelStatus>create("FROM karavan.CamelStatus WHERE projectId = :projectId AND name = :name")
+        return queryFactory.<CamelStatus>create("FROM karavan.CamelStatus WHERE projectId = :projectId AND name = :env")
                 .setParameter("projectId", projectId)
-                .setParameter("name", name)
+                .setParameter("env", env)
                 .execute().list();
     }
 
diff --git a/karavan-cloud/karavan-datagrid/src/test/java/org/apache/camel/karavan/datagrid/DataGridTest.java b/karavan-cloud/karavan-datagrid/src/test/java/org/apache/camel/karavan/datagrid/DataGridTest.java
index 37c272e4..5e4fb8c0 100644
--- a/karavan-cloud/karavan-datagrid/src/test/java/org/apache/camel/karavan/datagrid/DataGridTest.java
+++ b/karavan-cloud/karavan-datagrid/src/test/java/org/apache/camel/karavan/datagrid/DataGridTest.java
@@ -4,9 +4,7 @@ package org.apache.camel.karavan.datagrid;
 import io.quarkus.test.junit.QuarkusTest;
 import io.quarkus.vertx.ConsumeEvent;
 import io.vertx.core.json.JsonObject;
-import org.apache.camel.karavan.datagrid.model.CommandName;
-import org.apache.camel.karavan.datagrid.model.DevModeCommand;
-import org.apache.camel.karavan.datagrid.model.ProjectFile;
+import org.apache.camel.karavan.datagrid.model.*;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
@@ -59,8 +57,17 @@ public class DataGridTest {
     }
 
     @Test
-    public void getProjectFiles() throws InterruptedException {
+    public void testProjectFiles() throws InterruptedException {
         List<ProjectFile> files = datagridService.getProjectFiles("xxx");
         assertEquals(0, files.size());
     }
+
+    @Test
+    public void testCamelStatuses() throws InterruptedException {
+        CamelStatus cs = new CamelStatus("test1", "container1", CamelStatusName.context, "", "dev");
+        datagridService.saveCamelStatus(cs);
+        List<CamelStatus> list = datagridService.getCamelStatusesByEnv("dev", CamelStatusName.context);
+        System.out.println(list);
+        assertEquals(1, list.size());
+    }
 }
diff --git a/karavan-cloud/pom.xml b/karavan-cloud/pom.xml
index 1862fa72..c54f9c61 100644
--- a/karavan-cloud/pom.xml
+++ b/karavan-cloud/pom.xml
@@ -19,12 +19,11 @@
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
         <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
-        <quarkus.platform.version>2.16.7.Final</quarkus.platform.version>
+        <quarkus.platform.version>2.16.8.Final</quarkus.platform.version>
         <camel-quarkus.version>2.16.0</camel-quarkus.version>
         <camel.version>3.21.0</camel.version>
         <camel-kamelet.version>3.21.0</camel-kamelet.version>
         <surefire-plugin.version>3.1.0</surefire-plugin.version>
-        <infinispan.version>14.0.9.Final</infinispan.version>
         <tekton.version>6.3.1</tekton.version>
         <jgit.version>2.3.2</jgit.version>
         <quinoa.version>1.2.4</quinoa.version>