diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index c2901ad7..c33daf24 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -24,12 +24,14 @@ ext { lombok : '1.18.2', // Code gen sitemapgen4j : '1.0.6', // Sitemap generator for SEO jbcrypt : '0.4', // BCrypt salted hashing library - + okhttpMetrics : '0.4.0', // Metrics for OkHttp + junit : '4.12', // Unit Testing ] libs = [ okhttp : "com.squareup.okhttp3:okhttp:$versions.okhttp", okhttpUrlConnection : "com.squareup.okhttp3:okhttp-urlconnection:$versions.okhttp", + okhttpMetrics : "com.raskasa.metrics:metrics-okhttp:$versions.okhttpMetrics", loggingInterceptor : "com.squareup.okhttp3:logging-interceptor:$versions.okhttp", jacksonCore : "com.fasterxml.jackson.core:jackson-core:$versions.jackson", jacksonDatabind : "com.fasterxml.jackson.core:jackson-databind:$versions.jackson", diff --git a/stubbornjava-common/build.gradle b/stubbornjava-common/build.gradle index d3fff9f1..56382373 100644 --- a/stubbornjava-common/build.gradle +++ b/stubbornjava-common/build.gradle @@ -39,6 +39,7 @@ dependencies { compile libs.jooqCodegen compile libs.flyway compile libs.connectorj + compile libs.okhttpMetrics testCompile libs.junit testCompile libs.hsqldb diff --git a/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java b/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java index 9cbbbcab..9c420c1d 100644 --- a/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java +++ b/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java @@ -18,6 +18,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.raskasa.metrics.okhttp.InstrumentedOkHttpClients; + import okhttp3.Dispatcher; import okhttp3.Interceptor; import okhttp3.Interceptor.Chain; @@ -56,28 +58,37 @@ public static Interceptor getHeaderInterceptor(String name, String value) { }; } + public static OkHttpClient wrapWithMetircs(String name, OkHttpClient client) { + return InstrumentedOkHttpClients.create(Metrics.registry(), client, name); + } + // {{start:client}} - private static final OkHttpClient client; + private static final OkHttpClient globalClient; static { + globalClient = wrapWithMetircs("GlobalClient", defaultClientBuilder().build()); + } + + /* + * Global client that can be shared for common HTTP tasks. + */ + public static OkHttpClient globalClient() { + return globalClient; + } + + /* + * Global client base for extending defaults. + * This is the same as the global client but without metrics enabled yet. + */ + public static OkHttpClient.Builder defaultClientBuilder() { Dispatcher dispatcher = new Dispatcher(); dispatcher.setMaxRequestsPerHost(15); - client = new OkHttpClient.Builder() + return new OkHttpClient.Builder() .connectTimeout(2, TimeUnit.SECONDS) .writeTimeout(1, TimeUnit.MINUTES) .readTimeout(1, TimeUnit.MINUTES) .dispatcher(dispatcher) - .addNetworkInterceptor(loggingInterceptor) - .build(); - } - - ; - - /* - * Global client that can be shared for common HTTP tasks. - */ - public static OkHttpClient globalClient() { - return client; + .addNetworkInterceptor(loggingInterceptor); } // {{end:client}} @@ -87,7 +98,7 @@ public static OkHttpClient globalClient() { * a stateful cookie jar. This is useful when you need * to access password protected sites. */ - public static OkHttpClient newClientWithCookieJar() { + public static OkHttpClient newClientWithCookieJar(OkHttpClient client) { CookieManager cookieManager = new CookieManager(); cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); JavaNetCookieJar cookieJar = new JavaNetCookieJar(cookieManager); diff --git a/stubbornjava-common/src/main/java/com/stubbornjava/common/MetricsReporters.java b/stubbornjava-common/src/main/java/com/stubbornjava/common/MetricsReporters.java index 487d0ed7..e5d679f5 100644 --- a/stubbornjava-common/src/main/java/com/stubbornjava/common/MetricsReporters.java +++ b/stubbornjava-common/src/main/java/com/stubbornjava/common/MetricsReporters.java @@ -13,9 +13,9 @@ class MetricsReporters { public static void startReporters(MetricRegistry registry) { // Graphite reporter to Grafana Cloud - OkHttpClient client = new OkHttpClient.Builder() - //.addNetworkInterceptor(HttpClient.getLoggingInterceptor()) - .build(); + OkHttpClient client = HttpClient.wrapWithMetircs("GraphiteReporter", + new OkHttpClient.Builder() + .build()); String graphiteHost = Configs.properties().getString("metrics.graphite.host"); String grafanaApiKey = Configs.properties().getString("metrics.grafana.api_key"); diff --git a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/github/GitHubApi.java b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/github/GitHubApi.java index 0975a45e..deb30903 100644 --- a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/github/GitHubApi.java +++ b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/github/GitHubApi.java @@ -88,12 +88,12 @@ public Builder clientSecret(String clientSecret) { } public GitHubApi build() { - OkHttpClient client = HttpClient.globalClient() - .newBuilder() + OkHttpClient client = HttpClient.defaultClientBuilder() .addInterceptor(HttpClient.getHeaderInterceptor("Accept", VERSION_HEADER)) .addInterceptor(GitHubApi.gitHubAuth(clientId, clientSecret)) .build(); - return new GitHubApi(client); + OkHttpClient metricsClient = HttpClient.wrapWithMetircs("GithubApiClient", client); + return new GitHubApi(metricsClient); } }