All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.springboot.httpclient5.actuator.ActuatorMetricExecChainHandler Maven / Gradle / Ivy

package io.github.springboot.httpclient5.actuator;

import java.io.IOException;

import org.apache.hc.client5.http.classic.ExecChain;
import org.apache.hc.client5.http.classic.ExecChain.Scope;
import org.apache.hc.client5.http.classic.ExecChainHandler;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpRequest;

import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import com.codahale.metrics.httpclient5.HttpClientMetricNameStrategy;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ActuatorMetricExecChainHandler implements ExecChainHandler {
	private final MetricRegistry registry;
	private final HttpClientMetricNameStrategy metricNameStrategy;
	private final String name;

	public ActuatorMetricExecChainHandler(MetricRegistry registry,
			HttpClientMetricNameStrategy metricNameStrategy) {
		this(registry, metricNameStrategy, null);
	}

	public ActuatorMetricExecChainHandler(MetricRegistry registry,
			HttpClientMetricNameStrategy metricNameStrategy, String name) {
		this.registry = registry;
		this.name = name;
		this.metricNameStrategy = metricNameStrategy;
	}

	@Override
	public ClassicHttpResponse execute(ClassicHttpRequest request, Scope scope, ExecChain chain)
			throws IOException, HttpException {

		final Timer.Context timerContext = timer(request).time();
		try {
			log.debug("before ActuatorMetricExecChainHandler.doExecute");
			return chain.proceed(request, scope);
		} catch (HttpException | IOException e) {
			meter(e).mark();
			throw e;
		} finally {
			log.debug("after ActuatorMetricExecChainHandler.doExecute");
			timerContext.stop();
		}
	}

	private Timer timer(HttpRequest request) {
		return registry.timer(metricNameStrategy.getNameFor(name, request));
	}

	private Meter meter(Exception e) {
		return registry.meter(metricNameStrategy.getNameFor(name, e));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy