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 <marat.gubaidul...@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>