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);
}
}
-
}