code: func NewHandlerWrapper() server.HandlerWrapper {
  	return func(fn server.HandlerFunc) server.HandlerFunc {
  		return func(ctx context.Context, req server.Request, rsp interface{}) (err error) {
  			t := newRequestTracker(req, ServerProfile)
  			ctx = t.start(ctx, false)
  
  			defer func() { t.end(ctx, err) }()
  
  			spanCtx := getTraceFromCtx(ctx)
  			if spanCtx != nil {
  				ctx, t.span = trace.StartSpanWithRemoteParent(
  					ctx,
  					fmt.Sprintf("rpc/%s/%s/%s", ServerProfile.Role, req.Service(), req.Endpoint()),
  					*spanCtx,
  				)
  			} else {
  				ctx, t.span = trace.StartSpan(
  					ctx,
  					fmt.Sprintf("rpc/%s/%s/%s", ServerProfile.Role, req.Service(), req.Endpoint()),
  				)
  			}
  
  			err = fn(ctx, req, rsp)
  			return
  		}
  	}
  }
docs: // NewHandlerWrapper returns a server.HandlerWrapper
  // that adds tracing to incoming requests.