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

com.ifountain.opsgenie.client.http.DefaultOpsgenieRequestRetryHandler Maven / Gradle / Ivy

package com.ifountain.opsgenie.client.http;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpRequest;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.RequestWrapper;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;

import java.io.IOException;

public class DefaultOpsgenieRequestRetryHandler implements OpsgenieRequestRetryHandler {
    private Log log = LogFactory.getLog(OpsGenieHttpClient.class);
    private int maxRetryCount;
    private long waitTime = 500;

    public DefaultOpsgenieRequestRetryHandler() {
        this(5);
    }

    public DefaultOpsgenieRequestRetryHandler(int maxRetryCount) {
        this.maxRetryCount = maxRetryCount;
    }

    public long getWaitTime() {
        return waitTime;
    }

    public void setWaitTime(long waitTime) {
        this.waitTime = waitTime;
    }

    public void setMaxRetryCount(int maxRetryCount) {
        this.maxRetryCount = maxRetryCount;
    }

    public int getMaxRetryCount() {
        return maxRetryCount;
    }

    @Override
    public boolean retryRequest(HttpRequest request, OpsGenieHttpResponse response, int executionCount) {
        return (response.getStatusCode() >= 500 || response.getStatusCode() == HttpStatus.SC_REQUEST_TIMEOUT) && retry(request, response, null, executionCount);
    }

    @Override
    public boolean retryRequest(IOException e, int executionCount, HttpContext httpContext) {
        HttpRequest request = (HttpRequest)httpContext.getAttribute(ExecutionContext.HTTP_REQUEST);
        return !requestIsAborted(request) && retry(request, null, e, executionCount);
    }

    /**
     * @since 4.2
     */
    protected boolean requestIsAborted(final HttpRequest request) {
        HttpRequest req = request;
        if (request instanceof RequestWrapper) { // does not forward request to original
            req = ((RequestWrapper) request).getOriginal();
        }
        return (req instanceof HttpUriRequest && ((HttpUriRequest)req).isAborted());
    }

    private boolean retry(HttpRequest request, OpsGenieHttpResponse response, IOException exception, int executionCount){
        if(executionCount > maxRetryCount){
            return false;
        }
        String uri = null;
        if(request.getRequestLine() != null){
            uri = request.getRequestLine().getUri();
        }
        request.getRequestLine().getUri();
        if(response != null){
            log.info("Retrying request ["+ uri +"] ResponseCode:["+response.getStatusCode()+"]. RetryCount " + executionCount);
        }
        else{
            log.info("Retrying request ["+ uri +"]. Reason:["+exception.getMessage()+"]. RetryCount " + executionCount);
        }
        try {
            Thread.sleep(pauseExp(executionCount));
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return true;
    }

    private long pauseExp(int retryCount){
        return retryCount * waitTime;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy