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 2bc9eb59906a8e0d20d7cfb8f1b734ffd2fc654f Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Fri Feb 9 18:38:34 2024 -0500 Updates for #1115 --- .../camel/karavan/api/NotificationResource.java | 63 ++++++++++++++++++++++ .../camel/karavan/cache/KaravanCacheService.java | 40 +++++++++----- .../camel/karavan/cache/model/CamelStatus.java | 7 ++- .../karavan/cache/model/CamelStatusValue.java | 8 ++- .../camel/karavan/cache/model/ContainerPort.java | 8 ++- .../camel/karavan/cache/model/ContainerStatus.java | 7 ++- .../karavan/cache/model/DeploymentStatus.java | 9 +++- .../camel/karavan/cache/model/GroupedKey.java | 8 ++- .../apache/camel/karavan/cache/model/Project.java | 7 ++- .../camel/karavan/cache/model/ProjectFile.java | 8 ++- .../camel/karavan/cache/model/ServiceStatus.java | 8 ++- .../camel/karavan/docker/DockerEventListener.java | 4 -- 12 files changed, 152 insertions(+), 25 deletions(-) diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/NotificationResource.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/NotificationResource.java new file mode 100644 index 00000000..4ad4de25 --- /dev/null +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/NotificationResource.java @@ -0,0 +1,63 @@ +/* + * 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. + */ +package org.apache.camel.karavan.api; + +import io.quarkus.runtime.StartupEvent; +import io.smallrye.mutiny.Multi; +import io.vertx.core.json.JsonObject; +import io.vertx.mutiny.core.Vertx; +import io.vertx.mutiny.core.eventbus.EventBus; +import jakarta.enterprise.event.Observes; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import org.jboss.logging.Logger; +import org.jboss.resteasy.reactive.RestStreamElementType; + +import java.util.Date; + +@Path("/api/notification") +public class NotificationResource { + + private static final Logger LOGGER = Logger.getLogger(NotificationResource.class.getName()); + + void onStart(@Observes StartupEvent ev) throws Exception { + System.out.println("STARTING!!!!!"); + vertx.setPeriodic(1000, + aLong -> { + vertx.eventBus().publish("test0", new JsonObject().put("user", "test0").put("date", new Date().toString())); + vertx.eventBus().publish("test1", new JsonObject().put("user", "test1").put("date", new Date().toString())); + }); + } + + @Inject + Vertx vertx; + @Inject + EventBus bus; + + + @GET + @Path("{name}") + @Produces(MediaType.SERVER_SENT_EVENTS) + @RestStreamElementType(MediaType.TEXT_PLAIN) + public Multi<String> greetingStream(@PathParam("name") String name) { + return bus.<String>consumer(name).bodyStream().toMulti(); + } +} \ No newline at end of file diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/KaravanCacheService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/KaravanCacheService.java index a8aa1086..438c7913 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/KaravanCacheService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/KaravanCacheService.java @@ -16,6 +16,7 @@ */ package org.apache.camel.karavan.cache; +import com.hazelcast.config.ClasspathXmlConfig; import com.hazelcast.config.ClasspathYamlConfig; import com.hazelcast.config.Config; import com.hazelcast.core.Hazelcast; @@ -27,13 +28,12 @@ import io.quarkus.runtime.ShutdownEvent; import io.quarkus.runtime.StartupEvent; import jakarta.enterprise.event.Observes; import jakarta.enterprise.inject.Default; +import jakarta.enterprise.inject.Produces; import jakarta.inject.Singleton; import org.apache.camel.karavan.cache.model.*; import org.jboss.logging.Logger; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.*; import java.time.Instant; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -43,16 +43,17 @@ import java.util.stream.Collectors; @Singleton public class KaravanCacheService { - Config config = new ClasspathYamlConfig("hazelcast.yaml"); - HazelcastInstance hz = Hazelcast.getOrCreateHazelcastInstance(config); + private final Config config = new ClasspathYamlConfig("hazelcast.yaml"); + private final HazelcastInstance hz = Hazelcast.getOrCreateHazelcastInstance(config); + + private IMap<GroupedKey, Project> projects; + private IMap<GroupedKey, ProjectFile> files; + private IMap<GroupedKey, DeploymentStatus> deploymentStatuses; + private IMap<GroupedKey, ContainerStatus> containerStatuses; + private IMap<GroupedKey, Boolean> transits; + private IMap<GroupedKey, ServiceStatus> serviceStatuses; + private IMap<GroupedKey, CamelStatus> camelStatuses; - private final IMap<GroupedKey, Project> projects = hz.getMap(Project.CACHE); - private final IMap<GroupedKey, ProjectFile> files = hz.getMap(ProjectFile.CACHE); - private final IMap<GroupedKey, DeploymentStatus> deploymentStatuses = hz.getMap(DeploymentStatus.CACHE); - private final IMap<GroupedKey, ContainerStatus> containerStatuses = hz.getMap(ContainerStatus.CACHE); - private final IMap<GroupedKey, Boolean> transits = hz.getMap("transits"); - private final IMap<GroupedKey, ServiceStatus> serviceStatuses = hz.getMap(ServiceStatus.CACHE); - private final IMap<GroupedKey, CamelStatus> camelStatuses = hz.getMap(CamelStatus.CACHE); private final AtomicBoolean ready = new AtomicBoolean(false); private static final Logger LOGGER = Logger.getLogger(KaravanCacheService.class.getName()); @@ -60,8 +61,17 @@ public class KaravanCacheService { private static final String DEFAULT_ENVIRONMENT = "dev"; void onStart(@Observes StartupEvent ev) { + LOGGER.info("KaravanCacheService is starting"); + projects = hz.getMap(Project.CACHE); + files = hz.getMap(ProjectFile.CACHE); + deploymentStatuses = hz.getMap(DeploymentStatus.CACHE); + containerStatuses = hz.getMap(ContainerStatus.CACHE); + transits = hz.getMap("transits"); + serviceStatuses = hz.getMap(ServiceStatus.CACHE); + camelStatuses = hz.getMap(CamelStatus.CACHE); LOGGER.info("KaravanCacheService is started"); ready.set(true); + } void onStop(@Observes ShutdownEvent ev) { @@ -69,6 +79,12 @@ public class KaravanCacheService { ready.set(false); } + @Produces + HazelcastInstance createInstance() { + Config config = new ClasspathYamlConfig("hazelcast.yaml"); + return Hazelcast.getOrCreateHazelcastInstance(config); + } + public List<Project> getProjects() { return projects.values().stream().collect(Collectors.toList()); } diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatus.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatus.java index de2e1b96..977a7fbf 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatus.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatus.java @@ -17,9 +17,14 @@ package org.apache.camel.karavan.cache.model; +import java.io.Serial; +import java.io.Serializable; import java.util.List; -public class CamelStatus { +public class CamelStatus implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; public static final String CACHE = "camel_statuses"; String projectId; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatusValue.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatusValue.java index 59cf946f..c00d6752 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatusValue.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/CamelStatusValue.java @@ -17,7 +17,13 @@ package org.apache.camel.karavan.cache.model; -public class CamelStatusValue { +import java.io.Serial; +import java.io.Serializable; + +public class CamelStatusValue implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; public enum Name { diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerPort.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerPort.java index c9e97589..55cf79ba 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerPort.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerPort.java @@ -17,7 +17,13 @@ package org.apache.camel.karavan.cache.model; -public class ContainerPort { +import java.io.Serial; +import java.io.Serializable; + +public class ContainerPort implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; Integer privatePort; Integer publicPort; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerStatus.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerStatus.java index 94eed978..56905a97 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerStatus.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ContainerStatus.java @@ -17,10 +17,15 @@ package org.apache.camel.karavan.cache.model; +import java.io.Serial; +import java.io.Serializable; import java.time.Instant; import java.util.List; -public class ContainerStatus { +public class ContainerStatus implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; public enum State { created, diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/DeploymentStatus.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/DeploymentStatus.java index c67c4525..048b36ff 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/DeploymentStatus.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/DeploymentStatus.java @@ -18,7 +18,14 @@ package org.apache.camel.karavan.cache.model; -public class DeploymentStatus { +import java.io.Serial; +import java.io.Serializable; + +public class DeploymentStatus implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; + public static final String CACHE = "deployment_statuses"; String projectId; String namespace; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/GroupedKey.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/GroupedKey.java index 7fb1b0be..8f03898b 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/GroupedKey.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/GroupedKey.java @@ -17,7 +17,13 @@ package org.apache.camel.karavan.cache.model; -public class GroupedKey { +import java.io.Serial; +import java.io.Serializable; + +public class GroupedKey implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; String projectId; String env; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/Project.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/Project.java index df865970..3424f8cf 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/Project.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/Project.java @@ -19,10 +19,15 @@ package org.apache.camel.karavan.cache.model; import jakarta.validation.constraints.NotBlank; +import java.io.Serial; +import java.io.Serializable; import java.time.Instant; import java.util.Arrays; -public class Project { +public class Project implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; public static final String CACHE = "projects"; public enum Type { diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ProjectFile.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ProjectFile.java index 1c0a5a4e..c0f9fa28 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ProjectFile.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ProjectFile.java @@ -17,7 +17,13 @@ package org.apache.camel.karavan.cache.model; -public class ProjectFile { +import java.io.Serial; +import java.io.Serializable; + +public class ProjectFile implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; public static final String CACHE = "project_files"; String name; String code; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ServiceStatus.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ServiceStatus.java index 59ee19a9..ad249360 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ServiceStatus.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/cache/model/ServiceStatus.java @@ -17,7 +17,13 @@ package org.apache.camel.karavan.cache.model; -public class ServiceStatus { +import java.io.Serial; +import java.io.Serializable; + +public class ServiceStatus implements Serializable { + + @Serial + private static final long serialVersionUID = 7777777L; public static final String CACHE = "service_statuses"; String projectId; String namespace; 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 ceb205d8..5536b68a 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 @@ -23,7 +23,6 @@ import com.github.dockerjava.api.model.Event; import com.github.dockerjava.api.model.EventType; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import org.apache.camel.karavan.cache.KaravanCacheService; import org.apache.camel.karavan.cache.model.ContainerStatus; import org.apache.camel.karavan.registry.RegistryService; import org.jboss.logging.Logger; @@ -43,9 +42,6 @@ public class DockerEventListener implements ResultCallback<Event> { @Inject RegistryService registryService; - @Inject - KaravanCacheService karavanCacheService; - private static final Logger LOGGER = Logger.getLogger(DockerEventListener.class.getName()); @Override