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/27 22:22:46 UTC

[camel-karavan] 01/03: projects fix for #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 6d30dbabef13e9f27a9ff43241247088970c9bb7
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed Jul 26 16:58:30 2023 -0400

    projects fix for #817
---
 .../org/apache/camel/karavan/docker/DockerService.java    | 11 +++++++++++
 .../org/apache/camel/karavan/service/KaravanService.java  | 13 +++++++++----
 .../org/apache/camel/karavan/service/ProjectService.java  |  8 ++++----
 .../src/main/webui/src/project/DevModeToolbar.tsx         |  9 +++++----
 .../src/main/webui/src/projects/ProjectsPage.tsx          | 15 +++++++++------
 5 files changed, 38 insertions(+), 18 deletions(-)

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 b7a6fa5e..af1d67f6 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
@@ -89,6 +89,17 @@ public class DockerService {
 
     private DockerClient dockerClient;
 
+    public boolean checkDocker() {
+        try {
+            getDockerClient().pingCmd().exec();
+            LOGGER.info("Docker is available");
+            return true;
+        } catch (Exception e) {
+            LOGGER.error("Error connecting Docker: " + e.getMessage());
+            return false;
+        }
+    }
+
     public void runDevmodeContainer(Project project, String jBangOptions) throws InterruptedException {
         String projectId = project.getProjectId();
         LOGGER.infof("DevMode starting for %s with JBANG_OPTIONS=%s", projectId, jBangOptions);
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 2f5aa7ad..ee801b94 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
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.karavan.service;
 
+import io.quarkus.runtime.Quarkus;
 import io.quarkus.runtime.ShutdownEvent;
 import io.quarkus.runtime.StartupEvent;
 import io.vertx.core.eventbus.EventBus;
@@ -52,10 +53,14 @@ public class KaravanService {
                 LOGGER.info("Starting Karavan Headless in Docker");
             } else {
                 LOGGER.info("Starting Karavan with Docker");
-                dockerService.createNetwork();
-                dockerService.startListeners();
-                dockerService.startInfinispan();
-                dockerService.checkInfinispanHealth();
+                if (!dockerService.checkDocker()){
+                    Quarkus.asyncExit();
+                } else {
+                    dockerService.createNetwork();
+                    dockerService.startListeners();
+                    dockerService.startInfinispan();
+                    dockerService.checkInfinispanHealth();
+                }
             }
         } else {
             LOGGER.info("Starting Karavan in " + (kubernetesService.isOpenshift() ? "OpenShift" : "Kubernetes"));
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 815eab38..7c05cea0 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
@@ -229,10 +229,10 @@ public class ProjectService implements HealthCheck{
     void addServicesProject() {
         LOGGER.info("Add services project if not exists");
         try {
-            Project templates  = infinispanService.getProject(Project.Type.services.name());
-            if (templates == null) {
-                templates = new Project(Project.Type.services.name(), "Services", "Development Services", "", "", Instant.now().toEpochMilli(), Project.Type.services);
-                infinispanService.saveProject(templates);
+            Project services  = infinispanService.getProject(Project.Type.services.name());
+            if (services == null) {
+                services = new Project(Project.Type.services.name(), "Services", "Development Services", "", "", Instant.now().toEpochMilli(), Project.Type.services);
+                infinispanService.saveProject(services);
 
                 codeService.getServices().forEach((name, value) -> {
                     ProjectFile file = new ProjectFile(name, value, Project.Type.services.name(), Instant.now().toEpochMilli());
diff --git a/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx b/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
index 58dae7ea..9777019b 100644
--- a/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
@@ -4,6 +4,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/trash-icon";
+import PauseIcon from "@patternfly/react-icons/dist/esm/icons/pause-icon";
 import {useDevModeStore, useLogStore, useProjectStore} from "../api/ProjectStore";
 import {ProjectService} from "../api/ProjectService";
 import {shallow} from "zustand/shallow";
@@ -74,7 +75,7 @@ export const DevModeToolbar = (props: Props) => {
                 </Button>
             </Tooltip>
         </FlexItem>}
-        {<FlexItem>
+        <FlexItem>
             <Tooltip content="Stop container" position={TooltipPosition.bottom}>
                 <Button isSmall
                         isDisabled={!commands.includes('stop') || inTransit}
@@ -83,8 +84,8 @@ export const DevModeToolbar = (props: Props) => {
                         onClick={() => ProjectService.stopDevModeContainer(project)}>
                 </Button>
             </Tooltip>
-        </FlexItem>}
-        {<FlexItem>
+        </FlexItem>
+        <FlexItem>
             <Tooltip content="Delete container" position={TooltipPosition.bottom}>
                 <Button isSmall
                         isDisabled={!commands.includes('delete') || inTransit}
@@ -93,6 +94,6 @@ export const DevModeToolbar = (props: Props) => {
                         onClick={() => ProjectService.deleteDevModeContainer(project)}>
                 </Button>
             </Tooltip>
-        </FlexItem>}
+        </FlexItem>
     </Flex>);
 }
diff --git a/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx b/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx
index dd03c5dc..9b8c0d74 100644
--- a/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx
@@ -40,9 +40,7 @@ export const ProjectsPage = () => {
         const interval = setInterval(() => {
             if (projects.length === 0) setLoading(true);
             if (!["create", "delete", "select", "copy"].includes(operation)) {
-                ProjectService.refreshProjects();
-                ProjectService.refreshAllDeploymentStatuses();
-                ProjectService.refreshAllContainerStatuses();
+                refresh();
             }
         }, 1300);
         return () => {
@@ -50,14 +48,19 @@ export const ProjectsPage = () => {
         };
     }, [operation]);
 
+    function refresh() {
+        ProjectService.refreshProjects();
+        ProjectService.refreshAllDeploymentStatuses();
+        ProjectService.refreshAllContainerStatuses();
+        setLoading(false);
+    }
     function getTools() {
         return <Toolbar id="toolbar-group-types">
             <ToolbarContent>
                 <ToolbarItem>
                     <Button variant="link" icon={<RefreshIcon/>} onClick={e => {
-                        ProjectService.refreshProjects();
-                        ProjectService.refreshAllDeploymentStatuses();
-                        ProjectService.refreshAllContainerStatuses();
+                        setLoading(true);
+                        refresh();
                     }}/>
                 </ToolbarItem>
                 <ToolbarItem>