github.com/status-im/status-go@v1.1.0/wakuv2/tracer.go (about)

     1  package wakuv2
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/btcsuite/btcutil/base58"
     7  	pubsub_pb "github.com/libp2p/go-libp2p-pubsub/pb"
     8  
     9  	"go.uber.org/zap"
    10  )
    11  
    12  // Trace implements EventTracer interface.
    13  // We use custom logging, because we want to base58-encode the peerIDs. And also make the messageIDs readable.
    14  func (w *Waku) Trace(evt *pubsub_pb.TraceEvent) {
    15  
    16  	f := []zap.Field{
    17  		zap.String("type", evt.Type.String()),
    18  	}
    19  
    20  	encode := func(peerID []byte) string {
    21  		return base58.Encode(peerID)
    22  	}
    23  
    24  	encodeMeta := func(meta *pubsub_pb.TraceEvent_RPCMeta) []zap.Field {
    25  		if meta == nil {
    26  			return nil
    27  		}
    28  		var out []zap.Field
    29  		for i, msg := range meta.Messages {
    30  			out = append(out, zap.String(fmt.Sprintf("MessageID[%d]", i), encode(msg.GetMessageID())))
    31  			out = append(out, zap.Stringp(fmt.Sprintf("Topic[%d]", i), msg.Topic))
    32  		}
    33  		for i, sub := range meta.Subscription {
    34  			out = append(out, zap.Boolp(fmt.Sprintf("Subscribe[%d]", i), sub.Subscribe))
    35  			out = append(out, zap.Stringp(fmt.Sprintf("Topic[%d]", i), sub.Topic))
    36  		}
    37  		if meta.Control != nil {
    38  			out = append(out, zap.Any("Control", meta.Control))
    39  		}
    40  		return out
    41  	}
    42  
    43  	if evt.PublishMessage != nil {
    44  		f = append(f, zap.String("MessageID", encode(evt.PublishMessage.MessageID)))
    45  	}
    46  	if evt.RejectMessage != nil {
    47  		f = append(f, zap.String("MessageID", encode(evt.RejectMessage.MessageID)))
    48  	}
    49  	if evt.DuplicateMessage != nil {
    50  		f = append(f, zap.String("MessageID", encode(evt.DuplicateMessage.MessageID)))
    51  	}
    52  	if evt.DeliverMessage != nil {
    53  		f = append(f, zap.String("MessageID", encode(evt.DeliverMessage.MessageID)))
    54  	}
    55  
    56  	if evt.AddPeer != nil {
    57  		f = append(f, zap.String("PeerID", encode(evt.AddPeer.GetPeerID())))
    58  	}
    59  	if evt.RemovePeer != nil {
    60  		f = append(f, zap.String("PeerID", encode(evt.RemovePeer.GetPeerID())))
    61  	}
    62  
    63  	if evt.RecvRPC != nil {
    64  		f = append(f, zap.String("ReceivedFrom", encode(evt.RecvRPC.GetReceivedFrom())))
    65  		f = append(f, encodeMeta(evt.RecvRPC.Meta)...)
    66  	}
    67  	if evt.SendRPC != nil {
    68  		f = append(f, zap.String("SendTo", encode(evt.SendRPC.GetSendTo())))
    69  		f = append(f, encodeMeta(evt.SendRPC.Meta)...)
    70  	}
    71  	if evt.DropRPC != nil {
    72  		f = append(f, zap.String("SendTo", encode(evt.DropRPC.GetSendTo())))
    73  		f = append(f, encodeMeta(evt.DropRPC.Meta)...)
    74  	}
    75  
    76  	if evt.Join != nil {
    77  		f = append(f, zap.String("Topic", evt.Join.GetTopic()))
    78  	}
    79  	if evt.Leave != nil {
    80  		f = append(f, zap.String("Topic", evt.Leave.GetTopic()))
    81  	}
    82  	if evt.Graft != nil {
    83  		f = append(f, zap.String("PeerID", encode(evt.Graft.GetPeerID())))
    84  		f = append(f, zap.String("Topic", evt.Graft.GetTopic()))
    85  	}
    86  	if evt.Prune != nil {
    87  		f = append(f, zap.String("PeerID", encode(evt.Prune.GetPeerID())))
    88  		f = append(f, zap.String("Topic", evt.Prune.GetTopic()))
    89  	}
    90  
    91  	w.logger.With(f...).Debug("pubsub trace")
    92  }