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