You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2022/02/23 16:10:26 UTC

[incubator-streampipes] branch dev updated: [hotfix] Improve consul health check handling

This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new fc86c65  [hotfix] Improve consul health check handling
fc86c65 is described below

commit fc86c65ce8d00cf4b231871b041a376797fccba5
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Wed Feb 23 17:07:45 2022 +0100

    [hotfix] Improve consul health check handling
---
 .../backend/StreamPipesBackendApplication.java     |  2 +-
 .../backend/StreamPipesResourceConfig.java         |  2 ++
 .../backend/UnauthenticatedInterfaces.java         |  1 +
 .../extensions/ExtensionsResourceConfig.java       |  4 +++-
 .../service/base/StreamPipesServiceBase.java       |  4 ++--
 .../service/base/rest/BaseResourceConfig.java      |  1 +
 .../service/base/rest/ServiceHealthResource.java   | 22 ++++++++++++++++++++++
 .../consul/ConsulHealthServiceManager.java         |  2 +-
 8 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesBackendApplication.java b/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesBackendApplication.java
index 1f7be83..62a21ea 100644
--- a/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesBackendApplication.java
+++ b/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesBackendApplication.java
@@ -249,6 +249,6 @@ public class StreamPipesBackendApplication extends StreamPipesServiceBase {
 
   @Override
   protected String getHealthCheckPath() {
-    return "/streampipes-backend/";
+    return "/streampipes-backend/api/svchealth/" + AUTO_GENERATED_SERVICE_ID;
   }
 }
diff --git a/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesResourceConfig.java b/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesResourceConfig.java
index 5c064a3..78a245c 100644
--- a/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesResourceConfig.java
+++ b/streampipes-backend/src/main/java/org/apache/streampipes/backend/StreamPipesResourceConfig.java
@@ -41,6 +41,7 @@ import org.apache.streampipes.rest.shared.serializer.GsonClientModelProvider;
 import org.apache.streampipes.rest.shared.serializer.GsonWithIdProvider;
 import org.apache.streampipes.rest.shared.serializer.GsonWithoutIdProvider;
 import org.apache.streampipes.rest.shared.serializer.JacksonSerializationProvider;
+import org.apache.streampipes.service.base.rest.ServiceHealthResource;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.springframework.context.annotation.Configuration;
@@ -98,6 +99,7 @@ public class StreamPipesResourceConfig extends ResourceConfig {
         register(Setup.class);
         register(ResetResource.class);
         register(RestorePasswordResource.class);
+        register(ServiceHealthResource.class);
         register(UserResource.class);
         register(Version.class);
         register(PipelineElementAsset.class);
diff --git a/streampipes-backend/src/main/java/org/apache/streampipes/backend/UnauthenticatedInterfaces.java b/streampipes-backend/src/main/java/org/apache/streampipes/backend/UnauthenticatedInterfaces.java
index 1a5b837..1b1ec80 100644
--- a/streampipes-backend/src/main/java/org/apache/streampipes/backend/UnauthenticatedInterfaces.java
+++ b/streampipes-backend/src/main/java/org/apache/streampipes/backend/UnauthenticatedInterfaces.java
@@ -24,6 +24,7 @@ public class UnauthenticatedInterfaces {
 
   public static Collection<String> get() {
     return Arrays.asList(
+            "/api/svchealth/*",
             "/api/v2/setup/configured",
             "/api/v2/auth/login",
             "/api/v2/auth/register",
diff --git a/streampipes-container-extensions/src/main/java/org/apache/streampipes/container/extensions/ExtensionsResourceConfig.java b/streampipes-container-extensions/src/main/java/org/apache/streampipes/container/extensions/ExtensionsResourceConfig.java
index e5b2654..840482a 100644
--- a/streampipes-container-extensions/src/main/java/org/apache/streampipes/container/extensions/ExtensionsResourceConfig.java
+++ b/streampipes-container-extensions/src/main/java/org/apache/streampipes/container/extensions/ExtensionsResourceConfig.java
@@ -18,12 +18,14 @@
 package org.apache.streampipes.container.extensions;
 
 import org.apache.streampipes.connect.container.worker.init.AdapterServiceResourceProvider;
-import org.apache.streampipes.service.base.rest.BaseResourceConfig;
 import org.apache.streampipes.container.init.BaseExtensionsServiceResourceProvider;
 import org.apache.streampipes.container.init.PipelineElementServiceResourceProvider;
+import org.apache.streampipes.service.base.rest.BaseResourceConfig;
+import org.apache.streampipes.service.base.rest.ServiceHealthResource;
 import org.springframework.stereotype.Component;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 @Component
diff --git a/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/StreamPipesServiceBase.java b/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/StreamPipesServiceBase.java
index 72f1dd4..593e142 100644
--- a/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/StreamPipesServiceBase.java
+++ b/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/StreamPipesServiceBase.java
@@ -33,7 +33,7 @@ public abstract class StreamPipesServiceBase {
 
   private static final Logger LOG = LoggerFactory.getLogger(StreamPipesServiceBase.class);
 
-  protected static final String AUTO_GENERATED_SERVICE_ID = RandomStringUtils.randomAlphanumeric(6);
+  public static final String AUTO_GENERATED_SERVICE_ID = RandomStringUtils.randomAlphanumeric(6);
 
   protected void startStreamPipesService(Class<?> serviceClass,
                                          String serviceGroup,
@@ -74,7 +74,7 @@ public abstract class StreamPipesServiceBase {
   }
 
   protected String getHealthCheckPath() {
-    return "";
+    return "/svchealth/" + AUTO_GENERATED_SERVICE_ID;
   }
 
 }
diff --git a/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/BaseResourceConfig.java b/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/BaseResourceConfig.java
index 9f94235..2233be2 100644
--- a/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/BaseResourceConfig.java
+++ b/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/BaseResourceConfig.java
@@ -26,6 +26,7 @@ public abstract class BaseResourceConfig extends ResourceConfig {
   public BaseResourceConfig() {
     getClassesToRegister()
             .forEach(set -> set.forEach(this::register));
+    register(ServiceHealthResource.class);
   }
 
   public abstract List<List<Class<?>>> getClassesToRegister();
diff --git a/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/ServiceHealthResource.java b/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/ServiceHealthResource.java
new file mode 100644
index 0000000..8979ffc
--- /dev/null
+++ b/streampipes-service-base/src/main/java/org/apache/streampipes/service/base/rest/ServiceHealthResource.java
@@ -0,0 +1,22 @@
+package org.apache.streampipes.service.base.rest;
+
+import org.apache.streampipes.service.base.StreamPipesServiceBase;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+@Path("")
+public class ServiceHealthResource {
+
+  @GET()
+  @Path("svchealth/{serviceId}")
+  public Response healthy(@PathParam("serviceId") String serviceId) {
+    if (serviceId.equals(StreamPipesServiceBase.AUTO_GENERATED_SERVICE_ID)) {
+      return Response.ok().build();
+    } else {
+      return Response.status(404).build();
+    }
+  }
+}
diff --git a/streampipes-service-discovery-consul/src/main/java/org/apache/streampipes/svcdiscovery/consul/ConsulHealthServiceManager.java b/streampipes-service-discovery-consul/src/main/java/org/apache/streampipes/svcdiscovery/consul/ConsulHealthServiceManager.java
index 94573b9..c289ec2 100644
--- a/streampipes-service-discovery-consul/src/main/java/org/apache/streampipes/svcdiscovery/consul/ConsulHealthServiceManager.java
+++ b/streampipes-service-discovery-consul/src/main/java/org/apache/streampipes/svcdiscovery/consul/ConsulHealthServiceManager.java
@@ -74,7 +74,7 @@ public enum ConsulHealthServiceManager {
     return activeServices
             .stream()
             .filter(service -> allFiltersSupported(service, filterByTags))
-            .filter(service -> !restrictToHealthy || service.getChecks().get(0).getStatus().equals("passing"))
+            .filter(service -> !restrictToHealthy || service.getChecks().stream().allMatch(check -> check.getStatus().equals("passing")))
             .map(this::makeServiceUrl)
             .collect(Collectors.toList());
   }