You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by dvsridhar <da...@cgifederal.com> on 2013/01/18 20:52:29 UTC

how to intercept route builder "to" route for audit logging

Hi,
We have to provide audit log for our http routes, for which, we host bunch
http proxy routes using servlet component which routes the request to the
provider using http producer. 

The following route does wireTap after "from" and  "to" routes. However,
when the wiretap finishes, i am getting the same from url in both logs.

In my HttpLogProcessor I am using the following snippet to obtain endpoint
URL. In both the logs I get the same from end point URL and the response
code is null in the first log where as i get the correct response code on
the second log. In nutshell it is not printing the "to" route end point URL.
I could enable trace that prints whole lot for audit log, so, we don't need
all that stuff. 

HttpLogProcessor
------------------------
*
Message in = exchange.getIn();
System.out.println(in.getHeader(Exchange.HTTP_URL),in.getHeader(Exchange.HTTP_RESPONSE_CODE));
*


Route
----------
				onException(Exception.class)
				.handled(true)
				.wireTap(direct:auditLog).end()
				.process(new ErrorProcessor());

				from("servlet://Proxy/Vendor/12345")
*				.wireTap(direct:auditLog).end();		*
				.process(new HttpHeaderProcessor())
				.routeId(routeId)
				.to("https://ProivderHost:6081/Provider/Vendor/12345")
				.process(new CleanupHeaderProcessor())		
*				.wireTap(direct:auditLog).end();		*

*				from(direct:auditLog).process(new HttpLogProcessor())
				.to(jms:queue:LOG_QUEUE);
*				
				from("jms:queue:LOG_QUEUE?concurrentConsumers=3")
				.bean(AuditLogProcessor.class,"log");		

*Expected Result:*
14:33:50,210 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
https://proxy-host:6081/Proxy/Vendor/12345,200

14:33:53,210,566 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
https://proxy-host:6081/Proxy/Vendor/12345,200

*But what we are getting the following Log Trace
------------
*
14:33:50,210 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
https://proxy-host:6081/Proxy/Vendor/12345,null

14:33:53,210,566 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
https://ProivderHost:6081/Provider/Vendor/12345,200


Wondering how to do this? Do I need to do some sort interceptors to achieve
this?

Any help appreciated.

Thanks,
Sridhar





--
View this message in context: http://camel.465427.n5.nabble.com/how-to-intercept-route-builder-to-route-for-audit-logging-tp5725791.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: how to intercept route builder "to" route for audit logging

Posted by dvsridhar <da...@cgifederal.com>.
If i have to be accurate than the following are my correct URI strings and
rest of the previous explanation remains the same.

from URI:
/servlet://Proxy/Vendor/12345/?matchOnUriPrefix=true&servletName=CamelServlet/
to URI:
/https://ProivderHost:6081/Provider/Vendor/12345/?bridgeEndpoint=true&throwExceptionOnFailure=true&matchOnUriPrefix=true
/

                               
from("servlet://Proxy/Vendor/12345/?matchOnUriPrefix=true&servletName=CamelServlet") 
                                .wireTap(direct:auditLog).end();	
                                .process(new HttpHeaderProcessor()) 
                                .routeId(routeId) 
                               
.to("https://ProivderHost:6081/Provider/Vendor/12345/?bridgeEndpoint=true&throwExceptionOnFailure=true&matchOnUriPrefix=true") 
                                .process(new CleanupHeaderProcessor())	
                                .wireTap(direct:auditLog).end();	




--
View this message in context: http://camel.465427.n5.nabble.com/how-to-intercept-route-builder-to-route-for-audit-logging-tp5725791p5725813.html
Sent from the Camel - Users mailing list archive at Nabble.com.

RE: how to intercept route builder "to" route for audit logging

Posted by dvsridhar <da...@cgifederal.com>.
Claus,
Probably I didn't explain the problem in much better way. For my audit logs due to security reasons we don't need to the print body information that's why I didn't enable the stream caching. Even otherwise I tried before as well as tried again (added streamCaching to the route) it is still not printing what i am expecting .  Please take a close look at the following "expected result and wire tap print" explanation. I am trying to create to http access log kind of audit logging. You can say why can't you enable that, well, our incoming urls are encrypted and so once the incoming URL passes through our security filter I felt routes will give me full control to log what i want.

Essentially, I was expecting the first wire tap to print proxy URL and its http response code and the second wire tap to print the Provider URL and its http response code. However, from both the wiretaps Camel is only printing proxy URLs and its response code.

What surprises me is after "to("provider url") why it is printing the from("proxy url") information.

Please let me know if I you have any quesitons.
Thanks,
Sridhar

As explained earlier, Our HttpLogProcessor contains the following log statement
------------------------ -----------------------------------------------------
 Message in = exchange.getIn();
 System.out.println(in.getHeader(Exchange.HTTP_URL),in.getHeader(Exchange.HTTP_RESPONSE_CODE));

Route DSL
--------
            from("servlet://Proxy/Vendor/12345")
.streamCaching()
                              .wireTap(direct:auditLog).end();        [ This wire tap prints : https://proxy-host:6081/Proxy/Vendor/12345 ,<https://proxy-host:6081/Proxy/Vendor/12345,> null<https://proxy-host:6081/Proxy/Vendor/12345,null>  where first one is proxy URL and the null is for HTTP response code] [Expected Result:    https://proxy-host:6081/Proxy/Vendor/12345 ,<https://proxy-host:6081/Proxy/Vendor/12345,> 200 ]
                                 .process(new HttpHeaderProcessor())
                                 .routeId(routeId)
                                 .to("https://ProivderHost:6081/Provider/Vendor/12345")
.streamCaching()
                                 .process(new CleanupHeaderProcessor())
                               .wireTap(direct:auditLog).end();      [ This wire tap prints : https://proxy-host:6081/Proxy/Vendor/12345 ,<https://proxy-host:6081/Proxy/Vendor/12345,> 2<https://proxy-host:6081/Proxy/Vendor/12345,null>00  where first one is proxy URL and the 200 is for HTTP response code] [Expected Result:    https://ProivderHost:6081/Provider/Vendor/12345 , 200<https://ProivderHost:6081/Provider/Vendor/12345,200> ]




________________________________
From: Claus Ibsen-2 [via Camel] [ml-node+s465427n5725798h40@n5.nabble.com]
Sent: Saturday, January 19, 2013 3:07 AM
To: Dabbeeru, Sridhar V (CGI Federal)
Subject: Re: how to intercept route builder "to" route for audit logging

Hi

See the blue box at
http://camel.apache.org/servlet

And this FAQ
http://camel.apache.org/why-is-my-message-body-empty.html

On Fri, Jan 18, 2013 at 8:52 PM, dvsridhar
<[hidden email]<UrlBlockedError.aspx>> wrote:

> Hi,
> We have to provide audit log for our http routes, for which, we host bunch
> http proxy routes using servlet component which routes the request to the
> provider using http producer.
>
> The following route does wireTap after "from" and  "to" routes. However,
> when the wiretap finishes, i am getting the same from url in both logs.
>
> In my HttpLogProcessor I am using the following snippet to obtain endpoint
> URL. In both the logs I get the same from end point URL and the response
> code is null in the first log where as i get the correct response code on
> the second log. In nutshell it is not printing the "to" route end point URL.
> I could enable trace that prints whole lot for audit log, so, we don't need
> all that stuff.
>
> HttpLogProcessor
> ------------------------
> *
> Message in = exchange.getIn();
> System.out.println(in.getHeader(Exchange.HTTP_URL),in.getHeader(Exchange.HTTP_RESPONSE_CODE));
> *
>
>
> Route
> ----------
>                                 onException(Exception.class)
>                                 .handled(true)
>                                 .wireTap(direct:auditLog).end()
>                                 .process(new ErrorProcessor());
>
>                                 from("servlet://Proxy/Vendor/12345")
> *                               .wireTap(direct:auditLog).end();                *
>                                 .process(new HttpHeaderProcessor())
>                                 .routeId(routeId)
>                                 .to("https://ProivderHost:6081/Provider/Vendor/12345")
>                                 .process(new CleanupHeaderProcessor())
> *                               .wireTap(direct:auditLog).end();                *
>
> *                               from(direct:auditLog).process(new HttpLogProcessor())
>                                 .to(jms:queue:LOG_QUEUE);
> *
>                                 from("jms:queue:LOG_QUEUE?concurrentConsumers=3")
>                                 .bean(AuditLogProcessor.class,"log");
>
> *Expected Result:*
> 14:33:50,210 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://proxy-host:6081/Proxy/Vendor/12345,200
>
> 14:33:53,210,566 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://proxy-host:6081/Proxy/Vendor/12345,200
>
> *But what we are getting the following Log Trace
> ------------
> *
> 14:33:50,210 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://proxy-host:6081/Proxy/Vendor/12345,null
>
> 14:33:53,210,566 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://ProivderHost:6081/Provider/Vendor/12345,200
>
>
> Wondering how to do this? Do I need to do some sort interceptors to achieve
> this?
>
> Any help appreciated.
>
> Thanks,
> Sridhar
>
>
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/how-to-intercept-route-builder-to-route-for-audit-logging-tp5725791.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



--
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: [hidden email]<UrlBlockedError.aspx>
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen


________________________________
If you reply to this email, your message will be added to the discussion below:
http://camel.465427.n5.nabble.com/how-to-intercept-route-builder-to-route-for-audit-logging-tp5725791p5725798.html
To unsubscribe from how to intercept route builder "to" route for audit logging, click here<http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5725791&code=ZGFiYmVlcnUudmVua2F0YS5zcmlkaGFyQGNnaWZlZGVyYWwuY29tfDU3MjU3OTF8LTYyMjUyMDIzNA==>.
NAML<http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>




--
View this message in context: http://camel.465427.n5.nabble.com/how-to-intercept-route-builder-to-route-for-audit-logging-tp5725791p5725812.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: how to intercept route builder "to" route for audit logging

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

See the blue box at
http://camel.apache.org/servlet

And this FAQ
http://camel.apache.org/why-is-my-message-body-empty.html

On Fri, Jan 18, 2013 at 8:52 PM, dvsridhar
<da...@cgifederal.com> wrote:
> Hi,
> We have to provide audit log for our http routes, for which, we host bunch
> http proxy routes using servlet component which routes the request to the
> provider using http producer.
>
> The following route does wireTap after "from" and  "to" routes. However,
> when the wiretap finishes, i am getting the same from url in both logs.
>
> In my HttpLogProcessor I am using the following snippet to obtain endpoint
> URL. In both the logs I get the same from end point URL and the response
> code is null in the first log where as i get the correct response code on
> the second log. In nutshell it is not printing the "to" route end point URL.
> I could enable trace that prints whole lot for audit log, so, we don't need
> all that stuff.
>
> HttpLogProcessor
> ------------------------
> *
> Message in = exchange.getIn();
> System.out.println(in.getHeader(Exchange.HTTP_URL),in.getHeader(Exchange.HTTP_RESPONSE_CODE));
> *
>
>
> Route
> ----------
>                                 onException(Exception.class)
>                                 .handled(true)
>                                 .wireTap(direct:auditLog).end()
>                                 .process(new ErrorProcessor());
>
>                                 from("servlet://Proxy/Vendor/12345")
> *                               .wireTap(direct:auditLog).end();                *
>                                 .process(new HttpHeaderProcessor())
>                                 .routeId(routeId)
>                                 .to("https://ProivderHost:6081/Provider/Vendor/12345")
>                                 .process(new CleanupHeaderProcessor())
> *                               .wireTap(direct:auditLog).end();                *
>
> *                               from(direct:auditLog).process(new HttpLogProcessor())
>                                 .to(jms:queue:LOG_QUEUE);
> *
>                                 from("jms:queue:LOG_QUEUE?concurrentConsumers=3")
>                                 .bean(AuditLogProcessor.class,"log");
>
> *Expected Result:*
> 14:33:50,210 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://proxy-host:6081/Proxy/Vendor/12345,200
>
> 14:33:53,210,566 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://proxy-host:6081/Proxy/Vendor/12345,200
>
> *But what we are getting the following Log Trace
> ------------
> *
> 14:33:50,210 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://proxy-host:6081/Proxy/Vendor/12345,null
>
> 14:33:53,210,566 INFO  [com.cgi.fdx.common.audit.log.AuditLogProcessor]
> https://ProivderHost:6081/Provider/Vendor/12345,200
>
>
> Wondering how to do this? Do I need to do some sort interceptors to achieve
> this?
>
> Any help appreciated.
>
> Thanks,
> Sridhar
>
>
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/how-to-intercept-route-builder-to-route-for-audit-logging-tp5725791.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen