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