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 e507cb5ac45563d3eace11b98aebc27aa8166af0 Author: Marat Gubaidullin <marat.gubaidul...@gmail.com> AuthorDate: Mon Jul 17 19:57:07 2023 -0400 Run/Reload/Stop in Docker #817 --- .../apache/camel/karavan/api/DevModeResource.java | 6 +- .../apache/camel/karavan/api/ProjectResource.java | 22 ++++--- .../camel/karavan/docker/DockerEventListener.java | 23 ++++++- .../apache/camel/karavan/docker/DockerService.java | 37 +++++++---- .../karavan/infinispan/InfinispanService.java | 2 +- .../camel/karavan/infinispan/model/PodStatus.java | 32 ++++++++-- .../camel/karavan/kubernetes/PodEventHandler.java | 3 +- .../apache/camel/karavan/service/CamelService.java | 73 +++++++++++++--------- .../apache/camel/karavan/service/EventService.java | 6 +- .../apache/camel/karavan/service/GitService.java | 18 +++--- .../camel/karavan/service/ScheduledService.java | 22 +++---- .../org/apache/camel/karavan/shared/EventType.java | 9 +-- .../src/main/resources/application.properties | 19 +++--- 13 files changed, 169 insertions(+), 103 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 f703d5cf..3a00a428 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 @@ -58,7 +58,7 @@ public class DevModeResource { @Consumes(MediaType.APPLICATION_JSON) @Path("/{jBangOptions}") public Response runProjectWithJBangOptions(Project project, @PathParam("jBangOptions") String jBangOptions) throws InterruptedException { - String runnerName = project.getProjectId() + "-" + DEVMODE_SUFFIX; + String runnerName = project.getProjectId() + DEVMODE_SUFFIX; PodStatus status = infinispanService.getDevModePodStatuses(runnerName, environment); if (status == null) { infinispanService.saveDevModeStatus(new DevModeStatus(project.getProjectId(), null, null, false)); @@ -92,7 +92,7 @@ public class DevModeResource { @Consumes(MediaType.APPLICATION_JSON) @Path("/{projectId}/{deletePVC}") public Response deleteRunner(@PathParam("projectId") String projectId, @PathParam("deletePVC") boolean deletePVC) { - String runnerName = projectId + "-" + DEVMODE_SUFFIX; + String runnerName = projectId + DEVMODE_SUFFIX; if (ConfigService.inKubernetes()) { kubernetesService.deleteRunner(runnerName, deletePVC); } else { @@ -107,7 +107,7 @@ public class DevModeResource { @Produces(MediaType.APPLICATION_JSON) @Path("/pod/{projectId}") public Response getPodStatus(@PathParam("projectId") String projectId) throws RuntimeException { - String runnerName = projectId + "-" + DEVMODE_SUFFIX; + String runnerName = projectId + DEVMODE_SUFFIX; Optional<PodStatus> ps = infinispanService.getPodStatuses(projectId, environment).stream() .filter(podStatus -> podStatus.getName().equals(runnerName)) .findFirst(); diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java index 343aeedb..8550441f 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java @@ -53,15 +53,19 @@ public class ProjectResource { @GET @Produces(MediaType.APPLICATION_JSON) public List<Project> getAll() throws Exception { - return infinispanService.getProjects().stream() - .sorted((p1, p2) -> { - if (p1.getProjectId().equalsIgnoreCase(Project.NAME_TEMPLATES)) return 1; - if (p2.getProjectId().equalsIgnoreCase(Project.NAME_TEMPLATES)) return 1; - if (p1.getProjectId().equalsIgnoreCase(Project.NAME_KAMELETS)) return 1; - if (p2.getProjectId().equalsIgnoreCase(Project.NAME_KAMELETS)) return 1; - return (p1.getProjectId().compareTo(p2.getProjectId())); - }) - .collect(Collectors.toList()); + if (infinispanService.isReady()) { + return infinispanService.getProjects().stream() + .sorted((p1, p2) -> { + if (p1.getProjectId().equalsIgnoreCase(Project.NAME_TEMPLATES)) return 1; + if (p2.getProjectId().equalsIgnoreCase(Project.NAME_TEMPLATES)) return 1; + if (p1.getProjectId().equalsIgnoreCase(Project.NAME_KAMELETS)) return 1; + if (p2.getProjectId().equalsIgnoreCase(Project.NAME_KAMELETS)) return 1; + return (p1.getProjectId().compareTo(p2.getProjectId())); + }) + .collect(Collectors.toList()); + } else { + return List.of(); + } } @GET diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java index cda60bf5..9db99b4c 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerEventListener.java @@ -6,6 +6,7 @@ import com.github.dockerjava.api.model.ContainerPort; import com.github.dockerjava.api.model.Event; import com.github.dockerjava.api.model.EventType; import io.vertx.core.eventbus.EventBus; +import io.vertx.core.json.JsonObject; import org.apache.camel.karavan.infinispan.InfinispanService; import org.apache.camel.karavan.infinispan.model.ContainerInfo; import org.apache.camel.karavan.infinispan.model.DevModeStatus; @@ -23,6 +24,7 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import static org.apache.camel.karavan.shared.EventType.DEVMODE_STATUS; import static org.apache.camel.karavan.shared.EventType.INFINISPAN_STARTED; import static org.apache.camel.karavan.shared.ConfigService.DEVMODE_SUFFIX; @@ -96,9 +98,7 @@ public class DockerEventListener implements ResultCallback<Event> { infinispanService.deletePodStatus(projectId, environment, name); infinispanService.deleteCamelStatuses(projectId, environment); } else if (Arrays.asList("start", "unpause").contains(event.getStatus())) { - String projectId = name.replace(DEVMODE_SUFFIX, ""); - PodStatus ps = new PodStatus(name, true, null, projectId, environment, true, Instant.ofEpochSecond(container.getCreated()).toString()); - infinispanService.savePodStatus(ps); + savePodStatus(container); } else if (status.startsWith("health_status:")) { String health = status.replace("health_status: ", ""); LOGGER.infof("Container %s health status: %s", container.getNames()[0], health); @@ -109,6 +109,7 @@ public class DockerEventListener implements ResultCallback<Event> { dms.setContainerName(containerName); dms.setContainerId(container.getId()); infinispanService.saveDevModeStatus(dms); + eventBus.publish(DEVMODE_STATUS, JsonObject.mapFrom(dms)); } } } @@ -117,6 +118,22 @@ public class DockerEventListener implements ResultCallback<Event> { } } + protected void savePodStatus(Container container){ + String name = container.getNames()[0].replace("/", ""); + boolean inDevMode = name.endsWith(DEVMODE_SUFFIX); + String projectId = name.replace(DEVMODE_SUFFIX, ""); + Integer exposedPort = (container.getPorts().length > 0) ? container.getPorts()[0].getPublicPort() : null; + if (infinispanService.isReady()) { + PodStatus ps = infinispanService.getDevModePodStatuses(projectId, environment); + if (ps == null) { + ps = new PodStatus(name, true, null, projectId, environment, inDevMode, Instant.ofEpochSecond(container.getCreated()).toString(), exposedPort); + } else { + ps.setExposedPort(exposedPort); + } + infinispanService.savePodStatus(ps); + } + } + @Override public void onError(Throwable throwable) { LOGGER.error(throwable.getMessage()); diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java index 8b36c505..3fe2b106 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java @@ -12,10 +12,11 @@ import com.github.dockerjava.core.DockerClientImpl; import com.github.dockerjava.core.InvocationBuilder; import com.github.dockerjava.httpclient5.ApacheDockerHttpClient; import com.github.dockerjava.transport.DockerHttpClient; -import io.quarkus.scheduler.Scheduled; import io.smallrye.mutiny.tuples.Tuple2; import io.vertx.core.eventbus.EventBus; import io.vertx.core.json.JsonObject; +import org.apache.camel.karavan.infinispan.InfinispanService; +import org.apache.camel.karavan.infinispan.model.PodStatus; import org.apache.camel.karavan.infinispan.model.Project; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.jboss.logging.Logger; @@ -24,13 +25,13 @@ import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import java.io.IOException; import java.text.DecimalFormat; +import java.time.Instant; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import static org.apache.camel.karavan.shared.EventType.CONTAINER_STATS; -import static org.apache.camel.karavan.shared.EventType.INFINISPAN_HEALTH; import static org.apache.camel.karavan.shared.ConfigService.DEVMODE_SUFFIX; +import static org.apache.camel.karavan.shared.EventType.*; @ApplicationScoped public class DockerService { @@ -67,7 +68,7 @@ public class DockerService { HealthCheck healthCheck = new HealthCheck().withTest(List.of("CMD", "curl", "-f", "http://localhost:8080/q/dev/health")) .withInterval(10000000000L).withTimeout(10000000000L).withStartPeriod(10000000000L).withRetries(30); createContainer(runnerName, runnerImage, - List.of(), "", false, healthCheck, + List.of(), "8080:8080", true,true, healthCheck, Map.of("type", "devmode", "projectId", projectId)); startContainer(runnerName); LOGGER.infof("DevMode started for %s", projectId); @@ -84,7 +85,7 @@ public class DockerService { createContainer(INFINISPAN_CONTAINER_NAME, infinispanImage, List.of("USER=" + infinispanUsername, "PASS=" + infinispanPassword), - infinispanPort, true, healthCheck, Map.of() + infinispanPort, false, true, healthCheck, Map.of() ); startContainer(INFINISPAN_CONTAINER_NAME); LOGGER.info("Infinispan is started"); @@ -110,6 +111,15 @@ public class DockerService { }); } + public void collectContainersStatuses() { + getDockerClient().listContainersCmd().exec().forEach(container -> { + String name = container.getNames()[0].replace("/", ""); + if (!Objects.equals(name, INFINISPAN_CONTAINER_NAME)) { + dockerEventListener.savePodStatus(container); + } + }); + } + public void startListeners() { getDockerClient().eventsCmd().exec(dockerEventListener); } @@ -139,7 +149,7 @@ public class DockerService { .forEach(c -> { HealthState hs = getDockerClient().inspectContainerCmd(c.getId()).exec().getState().getHealth(); if (c.getNames()[0].equals("/" + INFINISPAN_CONTAINER_NAME)) { - eventBus.publish(INFINISPAN_HEALTH, hs.getStatus()); + eventBus.publish(INFINISPAN_STARTED, hs.getStatus()); } }); } @@ -167,7 +177,7 @@ public class DockerService { return stats; } - public Container createContainer(String name, String image, List<String> env, String ports, + public Container createContainer(String name, String image, List<String> env, String ports, boolean inRange, boolean exposedPort, HealthCheck healthCheck, Map<String, String> labels) throws InterruptedException { List<Container> containers = getDockerClient().listContainersCmd().withShowAll(true).withNameFilter(List.of(name)).exec(); if (containers.size() == 0) { @@ -181,7 +191,7 @@ public class DockerService { .withEnv(env) .withExposedPorts(exposedPorts) .withHostName(name) - .withHostConfig(getHostConfig(ports, exposedPort)) + .withHostConfig(getHostConfig(ports, exposedPort, inRange)) .withHealthcheck(healthCheck) .exec(); LOGGER.info("Container created: " + response.getId()); @@ -254,13 +264,14 @@ public class DockerService { } } - private HostConfig getHostConfig(String ports, boolean exposedPort) { + private HostConfig getHostConfig(String ports, boolean exposedPort, boolean inRange) { Ports portBindings = new Ports(); + getPortsFromString(ports).forEach((hostPort, containerPort) -> { - portBindings.bind( - ExposedPort.tcp(containerPort), - exposedPort ? Ports.Binding.bindIp("0.0.0.0").bindPort(hostPort) : Ports.Binding.bindPort(hostPort) - ); + Ports.Binding binding = exposedPort + ? (inRange ? Ports.Binding.bindPortRange(hostPort, hostPort + 1000) : Ports.Binding.bindPort(hostPort)) + : Ports.Binding.bindPort(hostPort); + portBindings.bind(ExposedPort.tcp(containerPort), binding); }); return new HostConfig() .withPortBindings(portBindings) diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java index 24879223..fb200e3c 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java @@ -130,7 +130,7 @@ public class InfinispanService { public void saveProject(Project project) { GroupedKey key = GroupedKey.create(project.getProjectId(), DEFAULT_ENVIRONMENT, project.getProjectId()); - boolean isNew = !projects.containsKey(key); + projects.put(key, project); projects.put(key, project); } diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/PodStatus.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/PodStatus.java index f7aaa40e..47b5e0ff 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/PodStatus.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/PodStatus.java @@ -16,15 +16,30 @@ public class PodStatus { @ProtoField(number = 5) String env; @ProtoField(number = 6) - Boolean inDevMode; + Integer exposedPort; @ProtoField(number = 7) - String memoryInfo; + Boolean inDevMode; @ProtoField(number = 8) - String cpuInfo; + String memoryInfo; @ProtoField(number = 9) + String cpuInfo; + @ProtoField(number = 10) String created; @ProtoFactory + public PodStatus(String name, Boolean ready, String deployment, String projectId, String env, Integer exposedPort, Boolean inDevMode, String memoryInfo, String cpuInfo, String created) { + this.name = name; + this.ready = ready; + this.deployment = deployment; + this.projectId = projectId; + this.env = env; + this.exposedPort = exposedPort; + this.inDevMode = inDevMode; + this.memoryInfo = memoryInfo; + this.cpuInfo = cpuInfo; + this.created = created; + } + public PodStatus(String name, Boolean ready, String deployment, String projectId, String env, Boolean inDevMode, String memoryInfo, String cpuInfo, String created) { this.name = name; this.ready = ready; @@ -37,7 +52,7 @@ public class PodStatus { this.created = created; } - public PodStatus(String name, Boolean ready, String deployment, String projectId, String env, Boolean inDevMode, String created) { + public PodStatus(String name, Boolean ready, String deployment, String projectId, String env, Boolean inDevMode, String created, Integer exposedPort) { this.name = name; this.ready = ready; this.deployment = deployment; @@ -45,6 +60,7 @@ public class PodStatus { this.env = env; this.inDevMode = inDevMode; this.created = created; + this.exposedPort = exposedPort; } public String getName() { @@ -118,4 +134,12 @@ public class PodStatus { public void setCreated(String created) { this.created = created; } + + public Integer getExposedPort() { + return exposedPort; + } + + public void setExposedPort(Integer exposedPort) { + this.exposedPort = exposedPort; + } } diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java index 3c0e6f84..66eb1e54 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/PodEventHandler.java @@ -94,7 +94,8 @@ public class PodEventHandler implements ResourceEventHandler<Pod> { project, kubernetesService.environment, false, - ""); + "", + null); } } } \ No newline at end of file diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java index 70d988d6..67077914 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java @@ -75,10 +75,12 @@ public class CamelService { public void reloadProjectCode(String projectId) { LOGGER.info("Reload project code " + projectId); - String containerName = projectId + "-" + DEVMODE_SUFFIX; + String containerName = projectId + DEVMODE_SUFFIX; try { - infinispanService.getProjectFiles(projectId).forEach(projectFile -> putRequest(containerName, projectFile.getName(), projectFile.getCode(), 1000)); - reloadRequest(containerName); + PodStatus podStatus = infinispanService.getDevModePodStatuses(projectId, environment); + Integer exposedPort = podStatus.getExposedPort(); + infinispanService.getProjectFiles(projectId).forEach(projectFile -> putRequest(containerName,exposedPort, projectFile.getName(), projectFile.getCode(), 1000)); + reloadRequest(containerName, exposedPort); DevModeStatus dms = infinispanService.getDevModeStatus(projectId); dms.setCodeLoaded(true); infinispanService.saveDevModeStatus(dms); @@ -88,9 +90,9 @@ public class CamelService { } @CircuitBreaker(requestVolumeThreshold = 10, failureRatio = 0.5, delay = 1000) - public boolean putRequest(String containerName, String fileName, String body, int timeout) { + public boolean putRequest(String containerName, Integer exposedPort, String fileName, String body, int timeout) { try { - String url = getContainerAddress(containerName) + "/q/upload/" + fileName; + String url = getContainerAddress(containerName, exposedPort) + "/q/upload/" + fileName; HttpResponse<Buffer> result = getWebClient().putAbs(url) .timeout(timeout).sendBuffer(Buffer.buffer(body)).subscribeAsCompletionStage().toCompletableFuture().get(); return result.statusCode() == 200; @@ -100,8 +102,8 @@ public class CamelService { return false; } - public String reloadRequest(String containerName) { - String url = getContainerAddress(containerName) + "/q/dev/reload?reload=true"; + public String reloadRequest(String containerName, Integer exposedPort) { + String url = getContainerAddress(containerName, exposedPort) + "/q/dev/reload?reload=true"; try { return result(url, 1000); } catch (InterruptedException | ExecutionException e) { @@ -110,27 +112,18 @@ public class CamelService { return null; } - public String getContainerAddress(String containerName) { + public String getContainerAddress(String containerName, Integer exposedPort) { if (ConfigService.inKubernetes()) { return "http://" + containerName + "." + kubernetesService.getNamespace() + ".svc.cluster.local"; } else { - return "http://" + containerName + ":8080"; + return "http://localhost:" + exposedPort; } } - public void collectDevModeStatuses() { - if (infinispanService.isReady()) { - infinispanService.getDevModeStatuses().forEach(dms -> { - CamelStatusRequest csr = new CamelStatusRequest(dms.getProjectId(), dms.getContainerName()); - eventBus.publish(CMD_COLLECT_CAMEL_STATUS, JsonObject.mapFrom(csr)); - }); - } - } - - public void collectNonDevModeStatuses() { + public void collectCamelStatuses() { if (infinispanService.isReady()) { infinispanService.getPodStatuses(environment).forEach(pod -> { - CamelStatusRequest csr = new CamelStatusRequest(pod.getProjectId(), pod.getName()); + CamelStatusRequest csr = new CamelStatusRequest(pod.getProjectId(), pod.getName(), pod.getExposedPort()); eventBus.publish(CMD_COLLECT_CAMEL_STATUS, JsonObject.mapFrom(csr)); }); } @@ -138,10 +131,11 @@ public class CamelService { @ConsumeEvent(value = CMD_COLLECT_CAMEL_STATUS, blocking = true, ordered = true) public void collectCamelStatuses(JsonObject data) { - DevModeStatus dms = data.mapTo(DevModeStatus.class); + CamelStatusRequest dms = data.mapTo(CamelStatusRequest.class); Arrays.stream(CamelStatusName.values()).forEach(statusName -> { String containerName = dms.getContainerName(); - String status = getCamelStatus(containerName, statusName); + Integer exposedPort = dms.getExposedPort(); + String status = getCamelStatus(containerName, exposedPort, statusName); if (status != null) { CamelStatus cs = new CamelStatus(dms.getProjectId(), containerName, statusName, status, environment); infinispanService.saveCamelStatus(cs); @@ -169,7 +163,7 @@ public class CamelService { } private void reloadCode(String podName, String oldContext, String newContext) { - String projectName = podName.replace("-" + DEVMODE_SUFFIX, ""); + String projectName = podName.replace(DEVMODE_SUFFIX, ""); String newState = getContextState(newContext); String oldState = getContextState(oldContext); if (newContext != null && !Objects.equals(newState, oldState) && "Started".equals(newState)) { @@ -186,8 +180,8 @@ public class CamelService { } } - public String getCamelStatus(String podName, CamelStatusName statusName) { - String url = getContainerAddress(podName) + "/q/dev/" + statusName.name(); + public String getCamelStatus(String podName, Integer exposedPort, CamelStatusName statusName) { + String url = getContainerAddress(podName, exposedPort) + "/q/dev/" + statusName.name(); try { return result(url, 500); } catch (InterruptedException | ExecutionException e) { @@ -211,21 +205,42 @@ public class CamelService { return null; } - public class CamelStatusRequest { - private final String projectId; - private final String containerName; + public static class CamelStatusRequest { + private String projectId; + private String containerName; + private Integer exposedPort; + + public CamelStatusRequest() { + } - public CamelStatusRequest(String projectId, String containerName) { + public CamelStatusRequest(String projectId, String containerName, Integer exposedPort) { this.projectId = projectId; this.containerName = containerName; + this.exposedPort = exposedPort; } public String getProjectId() { return projectId; } + public void setProjectId(String projectId) { + this.projectId = projectId; + } + public String getContainerName() { return containerName; } + + public void setContainerName(String containerName) { + this.containerName = containerName; + } + + public Integer getExposedPort() { + return exposedPort; + } + + public void setExposedPort(Integer exposedPort) { + this.exposedPort = exposedPort; + } } } \ No newline at end of file diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java index 64ef9255..02e4bf45 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java @@ -50,9 +50,9 @@ public class EventService { if (!ConfigService.inKubernetes()) { LOGGER.info("Starting Karavan with Docker"); dockerService.createNetwork(); - dockerService.checkInfinispanHealth(); dockerService.startListeners(); dockerService.startInfinispan(); + dockerService.checkInfinispanHealth(); } else { LOGGER.info("Starting Karavan in " + (kubernetesService.isOpenshift() ? "OpenShift" : "Kubernetes")); startServices(HEALTHY); @@ -75,7 +75,7 @@ public class EventService { if (ConfigService.inKubernetes()) { kubernetesService.startInformers(data); } else { - dockerService.startListeners(); +// Docker listener is already started } } @@ -94,7 +94,7 @@ public class EventService { projectService.importProjects(data); } - @ConsumeEvent(value = ADDRESS_DEVMODE_STATUS, blocking = true, ordered = true) + @ConsumeEvent(value = DEVMODE_STATUS, blocking = true, ordered = true) void receiveCommand(JsonObject message) { LOGGER.info("received Status " + message); DevModeStatus status = message.mapTo(DevModeStatus.class); diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java index 90c8b61b..c1e1e385 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java @@ -132,21 +132,21 @@ public class GitService { public GitConfig getGitConfig() { String propertiesPrefix = "karavan."; - String branch = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-branch", String.class); + String branch = ConfigProvider.getConfig().getValue(propertiesPrefix + "git.branch", String.class); if (ConfigService.inKubernetes()) { LOGGER.info("inKubernetes " + kubernetesService.getNamespace()); Secret secret = kubernetesService.getKaravanSecret(); - String uri = new String(Base64.getDecoder().decode(secret.getData().get("git-repository").getBytes(StandardCharsets.UTF_8))); - String username = new String(Base64.getDecoder().decode(secret.getData().get("git-username").getBytes(StandardCharsets.UTF_8))); - String password = new String(Base64.getDecoder().decode(secret.getData().get("git-password").getBytes(StandardCharsets.UTF_8))); - if (secret.getData().containsKey("git-branch")) { - branch = new String(Base64.getDecoder().decode(secret.getData().get("git-branch").getBytes(StandardCharsets.UTF_8))); + String uri = new String(Base64.getDecoder().decode(secret.getData().get("git.repository").getBytes(StandardCharsets.UTF_8))); + String username = new String(Base64.getDecoder().decode(secret.getData().get("git.username").getBytes(StandardCharsets.UTF_8))); + String password = new String(Base64.getDecoder().decode(secret.getData().get("git.password").getBytes(StandardCharsets.UTF_8))); + if (secret.getData().containsKey("git.branch")) { + branch = new String(Base64.getDecoder().decode(secret.getData().get("git.branch").getBytes(StandardCharsets.UTF_8))); } return new GitConfig(uri, username, password, branch); } else { - String uri = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-repository", String.class); - String username = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-username", String.class); - String password = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-password", String.class); + String uri = ConfigProvider.getConfig().getValue(propertiesPrefix + "git.repository", String.class); + String username = ConfigProvider.getConfig().getValue(propertiesPrefix + "git.username", String.class); + String password = ConfigProvider.getConfig().getValue(propertiesPrefix + "git.password", String.class); return new GitConfig(uri, username, password, branch); } } diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java index 4a1103b4..953b660d 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java @@ -34,27 +34,27 @@ public class ScheduledService { @Inject CamelService camelService; - @Scheduled(every = "{karavan.container-stats-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) - void collectContainersStats() { - dockerService.collectContainersStats(); + @Scheduled(every = "{karavan.container.status.pull-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) + void collectContainersStatuses() { + dockerService.collectContainersStatuses(); } - @Scheduled(every = "{karavan.devmode-status-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) - void collectDevModeCamelStatuses() { - camelService.collectDevModeStatuses(); + @Scheduled(every = "{karavan.container.stats.container}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) + void collectContainersStats() { + dockerService.collectContainersStats(); } - @Scheduled(every = "{karavan.camel-status-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) - void collectNonDevModeCamelStatuses() { - camelService.collectNonDevModeStatuses(); + @Scheduled(every = "{karavan.camel.status.pull-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) + void collectCamelStatuses() { + camelService.collectCamelStatuses(); } - @Scheduled(every = "{karavan.devmode-status-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) + @Scheduled(every = "{karavan.camel.status.pull-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) void cleanupDevModeStatuses() { camelService.cleanupDevModeStatuses(); } - @Scheduled(every = "{karavan.git-pull-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) + @Scheduled(every = "{karavan.git.pull-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP) void pullCommitsFromGit() { projectService.pullCommits(); } diff --git a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java index 7b7af56e..f2036913 100644 --- a/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java +++ b/karavan-cloud/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java @@ -11,14 +11,9 @@ public class EventType { // Import projects from Git repository public static final String IMPORT_PROJECTS = "IMPORT_PROJECTS"; - - public static final String INFINISPAN_STARTED = "INFINISPAN_STARTED"; - public static final String INFINISPAN_HEALTH = "INFINISPAN_HEALTH"; - public static final String CONTAINER_STATS = "ADDRESS_CONTAINER_STATS"; + public static final String CONTAINER_STATS = "CONTAINER_STATS"; + public static final String DEVMODE_STATUS = "DEVMODE_STATUS"; - public static final String ADDRESS_DEVMODE_STATUS = "ADDRESS_DEVMODE_STATUS"; - public static final String ADDRESS_DEVMODE_COMMAND_INTERNAL = "ADDRESS_DEVMODE_COMMAND_INTERNAL"; - public static final String ADDRESS_DEVMODE_STATUS_INTERNAL = "ADDRESS_DEVMODE_STATUS_INTERNAL"; } diff --git a/karavan-cloud/karavan-app/src/main/resources/application.properties b/karavan-cloud/karavan-app/src/main/resources/application.properties index b153e02b..0cb2e699 100644 --- a/karavan-cloud/karavan-app/src/main/resources/application.properties +++ b/karavan-cloud/karavan-app/src/main/resources/application.properties @@ -3,19 +3,18 @@ karavan.environment=dev karavan.environments=dev,test,prod karavan.default-runtime=quarkus karavan.runtimes=quarkus,spring-boot -karavan.camel-status-interval=10s -karavan.devmode-status-interval=2s -karavan.container-status-interval=10s -karavan.container-stats-interval=10s +karavan.camel.status.pull-interval=3s +karavan.container.status.pull-interval=5s +karavan.container.stats.container=5s quarkus.scheduler.enabled=true -runner.image=marat/karavan +runner.image=ghcr.io/apache/camel-karavan-runner:3.21.1-snapshot # Git repository Configuration -karavan.git-repository=${GIT_REPOSITORY} -karavan.git-username=${GIT_USERNAME} -karavan.git-password=${GIT_TOKEN} -karavan.git-branch=main -karavan.git-pull-interval=disabled +karavan.git.repository=${GIT_REPOSITORY} +karavan.git.username=${GIT_USERNAME} +karavan.git.password=${GIT_TOKEN} +karavan.git.branch=main +karavan.git.pull-interval=disabled # Infinispan container config in Docker infinispan.image=quay.io/infinispan/server:14.0.6.Final