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

com.yammer.metrics.httpclient.InstrumentedHttpClient Maven / Gradle / Ivy

package com.yammer.metrics.httpclient;

import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.TimerContext;
import com.yammer.metrics.core.Timer;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;

import java.io.IOException;

public class InstrumentedHttpClient extends DefaultHttpClient {
    private final static String GET = "GET", POST = "POST", HEAD = "HEAD", PUT = "PUT",
                                OPTIONS = "OPTIONS", DELETE = "DELETE", TRACE = "TRACE",
                                CONNECT = "CONNECT", MOVE = "MOVE", PATCH = "PATCH";

    private static final Timer GET_TIMER = Metrics.newTimer(HttpClient.class, "get-requests");
    private static final Timer POST_TIMER = Metrics.newTimer(HttpClient.class, "post-requests");
    private static final Timer HEAD_TIMER = Metrics.newTimer(HttpClient.class, "head-requests");
    private static final Timer PUT_TIMER = Metrics.newTimer(HttpClient.class, "put-requests");
    private static final Timer DELETE_TIMER = Metrics.newTimer(HttpClient.class, "delete-requests");
    private static final Timer OPTIONS_TIMER = Metrics.newTimer(HttpClient.class, "options-requests");
    private static final Timer TRACE_TIMER = Metrics.newTimer(HttpClient.class, "trace-requests");
    private static final Timer CONNECT_TIMER = Metrics.newTimer(HttpClient.class, "connect-requests");
    private static final Timer MOVE_TIMER = Metrics.newTimer(HttpClient.class, "move-requests");
    private static final Timer PATCH_TIMER = Metrics.newTimer(HttpClient.class, "patch-requests");
    private static final Timer OTHER_TIMER = Metrics.newTimer(HttpClient.class, "other-requests");

    public InstrumentedHttpClient(InstrumentedClientConnManager manager, HttpParams params) {
        super(manager, params);
    }

    public InstrumentedHttpClient(HttpParams params) {
        super(new InstrumentedClientConnManager(), params);
    }

    public InstrumentedHttpClient() {
        super(new InstrumentedClientConnManager());
    }

    @Override
    public  T execute(HttpUriRequest request,
                         ResponseHandler responseHandler) throws IOException {
        final TimerContext context = timer(request).time();
        try {
            return super.execute(request, responseHandler);
        } finally {
            context.stop();
        }
    }

    @Override
    public  T execute(HttpUriRequest request,
                         ResponseHandler responseHandler,
                         HttpContext ctxt) throws IOException {
        final TimerContext context = timer(request).time();
        try {
            return super.execute(request, responseHandler, ctxt);
        } finally {
            context.stop();
        }
    }

    @Override
    public  T execute(HttpHost target,
                         HttpRequest request,
                         ResponseHandler responseHandler) throws IOException {
        final TimerContext context = timer(request).time();
        try {
            return super.execute(target, request, responseHandler);
        } finally {
            context.stop();
        }
    }

    @Override
    public  T execute(HttpHost target,
                         HttpRequest request,
                         ResponseHandler responseHandler,
                         HttpContext ctxt) throws IOException {
        final TimerContext context = timer(request).time();
        try {
            return super.execute(target, request, responseHandler, ctxt);
        } finally {
            context.stop();
        }

    }

    private Timer timer(HttpRequest request) {
        final String method = request.getRequestLine().getMethod();
        if (GET.equalsIgnoreCase(method)) {
            return GET_TIMER;
        } else if (POST.equalsIgnoreCase(method)) {
            return POST_TIMER;
        } else if (PUT.equalsIgnoreCase(method)) {
            return PUT_TIMER;
        } else if (HEAD.equalsIgnoreCase(method)) {
            return HEAD_TIMER;
        } else if (DELETE.equalsIgnoreCase(method)) {
            return DELETE_TIMER;
        } else if (OPTIONS.equalsIgnoreCase(method)) {
            return OPTIONS_TIMER;
        } else if (TRACE.equalsIgnoreCase(method)) {
            return TRACE_TIMER;
        } else if (CONNECT.equalsIgnoreCase(method)) {
            return CONNECT_TIMER;
        } else if (PATCH.equalsIgnoreCase(method)) {
            return PATCH_TIMER;
        } else if (MOVE.equalsIgnoreCase(method)) {
            return MOVE_TIMER;
        }
        return OTHER_TIMER;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy