@@ -109,6 +109,39 @@ public ProxyRequestHandler(
109109 proxyResponseConfiguration = haGatewayConfiguration .getProxyResponseConfiguration ();
110110 }
111111
112+ private static Response handleProxyException (Request request , ProxyException e )
113+ {
114+ log .warn (e , "Proxy request failed: %s %s" , request .getMethod (), request .getUri ());
115+ throw badRequest (e .getMessage ());
116+ }
117+
118+ private static WebApplicationException badRequest (String message )
119+ {
120+ throw new WebApplicationException (
121+ Response .status (Response .Status .BAD_GATEWAY )
122+ .type (TEXT_PLAIN_TYPE )
123+ .entity (message )
124+ .build ());
125+ }
126+
127+ public static QueryHistoryManager .QueryDetail getQueryDetailsFromRequest (Request request , Optional <String > username )
128+ {
129+ QueryHistoryManager .QueryDetail queryDetail = new QueryHistoryManager .QueryDetail ();
130+ queryDetail .setBackendUrl (getRemoteTarget (request .getUri ()));
131+ queryDetail .setCaptureTime (System .currentTimeMillis ());
132+ username .ifPresent (queryDetail ::setUser );
133+ queryDetail .setSource (request .getHeader (SOURCE_HEADER ));
134+
135+ String queryText = new String (((StaticBodyGenerator ) request .getBodyGenerator ()).getBody (), UTF_8 );
136+ queryDetail .setQueryText (queryText );
137+ return queryDetail ;
138+ }
139+
140+ private static String getRemoteTarget (URI remoteUri )
141+ {
142+ return format ("%s://%s" , remoteUri .getScheme (), remoteUri .getAuthority ());
143+ }
144+
112145 @ PreDestroy
113146 public void shutdown ()
114147 {
@@ -188,9 +221,11 @@ private void performRequest(
188221
189222 FluentFuture <ProxyResponse > future = executeHttp (request );
190223
191- if (statementPaths .stream ().anyMatch (request .getUri ().getPath ()::startsWith ) && request .getMethod ().equals (HttpMethod .POST )) {
224+ if (statementPaths .stream ().anyMatch (request .getUri ().getPath ()::startsWith )
225+ && request .getMethod ().equals (HttpMethod .POST )) {
192226 Optional <String > username = trinoRequestUserProvider .getInstance (servletRequest ).getUser ();
193- future = future .transform (response -> recordBackendForQueryId (request , response , username , routingDestination ), executor );
227+ future = future .transform (
228+ response -> recordBackendForQueryId (request , response , username , routingDestination ), executor );
194229 if (includeClusterInfoInResponse ) {
195230 cookieBuilder .add (new NewCookie .Builder ("trinoClusterHost" ).value (remoteUri .getHost ()).build ());
196231 }
@@ -224,11 +259,6 @@ else if (servletRequest.getCookies() != null) {
224259 return ImmutableList .of ();
225260 }
226261
227- private static String getRemoteTarget (URI remoteUri )
228- {
229- return format ("%s://%s" , remoteUri .getScheme (), remoteUri .getAuthority ());
230- }
231-
232262 private Response buildResponse (ProxyResponse response , ImmutableList <NewCookie > cookie )
233263 {
234264 Response .ResponseBuilder builder = Response .status (response .statusCode ()).entity (response .body ());
@@ -249,22 +279,8 @@ private void setupAsyncResponse(AsyncResponse asyncResponse, ListenableFuture<Re
249279
250280 private FluentFuture <ProxyResponse > executeHttp (Request request )
251281 {
252- return FluentFuture .from (httpClient .executeAsync (request , new ProxyResponseHandler (proxyResponseConfiguration )));
253- }
254-
255- private static Response handleProxyException (Request request , ProxyException e )
256- {
257- log .warn (e , "Proxy request failed: %s %s" , request .getMethod (), request .getUri ());
258- throw badRequest (e .getMessage ());
259- }
260-
261- private static WebApplicationException badRequest (String message )
262- {
263- throw new WebApplicationException (
264- Response .status (Response .Status .BAD_GATEWAY )
265- .type (TEXT_PLAIN_TYPE )
266- .entity (message )
267- .build ());
282+ return FluentFuture
283+ .from (httpClient .executeAsync (request , new ProxyResponseHandler (proxyResponseConfiguration )));
268284 }
269285
270286 private ProxyResponse recordBackendForQueryId (Request request , ProxyResponse response , Optional <String > username ,
@@ -297,19 +313,6 @@ private ProxyResponse recordBackendForQueryId(Request request, ProxyResponse res
297313 return response ;
298314 }
299315
300- public static QueryHistoryManager .QueryDetail getQueryDetailsFromRequest (Request request , Optional <String > username )
301- {
302- QueryHistoryManager .QueryDetail queryDetail = new QueryHistoryManager .QueryDetail ();
303- queryDetail .setBackendUrl (getRemoteTarget (request .getUri ()));
304- queryDetail .setCaptureTime (System .currentTimeMillis ());
305- username .ifPresent (queryDetail ::setUser );
306- queryDetail .setSource (request .getHeader (SOURCE_HEADER ));
307-
308- String queryText = new String (((StaticBodyGenerator ) request .getBodyGenerator ()).getBody (), UTF_8 );
309- queryDetail .setQueryText (queryText );
310- return queryDetail ;
311- }
312-
313316 private void addXForwardedHeaders (HttpServletRequest servletRequest , Request .Builder requestBuilder )
314317 {
315318 requestBuilder .addHeader (X_FORWARDED_FOR , servletRequest .getRemoteAddr ());
0 commit comments