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/09/01 17:57:04 UTC

[camel-karavan] 07/07: Readiness for #817

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 fcf175004b3f05e8eaed27b74297970dd09a5761
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Fri Sep 1 13:56:50 2023 -0400

    Readiness for #817
---
 .../karavan/kubernetes/KubernetesService.java      |   6 +-
 .../apache/camel/karavan/service/GiteaService.java | 136 +++++++++++++--------
 .../camel/karavan/service/ProjectService.java      |   5 +-
 karavan-web/karavan-infinispan/pom.xml             |   4 +
 .../karavan/infinispan/InfinispanService.java      |  17 ++-
 5 files changed, 109 insertions(+), 59 deletions(-)

diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
index f35a510a..90423baf 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java
@@ -128,12 +128,12 @@ public class KubernetesService implements HealthCheck {
     public HealthCheckResponse call() {
         if (ConfigService.inKubernetes()) {
             if (informers.size() == INFORMERS) {
-                return HealthCheckResponse.up("All Kubernetes informers are running.");
+                return HealthCheckResponse.named("kubernetes").withData("mode", "kubernetes").up().build();
             } else {
-                return HealthCheckResponse.down("kubernetes Informers are not running.");
+                return HealthCheckResponse.named("kubernetes").down().build();
             }
         } else {
-            return HealthCheckResponse.up("Running Kubernetesless.");
+            return HealthCheckResponse.named("kubernetes").withData("mode", "kubernetesless").up().build();
         }
     }
 
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java
index 6e8bc1be..2cd4c6ce 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GiteaService.java
@@ -29,6 +29,7 @@ import org.jboss.logging.Logger;
 
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 @ApplicationScoped
 public class GiteaService {
@@ -41,6 +42,8 @@ public class GiteaService {
     @Inject
     GitService gitService;
 
+    String token;
+
     WebClient webClient;
 
     private WebClient getWebClient() {
@@ -52,66 +55,93 @@ public class GiteaService {
 
     @Retry(maxRetries = 100, delay = 2000)
     public void install() throws Exception {
-            LOGGER.info("Install Gitea");
-            HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000").timeout(1000)
-                    .putHeader("Content-Type", "application/x-www-form-urlencoded")
-                    .sendBuffer(Buffer.buffer(
-                "db_type=sqlite3&db_host=localhost%3A3306&db_user=root&db_passwd=&db_name=gitea" +
-                        "&ssl_mode=disable&db_schema=&db_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Fgitea.db&app_name=Karavan" +
-                        "&repo_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Frepositories&lfs_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Flfs&run_user=git" +
-                        "&domain=localhost&ssh_port=2222&http_port=3000&app_url=http%3A%2F%2Flocalhost%3A3000%2F&log_root_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Flog" +
-                        "&smtp_addr=&smtp_port=&smtp_from=&smtp_user=&smtp_passwd=&enable_federated_avatar=on&enable_open_id_sign_in=on" +
-                        "&enable_open_id_sign_up=on&default_allow_create_organization=on&default_enable_timetracking=on" +
-                        "&no_reply_address=noreply.localhost&password_algorithm=pbkdf2&admin_name=&admin_email=&admin_passwd=&admin_confirm_passwd="
-                    ))
-                    .subscribeAsCompletionStage().toCompletableFuture().get();
-            if (result.statusCode() != 200 && result.statusCode() != 405) {
-                LOGGER.info("Gitea not ready");
-                throw new Exception("Gitea not ready");
-            }
-            LOGGER.info("Installed Gitea");
+        LOGGER.info("Install Gitea");
+        HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000").timeout(1000)
+                .putHeader("Content-Type", "application/x-www-form-urlencoded")
+                .sendBuffer(Buffer.buffer(
+                        "db_type=sqlite3&db_host=localhost%3A3306&db_user=root&db_passwd=&db_name=gitea" +
+                                "&ssl_mode=disable&db_schema=&db_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Fgitea.db&app_name=Karavan" +
+                                "&repo_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Frepositories&lfs_root_path=%2Fvar%2Flib%2Fgitea%2Fgit%2Flfs&run_user=git" +
+                                "&domain=localhost&ssh_port=2222&http_port=3000&app_url=http%3A%2F%2Flocalhost%3A3000%2F&log_root_path=%2Fvar%2Flib%2Fgitea%2Fdata%2Flog" +
+                                "&smtp_addr=&smtp_port=&smtp_from=&smtp_user=&smtp_passwd=&enable_federated_avatar=on&enable_open_id_sign_in=on" +
+                                "&enable_open_id_sign_up=on&default_allow_create_organization=on&default_enable_timetracking=on" +
+                                "&no_reply_address=noreply.localhost&password_algorithm=pbkdf2&admin_name=&admin_email=&admin_passwd=&admin_confirm_passwd="
+                ))
+                .subscribeAsCompletionStage().toCompletableFuture().get();
+        if (result.statusCode() != 200 && result.statusCode() != 405) {
+            LOGGER.info("Gitea not ready");
+            throw new Exception("Gitea not ready");
+        }
+        LOGGER.info("Installed Gitea");
     }
 
     @Retry(maxRetries = 100, delay = 2000)
     public void createRepository() throws Exception {
-            LOGGER.info("Creating Gitea Repository");
-            String token = generateToken();
-            HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000/api/v1/user/repos").timeout(500)
-                    .putHeader("Content-Type", "application/json")
-                    .bearerTokenAuthentication(token)
-                    .sendJsonObject(new JsonObject(Map.of(
-                            "auto_init", true,
-                            "default_branch", "main",
-                            "description", "karavan",
-                            "name", "karavan",
-                            "private", true
-                    )))
-                    .subscribeAsCompletionStage().toCompletableFuture().get();
-            if (result.statusCode() == 201) {
-                JsonObject res = result.bodyAsJsonObject();
-            } else {
-                LOGGER.info("Error creating Gitea repository");
-                throw new Exception("Error creating Gitea repository");
-            }
-            LOGGER.info("Created Gitea Repository");
+        LOGGER.info("Creating Gitea Repository");
+        String token = generateToken();
+        HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000/api/v1/user/repos").timeout(500)
+                .putHeader("Content-Type", "application/json")
+                .bearerTokenAuthentication(token)
+                .sendJsonObject(new JsonObject(Map.of(
+                        "auto_init", true,
+                        "default_branch", "main",
+                        "description", "karavan",
+                        "name", "karavan",
+                        "private", true
+                )))
+                .subscribeAsCompletionStage().toCompletableFuture().get();
+        if (result.statusCode() == 409 && result.bodyAsJsonObject().getString("message").contains("already exists")) {
+            JsonObject res = result.bodyAsJsonObject();
+            deleteToken("karavan");
+        } else if (result.statusCode() == 201) {
+            JsonObject res = result.bodyAsJsonObject();
+            deleteToken("karavan");
+        } else {
+            LOGGER.info("Error creating Gitea repository");
+            throw new Exception("Error creating Gitea repository");
+        }
+        LOGGER.info("Created Gitea Repository");
     }
 
     @Retry(maxRetries = 100, delay = 2000)
     protected String generateToken() throws Exception {
-            LOGGER.info("Creating Gitea User Token");
-            GitConfig config = gitService.getGitConfig();
-            HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000/api/v1/users/" + config.getUsername() + "/tokens").timeout(500)
-                    .putHeader("Content-Type", "application/json")
-                    .putHeader("accept", "application/json")
-                    .basicAuthentication(config.getUsername(), config.getPassword())
-                    .sendJsonObject(new JsonObject(Map.of("name", "karavan", "scopes", List.of("write:repository", "write:user"))))
-                    .subscribeAsCompletionStage().toCompletableFuture().get();
-            if (result.statusCode() == 201) {
-                JsonObject res = result.bodyAsJsonObject();
-                return res.getString("sha1");
-            } else {
-                LOGGER.info("Error getting token");
-                throw new Exception("Error getting token");
-            }
+        if (token != null) {
+            return token;
+        }
+        LOGGER.info("Creating Gitea User Token");
+        GitConfig config = gitService.getGitConfig();
+        HttpResponse<Buffer> result = getWebClient().postAbs("http://localhost:3000/api/v1/users/" + config.getUsername() + "/tokens").timeout(500)
+                .putHeader("Content-Type", "application/json")
+                .putHeader("accept", "application/json")
+                .basicAuthentication(config.getUsername(), config.getPassword())
+                .sendJsonObject(new JsonObject(
+                        Map.of("name", "karavan", "scopes", List.of("write:repository", "write:user")))
+                ).subscribeAsCompletionStage().toCompletableFuture().get();
+        if (result.statusCode() == 400) {
+            JsonObject res = result.bodyAsJsonObject();
+            return res.getString("sha1");
+        } else if (result.statusCode() == 201) {
+            JsonObject res = result.bodyAsJsonObject();
+            token = res.getString("sha1");
+            return token;
+        } else {
+            LOGGER.info("Error getting token");
+            throw new Exception("Error getting token");
+        }
+    }
+
+    protected void deleteToken(String token) throws Exception {
+        LOGGER.info("Deleting Gitea User Token");
+        GitConfig config = gitService.getGitConfig();
+        HttpResponse<Buffer> result = getWebClient()
+                .deleteAbs("http://localhost:3000/api/v1/users/" + config.getUsername() + "/tokens/" + token)
+                .timeout(500)
+                .putHeader("Content-Type", "application/json")
+                .putHeader("accept", "application/json")
+                .basicAuthentication(config.getUsername(), config.getPassword())
+                .send().subscribeAsCompletionStage().toCompletableFuture().get();
+        if (result.statusCode() == 204) {
+            LOGGER.info("Deleted Gitea User Token");
+        }
     }
 }
\ No newline at end of file
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index 5e9d9150..7dbdd75a 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -27,6 +27,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.eclipse.microprofile.faulttolerance.Retry;
 import org.eclipse.microprofile.health.HealthCheck;
 import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
 import org.eclipse.microprofile.health.Readiness;
 import org.jboss.logging.Logger;
 
@@ -69,10 +70,10 @@ public class ProjectService implements HealthCheck{
     @Override
     public HealthCheckResponse call() {
         if(ready.get()) {
-            return HealthCheckResponse.up("Git authentication is successfull.");
+            return HealthCheckResponse.named("project").up().build();
         }
         else {
-            return HealthCheckResponse.down("Git authentication is unsuccessfull. Check your git credentials.");
+            return HealthCheckResponse.named("project").down().build();
         }
     }
 
diff --git a/karavan-web/karavan-infinispan/pom.xml b/karavan-web/karavan-infinispan/pom.xml
index 72701f9c..d53524f7 100644
--- a/karavan-web/karavan-infinispan/pom.xml
+++ b/karavan-web/karavan-infinispan/pom.xml
@@ -43,6 +43,10 @@
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-smallrye-health</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-junit5</artifactId>
diff --git a/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java b/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
index 97e93d05..3ea2c584 100644
--- a/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
+++ b/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/InfinispanService.java
@@ -22,11 +22,15 @@ import io.smallrye.mutiny.tuples.Tuple2;
 import io.vertx.core.eventbus.EventBus;
 import io.vertx.core.json.JsonObject;
 import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.Default;
 import jakarta.inject.Inject;
 import jakarta.inject.Singleton;
 import org.apache.camel.karavan.infinispan.model.*;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.eclipse.microprofile.faulttolerance.Retry;
+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;
@@ -48,8 +52,10 @@ import java.util.stream.Collectors;
 
 import static org.infinispan.query.remote.client.ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME;
 
+@Default
+@Readiness
 @Singleton
-public class InfinispanService {
+public class InfinispanService implements HealthCheck {
 
     @ConfigProperty(name = "karavan.infinispan.hosts")
     String infinispanHosts;
@@ -423,4 +429,13 @@ public class InfinispanService {
             return null;
         }
     }
+
+    @Override
+    public HealthCheckResponse call() {
+        if (isReady()) {
+            return HealthCheckResponse.named("infinispan").up().build();
+        } else {
+            return HealthCheckResponse.named("infinispan").down().build();
+        }
+    }
 }