Hi, Thanks Sandeep, I tried using the same dispatch but still there was no luck I got this exception:
2018-07-24 14:23:51,128 DEBUG hadoop.gateway (UrlRewriteProcessor.java:rewrite(166)) - Rewrote URL: https://192.168.134.119:8443/gateway/default/grafana/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&appId=ambari_server&instanceId=&startTime=1532438630&endTime=1532442230&topN=5&topNFunction=max&isBottomN=false, direction: IN via explicit rule: GRAFANAUI/grafana/inbound/query to URL: http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%25._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532438630&endTime=1532442230&topNFunction=max&topN=5&isBottomN=false 2018-07-24 14:23:51,129 ERROR hadoop.gateway (AbstractGatewayFilter.java:doFilter(69)) - Failed to execute filter: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "._" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "._" at java.net.URLDecoder.decode(URLDecoder.java:194) at org.apache.hadoop.gateway.dispatch.PassAllHeadersNoEncodingDispatch.getDispatchUrl(PassAllHeadersNoEncodingDispatch.java:39) Is this because we are using Knox version v0.12 ? Regards Dhruv > On 24-Jul-2018, at 6:48 PM, Sandeep Moré <[email protected]> wrote: > > Hello Dhruv, > > In your service definition you might want to use the > PassAllHeadersNoEncodingDispatch > <https://github.com/apache/knox/blob/90d4339973870fbaa9c48eeae6896fefec95035d/gateway-adapter/src/main/java/org/apache/hadoop/gateway/dispatch/PassAllHeadersNoEncodingDispatch.java> > dispatch. > We have a Unit Test > <https://github.com/apache/knox/blob/64a762f531e87923d3b4ff10141b69ee78904b17/gateway-spi/src/test/java/org/apache/knox/gateway/dispatch/PassAllHeadersNoEncodingDispatchTest.java#L67> > for this case in case you want to test it out. > > Handling this in rewrite rules would be tricky, the dispatch route is pretty > simple and should work. > > Best, > Sandeep > > On Tue, Jul 24, 2018 at 5:14 AM Dhruv Goyal <[email protected] > <mailto:[email protected]>> wrote: > Hi, > > I am trying to integrate Knox with a custom service. > Knox version- v0.12 > > I have many rest calls which contain % as the special characters and I want > to integrate these calls with Knox. > > Examples: > 1./api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&appId=ambari_server&instanceId=&startTime=1532413786&endTime=1532417386&topN=5&topNFunction=max&isBottomN=false > > 2. > /api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Timer.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&appId=ambari_server&instanceId=&startTime=1532413786&endTime=1532417386&topN=5&topNFunction=max&isBottomN=false > > 3./api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.%.CacheMisses&hostname=platacc003-mst-01.gvs.ggn&appId=ambari_server&instanceId=&startTime=1532413786&endTime=1532417386&topN=5&topNFunction=max&isBottomN=false > > 4. > /api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=dfs.NNTopUserOpCounts.windowMs=300000.op=__%.user=%&hostname=%&appId=namenode&instanceId=&startTime=1532406804&endTime=1532417604 > > There other similar calls, here in all these calls we have `%` character in > query parameter, we are trying to use a single rule: > > <rule dir="IN" name="GRAFANAUI/grafana/inbound/timerq" > pattern="*://*:*/**/grafana/*/*/*/*/*/*/timeline/metrics?{metricNames=*%*}?{**}"> > <rewrite > template="{$serviceUrl[GRAFANAUI]}/api/datasources/proxy/1/ws/v1/timeline/metrics?{metricNames=*%2525*}?{**}"/> > </rule> > > In the rewrite template we are trying to replace % with %2525, this is > required since we are facing some url decoding issues. > > So we have the query parameter "metricNames” with pattern {metricNames=*%*} > which works, but in the rewrite template we are using {metricNames=*%2525*} > But this wildcard isnt working, is there some other wildcard which can be > used instead of ‘*’ in the rewrite template. > Or is there any other way in which we can avoid url decoder issue. > > > Exception observed: > > > 2018-07-23 06:47:39,276 DEBUG hadoop.gateway > (UrlRewriteProcessor.java:rewrite(166)) - Rewrote URL: > https://192.168.134.119:8443/gateway/default/grafana/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&appId=ambari_server&instanceId=&startTime=1532321602&endTime=1532325202&topN=5&topNFunction=max&isBottomN=false > > <https://192.168.134.119:8443/gateway/default/grafana/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&appId=ambari_server&instanceId=&startTime=1532321602&endTime=1532325202&topN=5&topNFunction=max&isBottomN=false>, > direction: IN via explicit rule: GRAFANAUI/grafana/inbound/query to URL: > http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%25._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532321602&endTime=1532325202&topNFunction=max&topN=5&isBottomN=false > > <http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%25._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532321602&endTime=1532325202&topNFunction=max&topN=5&isBottomN=false> > 2018-07-23 06:47:39,277 ERROR hadoop.gateway > (AbstractGatewayFilter.java:doFilter(69)) - Failed to execute filter: > java.lang.IllegalArgumentException: Malformed escape pair at index 118: > http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532321602&endTime=1532325202&topNFunction=max&topN=5&isBottomN=false > > <http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532321602&endTime=1532325202&topNFunction=max&topN=5&isBottomN=false> > java.lang.IllegalArgumentException: Malformed escape pair at index 118: > http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532321602&endTime=1532325202&topNFunction=max&topN=5&isBottomN=false > > <http://platacc003-mst-01.gvs.ggn:3000/api/datasources/proxy/1/ws/v1/timeline/metrics?metricNames=Counter.ReadAllQuery.%._rate&hostname=platacc003-mst-01.gvs.ggn&instanceId=&appId=ambari_server&startTime=1532321602&endTime=1532325202&topNFunction=max&topN=5&isBottomN=false> > at java.net.URI.create(URI.java:852) > at > org.apache.hadoop.gateway.dispatch.AbstractGatewayDispatch.getDispatchUrl(AbstractGatewayDispatch.java:88) > at > org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter$GetAdapter.doMethod(GatewayDispatchFilter.java:132) > at > org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter.doFilter(GatewayDispatchFilter.java:115) > at > org.apache.hadoop.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:61) > at > org.apache.hadoop.gateway.GatewayFilter$Holder.doFilter(GatewayFilter.java:332) > at > org.apache.hadoop.gateway.GatewayFilter$Chain.doFilter(GatewayFilter.java:232) > > > > > > Thanks & Regards > Dhruv Goyal
