Skip to content

Commit

Permalink
refactor: use facade to initialize async, jdk and okhttp client
Browse files Browse the repository at this point in the history
Signed-off-by: moxiaoying <[email protected]>
Co-authored-by: ZhangJian He <[email protected]>
  • Loading branch information
CennyMo and ZhangJian He committed Sep 26, 2024
1 parent c05cf1d commit c307fc3
Show file tree
Hide file tree
Showing 15 changed files with 197 additions and 417 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.opengemini.client.api;

import io.github.shoothzj.http.facade.core.TlsConfig;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
package io.opengemini.client.api;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TlsConfig {
public String keyStorePath;

@ToString.Exclude
public char[] keyStorePassword;

public String trustStorePath;

@ToString.Exclude
public char[] trustStorePassword;

public boolean verifyDisabled;

public boolean hostnameVerifyDisabled;

public String[] versions;

public String[] cipherSuites;
}
//package io.opengemini.client.api;
//
//import lombok.AllArgsConstructor;
//import lombok.NoArgsConstructor;
//import lombok.Setter;
//import lombok.ToString;
//
//@Setter
//@NoArgsConstructor
//@AllArgsConstructor
//public class TlsConfig {
// public String keyStorePath;
//
// @ToString.Exclude
// public char[] keyStorePassword;
//
// public String trustStorePath;
//
// @ToString.Exclude
// public char[] trustStorePassword;
//
// public boolean verifyDisabled;
//
// public boolean hostnameVerifyDisabled;
//
// public String[] versions;
//
// public String[] cipherSuites;
//}
Original file line number Diff line number Diff line change
@@ -1,54 +1,49 @@
package io.opengemini.client.asynchttpclient;

import com.fasterxml.jackson.core.JsonProcessingException;
import io.github.shoothzj.http.facade.client.HttpClient;
import io.github.shoothzj.http.facade.client.HttpClientConfig;
import io.github.shoothzj.http.facade.client.HttpClientEngine;
import io.github.shoothzj.http.facade.client.HttpClientFactory;
import io.github.shoothzj.http.facade.core.HttpResponse;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpStatusClass;
import io.opengemini.client.api.AuthConfig;
import io.opengemini.client.api.AuthType;
import io.opengemini.client.api.OpenGeminiException;
import io.opengemini.client.api.Pong;
import io.opengemini.client.api.Query;
import io.opengemini.client.api.QueryResult;
import io.opengemini.client.common.BaseAsyncClient;
import io.opengemini.client.common.HeaderConst;
import io.opengemini.client.common.JacksonService;
import org.asynchttpclient.AsyncHttpClient;
import org.asynchttpclient.DefaultAsyncHttpClientConfig;
import org.asynchttpclient.Dsl;
import org.asynchttpclient.Response;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.CompletableFuture;

public class OpenGeminiAsyncHttpClient extends BaseAsyncClient {

private final AsyncHttpClient asyncHttpClient;
private final HttpClient asyncHttpClient;

public OpenGeminiAsyncHttpClient(@NotNull Configuration conf) {
super(conf);
this.asyncHttpClient = buildClient(conf);
}

private AsyncHttpClient buildClient(Configuration conf) {
DefaultAsyncHttpClientConfig.Builder builder = Dsl.config();
builder.setConnectTimeout(conf.getConnectTimeout())
.setReadTimeout(conf.getTimeout())
.setRequestTimeout(conf.getTimeout());

private HttpClient buildClient(Configuration conf) {
HttpClientConfig.Builder builder = new HttpClientConfig.Builder();
HttpClientConfig.Builder basicConfig =
builder.engine(HttpClientEngine.AsyncHttpClient).timeout(conf.getTimeout())
.connectTimeout(conf.getConnectTimeout());
AuthConfig authConfig = conf.getAuthConfig();

if (authConfig != null) {
configClientAuth(authConfig, builder);
configClientAuth(builder, authConfig);
}
return Dsl.asyncHttpClient(builder);
return HttpClientFactory.createHttpClient(basicConfig.build());
}

private static void configClientAuth(AuthConfig authConfig, DefaultAsyncHttpClientConfig.Builder builder) {
if (AuthType.PASSWORD == authConfig.getAuthType()) {
builder.addRequestFilter(
new BasicAuthRequestFilter(authConfig.getUsername(), String.valueOf(authConfig.getPassword())));
}
}

/**
* Execute a GET query call with AsyncHttpClient.
Expand All @@ -58,10 +53,8 @@ private static void configClientAuth(AuthConfig authConfig, DefaultAsyncHttpClie
@Override
protected CompletableFuture<QueryResult> executeQuery(Query query) {
String queryUrl = getQueryUrl(query);
CompletableFuture<Response> responseFuture = asyncHttpClient.prepareGet(nextUrlPrefix() + queryUrl)
.execute()
.toCompletableFuture();
return compose(responseFuture, QueryResult.class);
CompletableFuture<HttpResponse> resFuture = asyncHttpClient.get(buildUriWithPrefix(queryUrl));
return compose(resFuture, QueryResult.class);
}

/**
Expand All @@ -72,9 +65,7 @@ protected CompletableFuture<QueryResult> executeQuery(Query query) {
@Override
protected CompletableFuture<QueryResult> executePostQuery(Query query) {
String queryUrl = getQueryUrl(query);
CompletableFuture<Response> responseFuture = asyncHttpClient.preparePost(nextUrlPrefix() + queryUrl)
.execute()
.toCompletableFuture();
CompletableFuture<HttpResponse> responseFuture = asyncHttpClient.post(buildUriWithPrefix(queryUrl), null);
return compose(responseFuture, QueryResult.class);
}

Expand All @@ -87,10 +78,8 @@ protected CompletableFuture<QueryResult> executePostQuery(Query query) {
@Override
protected CompletableFuture<Void> executeWrite(String database, String lineProtocol) {
String writeUrl = getWriteUrl(database);
CompletableFuture<Response> responseFuture = asyncHttpClient.preparePost(nextUrlPrefix() + writeUrl)
.setBody(lineProtocol)
.execute()
.toCompletableFuture();
CompletableFuture<HttpResponse> responseFuture = asyncHttpClient.post(buildUriWithPrefix(writeUrl),
lineProtocol.getBytes(StandardCharsets.UTF_8));
return compose(responseFuture, Void.class);
}

Expand All @@ -100,16 +89,14 @@ protected CompletableFuture<Void> executeWrite(String database, String lineProto
@Override
protected CompletableFuture<Pong> executePing() {
String pingUrl = getPingUrl();
return asyncHttpClient.prepareGet(nextUrlPrefix() + pingUrl)
.execute()
.toCompletableFuture()
.thenApply(response -> new Pong(response.getHeader(HeaderConst.VERSION)));
return asyncHttpClient.get(buildUriWithPrefix(pingUrl))
.thenApply(response -> new Pong(response.headers().get(HeaderConst.VERSION).get(0)));
}

private <T> CompletableFuture<T> compose(CompletableFuture<Response> responseFuture, Class<T> type) {
private <T> CompletableFuture<T> compose(CompletableFuture<HttpResponse> responseFuture, Class<T> type) {
return responseFuture.thenCompose(response -> {
HttpResponseStatus responseStatus = HttpResponseStatus.valueOf(response.getStatusCode());
String responseBody = response.getResponseBody();
HttpResponseStatus responseStatus = HttpResponseStatus.valueOf(response.statusCode());
String responseBody = response.bodyAsString();

if (HttpStatusClass.SUCCESS == responseStatus.codeClass()) {
try {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package io.opengemini.client.common;

import io.github.shoothzj.http.facade.client.BasicAuthRequestFilter;
import io.github.shoothzj.http.facade.client.HttpClientConfig;
import io.opengemini.client.api.AuthConfig;
import io.opengemini.client.api.BaseConfiguration;
import io.opengemini.client.api.OpenGeminiAsyncClient;
import io.opengemini.client.api.Point;
Expand All @@ -20,6 +23,11 @@ public BaseAsyncClient(BaseConfiguration conf) {
super(conf);
}

protected void configClientAuth(HttpClientConfig.Builder builder, AuthConfig authConfig) {
builder.addRequestFilter(
new BasicAuthRequestFilter(authConfig.getUsername(), String.valueOf(authConfig.getPassword())));
}

/**
* {@inheritDoc}
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ protected String nextUrlPrefix() {
return serverUrls.get(idx).getUrl();
}

protected String buildUriWithPrefix(String url) {
return nextUrlPrefix() + url;
}

protected String encode(String str) {
try {
return URLEncoder.encode(str, StandardCharsets.UTF_8.name());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -23,7 +24,7 @@ public static String toJson(Object o) throws JsonProcessingException {
return MAPPER.writeValueAsString(o);
}

public static <T> T toObject(String json, Class<T> type) throws JsonProcessingException {
public static <T> T toObject(@Nullable String json, Class<T> type) throws JsonProcessingException {
if (json == null || json.isEmpty()) {
return null;
}
Expand Down
Loading

0 comments on commit c307fc3

Please sign in to comment.