@Override public Void onCompleted() { LOG.info("Proxying download of {} from Mesos: Completed.", requestBuilder.build().getUrl()); return null; }
@Override public STATE onStatusReceived(HttpResponseStatus responseStatus) { LOG.trace("Proxying download of {} from Mesos: Status={}", requestBuilder.build().getUrl(), responseStatus.getStatusCode()); return STATE.CONTINUE; }
@Override public STATE onHeadersReceived(HttpResponseHeaders headers) { LOG.trace("Proxying download of {} from Mesos: Headers={}", requestBuilder.build().getUrl(), headers.getHeaders()); return STATE.CONTINUE; }
private SingularityLoadBalancerUpdate sendRequestWrapper(LoadBalancerRequestId loadBalancerRequestId, LoadBalancerMethod method, Request request, BaragonRequestState onFailure) { final long start = System.currentTimeMillis(); final LoadBalancerUpdateHolder result = sendRequest(loadBalancerRequestId, request, onFailure); LOG.debug("LB {} request {} had result {} after {}", request.getMethod(), loadBalancerRequestId, result, JavaUtils.duration(start)); return new SingularityLoadBalancerUpdate(result.state, loadBalancerRequestId, result.message, start, method, Optional.of(request.getUrl())); }
/** * Invoke this API if you want to set the Range header on your {@link Request} based on the last valid bytes * position. * * @param request {@link Request} * @return a {@link Request} with the Range header properly set. */ public Request adjustRequestRange(Request request) { Long ri = resumableIndex.get(request.getUrl()); if (ri != null) { byteTransferred.set(ri); } // The Resumbale if (resumableListener != null && resumableListener.length() > 0 && byteTransferred.get() != resumableListener.length()) { byteTransferred.set(resumableListener.length()); } RequestBuilder builder = new RequestBuilder(request); if (request.getHeaders().get("Range").isEmpty() && byteTransferred.get() != 0) { builder.setHeader("Range", "bytes=" + byteTransferred.get() + "-"); } return builder.build(); }
private LoadBalancerUpdateHolder sendRequest(LoadBalancerRequestId loadBalancerRequestId, Request request, BaragonRequestState onFailure) { try { LOG.trace("Sending LB {} request for {} to {}", request.getMethod(), loadBalancerRequestId, request.getUrl()); ListenableFuture<Response> future = httpClient.executeRequest(request); Response response = future.get(loadBalancerTimeoutMillis, TimeUnit.MILLISECONDS); LOG.trace("LB {} request {} returned with code {}", request.getMethod(), loadBalancerRequestId, response.getStatusCode()); if (response.getStatusCode() == 504) { return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("LB %s request %s timed out", request.getMethod(), loadBalancerRequestId))); } else if (!JavaUtils.isHttpSuccess(response.getStatusCode())) { return new LoadBalancerUpdateHolder(onFailure, Optional.of(String.format("Response status code %s", response.getStatusCode()))); } BaragonResponse lbResponse = readResponse(response); return new LoadBalancerUpdateHolder(lbResponse.getLoadBalancerState(), lbResponse.getMessage()); } catch (TimeoutException te) { LOG.trace("LB {} request {} timed out after waiting {}", request.getMethod(), loadBalancerRequestId, JavaUtils.durationFromMillis(loadBalancerTimeoutMillis)); return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("Timed out after %s", JavaUtils.durationFromMillis(loadBalancerTimeoutMillis)))); } catch (Throwable t) { LOG.error("LB {} request {} to {} threw error", request.getMethod(), loadBalancerRequestId, request.getUrl(), t); return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("Exception %s - %s", t.getClass().getSimpleName(), t.getMessage()))); } }
@Override public String getUrl() { return delegate.getUrl(); }
/** Gets full decoded URL including query string. */ public static String getDecodedUrl(Request request) { String encoded = request.getUrl(); // getRawUrl() broken try { return URLDecoder.decode(encoded, "UTF-8"); } catch (UnsupportedEncodingException e) { return encoded; } }
@Override public Void onCompleted() { LOG.info("Proxying download of {} from Mesos: Completed.", requestBuilder.build().getUrl()); return null; }
@Override public STATE onStatusReceived(HttpResponseStatus responseStatus) { LOG.trace("Proxying download of {} from Mesos: Status={}", requestBuilder.build().getUrl(), responseStatus.getStatusCode()); return STATE.CONTINUE; }
@Override public STATE onHeadersReceived(HttpResponseHeaders headers) { LOG.trace("Proxying download of {} from Mesos: Headers={}", requestBuilder.build().getUrl(), headers.getHeaders()); return STATE.CONTINUE; }
private SingularityLoadBalancerUpdate sendRequestWrapper(LoadBalancerRequestId loadBalancerRequestId, LoadBalancerMethod method, Request request, BaragonRequestState onFailure) { final long start = System.currentTimeMillis(); final LoadBalancerUpdateHolder result = sendRequest(loadBalancerRequestId, request, onFailure); LOG.debug("LB {} request {} had result {} after {}", request.getMethod(), loadBalancerRequestId, result, JavaUtils.duration(start)); return new SingularityLoadBalancerUpdate(result.state, loadBalancerRequestId, result.message, start, method, Optional.of(request.getUrl())); }
@Override public void invoke() { LOG.info("Begin sending sync requests"); for (Request request : payloads) { try { Response response = asyncHttpClient.executeRequest(request).get(); if (response.getStatusCode() != 200 && response.getStatusCode() != 204) { LOG.warn("Status code: {}", response.getStatusCode()); LOG.warn("url: {}", request.getUrl()); LOG.warn(response.getResponseBody()); } } catch (InterruptedException | ExecutionException | IOException e) { LOG.warn(e.toString()); } } LOG.info("End sending sync requests"); } }
private LoadBalancerUpdateHolder sendRequest(LoadBalancerRequestId loadBalancerRequestId, Request request, BaragonRequestState onFailure) { try { LOG.trace("Sending LB {} request for {} to {}", request.getMethod(), loadBalancerRequestId, request.getUrl()); ListenableFuture<Response> future = httpClient.executeRequest(request); Response response = future.get(loadBalancerTimeoutMillis, TimeUnit.MILLISECONDS); LOG.trace("LB {} request {} returned with code {}", request.getMethod(), loadBalancerRequestId, response.getStatusCode()); if (response.getStatusCode() == 504) { return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("LB %s request %s timed out", request.getMethod(), loadBalancerRequestId))); } else if (!JavaUtils.isHttpSuccess(response.getStatusCode())) { return new LoadBalancerUpdateHolder(onFailure, Optional.of(String.format("Response status code %s", response.getStatusCode()))); } BaragonResponse lbResponse = readResponse(response); return new LoadBalancerUpdateHolder(lbResponse.getLoadBalancerState(), lbResponse.getMessage()); } catch (TimeoutException te) { LOG.trace("LB {} request {} timed out after waiting {}", request.getMethod(), loadBalancerRequestId, JavaUtils.durationFromMillis(loadBalancerTimeoutMillis)); return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("Timed out after %s", JavaUtils.durationFromMillis(loadBalancerTimeoutMillis)))); } catch (Throwable t) { LOG.error("LB {} request {} to {} threw error", request.getMethod(), loadBalancerRequestId, request.getUrl(), t); return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("Exception %s - %s", t.getClass().getSimpleName(), t.getMessage()))); } }
private void verifyRequestBuilderWrapperGeneratedAsExpected( RequestBuilderWrapper rbw, String url, String method, Optional<CircuitBreaker<Response>> customCb, boolean disableCb ) { assertThat(rbw.url).isEqualTo(url); assertThat(rbw.httpMethod).isEqualTo(method); assertThat(rbw.customCircuitBreaker).isEqualTo(customCb); assertThat(rbw.disableCircuitBreaker).isEqualTo(disableCb); Request req = rbw.requestBuilder.build(); assertThat(req.getMethod()).isEqualTo(method); assertThat(req.getUri()).isEqualTo(Uri.create(url)); assertThat(req.getUrl()).isEqualTo(url); assertThat(req.getNameResolver()).isEqualTo(MultiIpAwareNameResolver.INSTANCE); }
@Test(groups = {"standalone", "default_provider"}) public void testParsesQueryParams() throws IOException, ExecutionException, InterruptedException { Request request = new RequestBuilder("GET") .setUrl("http://foo.com/?param1=value1") .addQueryParam("param2", "value2") .build(); assertEquals(request.getUrl(), "http://foo.com/?param1=value1¶m2=value2"); List<Param> params = request.getQueryParams(); assertEquals(params.size(), 2); assertEquals(params.get(0), new Param("param1", "value1")); assertEquals(params.get(1), new Param("param2", "value2")); }
@Test(groups = {"standalone", "default_provider"}) public void testUserProvidedRequestMethod() { Request req = new RequestBuilder("ABC").setUrl("http://foo.com").build(); assertEquals(req.getMethod(), "ABC"); assertEquals(req.getUrl(), "http://foo.com"); }
@Test(groups = {"standalone", "default_provider"}) public void testPercentageEncodedUserInfo() { final Request req = new RequestBuilder("GET").setUrl("http://hello:wor%20ld@foo.com").build(); assertEquals(req.getMethod(), "GET"); assertEquals(req.getUrl(), "http://hello:wor%20ld@foo.com"); }
@Test(groups = {"standalone", "default_provider"}) public void testRawUrlQuery() throws UnsupportedEncodingException, URISyntaxException { String preEncodedUrl = "http://example.com/space%20mirror.php?%3Bteile"; RequestBuilder rb = new RequestBuilder("GET", true).setUrl(preEncodedUrl); Request request = rb.build(); assertEquals(request.getUrl(), preEncodedUrl); assertEquals(request.getUri().toJavaNetURI().toString(), preEncodedUrl); } }
@Test(groups = {"standalone", "default_provider"}) public void testAddQueryParameter() throws UnsupportedEncodingException { RequestBuilder rb = new RequestBuilder("GET", false).setUrl("http://example.com/path") .addQueryParam("a", "1?&") .addQueryParam("b", "+ ="); Request request = rb.build(); assertEquals(request.getUrl(), "http://example.com/path?a=1%3F%26&b=%2B%20%3D"); }