Zipkin support

Hi,

I think everyone heard of tracing technique and http://zipkin.io/
We created nameko-zipkin <https://github.com/fraglab/nameko-zipkin/>
package for zipkin integration.
Zipkin assumes tracing in 4 key points - client send, server receive,
server send, client receive.
Main problem of this package (but not the only one, huh) is that it only
reports 2 of them (server receive, server send) because of using
DependencyProvider for this.
For client annotations support changes must be made in
nameko.rpc.MethodProxy.__call__ and as for now I see only one possibility
to implement this in external package - code patching that does not seem
the right way.

Would be glad for any recommendations.

This is very cool! I have wanted to see Zipkin support in Nameko for a long
time.

I understand the problem of needing the clients to also send a tracing
point. Since Nameko is a pluggable framework, you probably want to support
adding this functionality into any client, not just the RPC proxy -- for
example, you'd want to see traces from services handling events, which
would require supporting the EventDispatcher DependencyProvider and the
standalone equivalent.

I would try to implement the tracing behaviour as a standalone function or
possibly class mixin, which could be pulled in to any DependencyProvider or
standalone client that initiates work in Nameko services. Anybody could
then add Zipkin support to their clients by superclassing the default
Nameko versions and adding your mixin / calling your function.

Unfortunately not all of the built-in Nameko classes make superclassing
easy, and the MethodProxy is a particularly bad example, but you can do it.

ยทยทยท

On Thursday, May 18, 2017 at 11:25:04 AM UTC+1, defat wrote:

Hi,

I think everyone heard of tracing technique and http://zipkin.io/
We created nameko-zipkin <https://github.com/fraglab/nameko-zipkin/>
package for zipkin integration.
Zipkin assumes tracing in 4 key points - client send, server receive,
server send, client receive.
Main problem of this package (but not the only one, huh) is that it only
reports 2 of them (server receive, server send) because of using
DependencyProvider for this.
For client annotations support changes must be made in
nameko.rpc.MethodProxy.__call__ and as for now I see only one possibility
to implement this in external package - code patching that does not seem
the right way.

Would be glad for any recommendations.