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/04/12 14:32:09 UTC

[camel-karavan] branch main updated: Karavan 578 (#715)

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


The following commit(s) were added to refs/heads/main by this push:
     new 94674504 Karavan 578 (#715)
94674504 is described below

commit 946745043ec9f75e2d9fe3ed90e36d82d3a1306a
Author: Mrinal Sharma <mr...@users.noreply.github.com>
AuthorDate: Wed Apr 12 10:32:03 2023 -0400

    Karavan 578 (#715)
    
    * Added healthcheck suport
    
    * removed KaravanReadiness
---
 .../camel/karavan/health/KaravanReadiness.java     | 17 -------------
 .../camel/karavan/service/InfinispanService.java   | 29 +++++++++++++++++++++-
 .../camel/karavan/service/KubernetesService.java   | 20 ++++++++++++++-
 .../camel/karavan/service/ProjectService.java      | 19 ++++++++++++--
 4 files changed, 64 insertions(+), 21 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/health/KaravanReadiness.java b/karavan-app/src/main/java/org/apache/camel/karavan/health/KaravanReadiness.java
deleted file mode 100644
index 1faeb3bd..00000000
--- a/karavan-app/src/main/java/org/apache/camel/karavan/health/KaravanReadiness.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.apache.camel.karavan.health;
-
-import org.eclipse.microprofile.health.HealthCheck;
-import org.eclipse.microprofile.health.HealthCheckResponse;
-import org.eclipse.microprofile.health.Readiness;
-
-import javax.enterprise.context.ApplicationScoped;
-
-@Readiness
-@ApplicationScoped
-public class KaravanReadiness implements HealthCheck {
-
-    @Override
-    public HealthCheckResponse call() {
-        return HealthCheckResponse.up("Karavan in ready");
-    }
-}
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java
index c85bde94..35b19a99 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.karavan.service;
 
+import io.quarkus.runtime.LaunchMode;
+import io.quarkus.runtime.configuration.ProfileManager;
 import io.smallrye.mutiny.tuples.Tuple2;
 import org.apache.camel.karavan.model.CamelStatus;
 import org.apache.camel.karavan.model.DeploymentStatus;
@@ -26,6 +28,9 @@ import org.apache.camel.karavan.model.PodStatus;
 import org.apache.camel.karavan.model.Project;
 import org.apache.camel.karavan.model.ProjectFile;
 import org.apache.camel.karavan.model.ServiceStatus;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.Readiness;
 import org.infinispan.client.hotrod.RemoteCache;
 import org.infinispan.client.hotrod.RemoteCacheManager;
 import org.infinispan.client.hotrod.Search;
@@ -41,6 +46,7 @@ import org.infinispan.query.dsl.QueryFactory;
 import org.jboss.logging.Logger;
 
 import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Default;
 import javax.inject.Inject;
 import java.time.Instant;
 import java.util.HashMap;
@@ -49,8 +55,10 @@ import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
+@Default
+@Readiness
 @ApplicationScoped
-public class InfinispanService {
+public class InfinispanService implements HealthCheck  {
 
     BasicCache<GroupedKey, Project> projects;
     BasicCache<GroupedKey, ProjectFile> files;
@@ -113,6 +121,10 @@ public class InfinispanService {
         }
     }
 
+    public RemoteCacheManager gRemoteCacheManager() {
+        return cacheManager;
+    }
+
     private void cleanData() {
         environments.clear();
         deploymentStatuses.clear();
@@ -312,6 +324,21 @@ public class InfinispanService {
         return commits.get(commitId) != null;
     }
 
+    @Override
+    public HealthCheckResponse call() {
+        if(ProfileManager.getLaunchMode() != LaunchMode.NORMAL){
+            return HealthCheckResponse.up("Infinispan Service is running in local mode.");
+        }
+        else{
+            if(this.gRemoteCacheManager() != null && this.gRemoteCacheManager().isStarted()) {
+                return HealthCheckResponse.up("Infinispan Service is running in cluster mode.");
+            }
+            else {
+                return HealthCheckResponse.down("Infinispan Service is not running.");
+            }
+        }
+    }
+
     protected void clearAllStatuses() {
         CompletableFuture.allOf(
             deploymentStatuses.clearAsync(),
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
index f2358681..918f91da 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
@@ -48,9 +48,13 @@ import org.apache.camel.karavan.informer.DeploymentEventHandler;
 import org.apache.camel.karavan.informer.PipelineRunEventHandler;
 import org.apache.camel.karavan.informer.PodEventHandler;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.Readiness;
 import org.jboss.logging.Logger;
 
 import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Default;
 import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
 import java.io.IOException;
@@ -63,8 +67,10 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 
+@Default
+@Readiness
 @ApplicationScoped
-public class KubernetesService {
+public class KubernetesService implements HealthCheck{
 
     private static final Logger LOGGER = Logger.getLogger(KubernetesService.class.getName());
     public static final String START_INFORMERS = "start-informers";
@@ -128,6 +134,17 @@ public class KubernetesService {
         }
     }
 
+    
+    @Override
+    public HealthCheckResponse call() {
+        if(informers.size() == 4) {
+            return HealthCheckResponse.up("All Kubernetes informers are running.");
+        }
+        else {
+            return HealthCheckResponse.down("kubernetes Informers are not running.");
+        }
+    }
+
     @ConsumeEvent(value = STOP_INFORMERS, blocking = true)
     void stopInformers(String data) {
         LOGGER.info("Stop Kubernetes Informers");
@@ -401,4 +418,5 @@ public class KubernetesService {
     public boolean inKubernetes() {
         return !Objects.equals(getNamespace(), "localhost");
     }
+
 }
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index 0a574614..85e511ca 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -24,16 +24,22 @@ import org.apache.camel.karavan.model.Project;
 import org.apache.camel.karavan.model.ProjectFile;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.Readiness;
 import org.jboss.logging.Logger;
 
 import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Default;
 import javax.inject.Inject;
 import java.time.Instant;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+@Default
+@Readiness
 @ApplicationScoped
-public class ProjectService {
+public class ProjectService implements HealthCheck{
 
     private static final Logger LOGGER = Logger.getLogger(ProjectService.class.getName());
     public static final String IMPORT_PROJECTS = "import-projects";
@@ -55,6 +61,16 @@ public class ProjectService {
 
     private AtomicBoolean readyToPull = new AtomicBoolean(false);
 
+    @Override
+    public HealthCheckResponse call() {
+        if(readyToPull.get()) {
+            return HealthCheckResponse.up("Git authentication is successfull.");
+        }
+        else {
+            return HealthCheckResponse.down("Git authentication is unsuccessfull. Check your git credentials.");
+        }
+    }
+
     @Scheduled(every = "{karavan.git-pull-interval}", concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
     void pullCommits() {
         if (readyToPull.get()) {
@@ -220,5 +236,4 @@ public class ProjectService {
             LOGGER.error("Error during pipelines project creation", e);
         }
     }
-
 }