Coverage Report - org.kuali.maven.plugins.dnsme.HttpUtil
 
Classes in this File Line Coverage Branch Coverage Complexity
HttpUtil
67%
58/86
40%
4/10
2
HttpUtil$1
100%
1/1
N/A
2
 
 1  
 package org.kuali.maven.plugins.dnsme;
 2  
 
 3  
 import java.io.IOException;
 4  
 import java.io.InputStream;
 5  
 
 6  
 import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
 7  
 import org.apache.commons.httpclient.Header;
 8  
 import org.apache.commons.httpclient.HttpClient;
 9  
 import org.apache.commons.httpclient.HttpMethod;
 10  
 import org.apache.commons.httpclient.HttpMethodRetryHandler;
 11  
 import org.apache.commons.httpclient.methods.GetMethod;
 12  
 import org.apache.commons.httpclient.params.HttpClientParams;
 13  
 import org.apache.commons.httpclient.params.HttpMethodParams;
 14  
 import org.apache.commons.io.IOUtils;
 15  
 import org.slf4j.Logger;
 16  
 import org.slf4j.LoggerFactory;
 17  
 
 18  10
 public class HttpUtil {
 19  10
     private final Logger logger = LoggerFactory.getLogger(HttpUtil.class);
 20  10
     int requestTimeout = 8000;
 21  10
     int sleepInterval = 3000;
 22  10
     int timeout = 300;
 23  
 
 24  
     protected String getTimeout(long l) {
 25  5
         if (l == -1) {
 26  4
             return "";
 27  
         } else {
 28  1
             return " - (Timeout in " + l + "s)";
 29  
         }
 30  
     }
 31  
 
 32  
     public void log(String url, HttpRequestResult result, int secondsRemaining) {
 33  5
         StringBuilder sb = new StringBuilder();
 34  5
         sb.append("Status for '" + url + "' is '" + getMsg(result) + "'");
 35  5
         sb.append(getTimeout(secondsRemaining));
 36  5
         logger.info(sb.toString());
 37  5
     }
 38  
 
 39  
     protected String getMsg(HttpRequestResult result) {
 40  5
         switch (result.getType()) {
 41  
         case EXCEPTION:
 42  0
             Exception exception = result.getException();
 43  0
             return exception.getMessage();
 44  
         case COMPLETED:
 45  5
             int statusCode = result.getStatusCode();
 46  5
             String statusText = result.getStatusText();
 47  5
             return statusCode + ":" + statusText;
 48  
         case TIMEOUT:
 49  0
             return "Timeout exceeded";
 50  
         default:
 51  0
             throw new IllegalArgumentException(result.getType() + " is an unknown type");
 52  
         }
 53  
     }
 54  
 
 55  
     protected int getSecondsRemaining(long endMillis) {
 56  1
         long currentMillis = System.currentTimeMillis();
 57  1
         long millisRemaining = endMillis - currentMillis;
 58  1
         double secondsRemaining = millisRemaining / 1000D;
 59  1
         return (int) Math.ceil(secondsRemaining);
 60  
     }
 61  
 
 62  
     public HttpRequestResult doWait(String url) {
 63  1
         HttpClient client = getHttpClient();
 64  1
         long now = System.currentTimeMillis();
 65  1
         long timeoutMillis = timeout * 1000;
 66  1
         long end = now + timeoutMillis;
 67  1
         logger.info("Determining status for '" + url + "'");
 68  
         for (;;) {
 69  1
             HttpRequestResult result = executeMethod(client, url);
 70  1
             int secondsRemaining = getSecondsRemaining(end);
 71  1
             log(url, result, secondsRemaining);
 72  1
             if (HttpRequestResultType.COMPLETED.equals(result.getType())) {
 73  1
                 return result;
 74  
             }
 75  0
             if (System.currentTimeMillis() > end) {
 76  0
                 result.setType(HttpRequestResultType.TIMEOUT);
 77  0
                 log(url, result, -1);
 78  0
                 return result;
 79  
             }
 80  0
             sleep(sleepInterval);
 81  0
         }
 82  
     }
 83  
 
 84  
     public HttpClient getHttpClient() {
 85  6
         HttpClient client = new HttpClient();
 86  6
         HttpClientParams clientParams = client.getParams();
 87  6
         HttpMethodRetryHandler retryHandler = new DefaultHttpMethodRetryHandler(0, false);
 88  6
         clientParams.setParameter(HttpMethodParams.RETRY_HANDLER, retryHandler);
 89  6
         clientParams.setParameter(HttpMethodParams.SO_TIMEOUT, requestTimeout);
 90  6
         return client;
 91  
     }
 92  
 
 93  
     protected String getResponseBody(HttpMethod method) throws IOException {
 94  6
         InputStream in = null;
 95  
         try {
 96  6
             in = method.getResponseBodyAsStream();
 97  6
             return IOUtils.toString(in);
 98  
         } finally {
 99  6
             IOUtils.closeQuietly(in);
 100  
         }
 101  
     }
 102  
 
 103  
     public HttpRequestResult executeMethod(HttpMethod method) {
 104  4
         return executeMethod(getHttpClient(), method);
 105  
     }
 106  
 
 107  
     public HttpRequestResult executeMethod(HttpClient client, HttpMethod method) {
 108  6
         HttpRequestResult result = new HttpRequestResult();
 109  
         try {
 110  6
             client.executeMethod(method);
 111  6
             int statusCode = method.getStatusCode();
 112  6
             String statusText = method.getStatusText();
 113  6
             String responseBody = getResponseBody(method);
 114  6
             Header[] responseHeaders = method.getResponseHeaders();
 115  6
             method.releaseConnection();
 116  6
             result.setStatusCode(statusCode);
 117  6
             result.setStatusText(statusText);
 118  6
             result.setResponseBody(responseBody);
 119  6
             result.setResponseHeaders(responseHeaders);
 120  6
             result.setType(HttpRequestResultType.COMPLETED);
 121  0
         } catch (Exception e) {
 122  0
             result.setType(HttpRequestResultType.EXCEPTION);
 123  0
             result.setException(e);
 124  6
         }
 125  6
         return result;
 126  
     }
 127  
 
 128  
     public HttpRequestResult executeMethod(HttpClient client, String url) {
 129  1
         HttpMethod method = new GetMethod(url);
 130  1
         return executeMethod(client, method);
 131  
     }
 132  
 
 133  
     protected void sleep(long millis) {
 134  
         try {
 135  0
             Thread.sleep(millis);
 136  0
         } catch (InterruptedException e) {
 137  0
             throw new RuntimeException(e);
 138  0
         }
 139  0
     }
 140  
 
 141  
     public int getRequestTimeout() {
 142  0
         return requestTimeout;
 143  
     }
 144  
 
 145  
     public void setRequestTimeout(int requestTimeout) {
 146  0
         this.requestTimeout = requestTimeout;
 147  0
     }
 148  
 
 149  
     public int getSleepInterval() {
 150  0
         return sleepInterval;
 151  
     }
 152  
 
 153  
     public void setSleepInterval(int sleepInterval) {
 154  0
         this.sleepInterval = sleepInterval;
 155  0
     }
 156  
 
 157  
     public int getTimeout() {
 158  0
         return timeout;
 159  
     }
 160  
 
 161  
     public void setTimeout(int waitTimeout) {
 162  0
         this.timeout = waitTimeout;
 163  0
     }
 164  
 
 165  
     public Logger getLogger() {
 166  0
         return logger;
 167  
     }
 168  
 }