From 4b1607819f3cb9723c6b7d06beef2ed363fb68e1 Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow Date: Sat, 15 Nov 2014 18:31:06 -0800 Subject: [PATCH] log(dht) log a couple events to demonstrate API License: MIT Signed-off-by: Brian Tiger Chow --- peer/peer.go | 22 ++++++++++++++++++++++ routing/dht/dht.go | 5 ++++- routing/dht/pb/message.go | 8 ++++++++ util/elog/log.go | 6 +++--- util/elog/metadata.go | 2 +- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/peer/peer.go b/peer/peer.go index fcaadce3a..f38a2df21 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -101,6 +101,8 @@ type Peer interface { // Update with the data of another peer instance Update(Peer) error + + Loggable() map[string]interface{} } type Type uint8 @@ -112,6 +114,17 @@ const ( Remote ) +func (t Type) String() string { + switch t { + case Local: + return "localPeer" + case Remote: + return "remotePeer" + default: + } + return "unspecifiedPeer" +} + type peer struct { id ID addresses []ma.Multiaddr @@ -145,6 +158,15 @@ func (p *peer) String() string { return "[Peer " + pid[:maxRunes] + "]" } +func (p *peer) Loggable() map[string]interface{} { + return map[string]interface{}{ + p.GetType().String(): map[string]interface{}{ + "id": p.ID(), + "latency": p.GetLatency(), + }, + } +} + // Key returns the ID as a Key (string) for maps. func (p *peer) Key() u.Key { return u.Key(p.id) diff --git a/routing/dht/dht.go b/routing/dht/dht.go index efe457c65..1af4a29bd 100644 --- a/routing/dht/dht.go +++ b/routing/dht/dht.go @@ -18,6 +18,7 @@ import ( kb "github.com/jbenet/go-ipfs/routing/kbucket" u "github.com/jbenet/go-ipfs/util" ctxc "github.com/jbenet/go-ipfs/util/ctxcloser" + "github.com/jbenet/go-ipfs/util/elog" context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore" @@ -25,7 +26,7 @@ import ( "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto" ) -var log = u.Logger("dht") +var log = elog.Logger("dht") const doPinging = false @@ -152,6 +153,7 @@ func (dht *IpfsDHT) HandleMessage(ctx context.Context, mes msg.NetMessage) msg.N dht.Update(mPeer) // Print out diagnostic + log.Event(ctx, "foo", dht.self, mPeer, pmes) log.Debugf("%s got message type: '%s' from %s", dht.self, pb.Message_MessageType_name[int32(pmes.GetType())], mPeer) @@ -197,6 +199,7 @@ func (dht *IpfsDHT) sendRequest(ctx context.Context, p peer.Peer, pmes *pb.Messa start := time.Now() // Print out diagnostic + log.Event(ctx, "sentMessage", dht.self, p, pmes) log.Debugf("Sent message type: '%s' to %s", pb.Message_MessageType_name[int32(pmes.GetType())], p) diff --git a/routing/dht/pb/message.go b/routing/dht/pb/message.go index a77a5b917..6ea98d4cd 100644 --- a/routing/dht/pb/message.go +++ b/routing/dht/pb/message.go @@ -65,3 +65,11 @@ func (m *Message) SetClusterLevel(level int) { lvl := int32(level) m.ClusterLevelRaw = &lvl } + +func (m *Message) Loggable() map[string]interface{} { + return map[string]interface{}{ + "message": map[string]string{ + "type": m.Type.String(), + }, + } +} diff --git a/util/elog/log.go b/util/elog/log.go index dbe1914a0..27d76c2c5 100644 --- a/util/elog/log.go +++ b/util/elog/log.go @@ -14,7 +14,7 @@ func init() { type EventLogger interface { StandardLogger - Event(ctx context.Context, event string, m ...Metadata) + Event(ctx context.Context, event string, m ...Loggable) } type StandardLogger interface { @@ -46,14 +46,14 @@ type eventLogger struct { *logging.Logger } -func (el *eventLogger) Event(ctx context.Context, event string, metadata ...Metadata) { +func (el *eventLogger) Event(ctx context.Context, event string, metadata ...Loggable) { existing, err := MetadataFromContext(ctx) if err != nil { existing = Metadata{} } accum := existing for _, datum := range metadata { - accum = DeepMerge(accum, datum) + accum = DeepMerge(accum, datum.Loggable()) } accum["event"] = event diff --git a/util/elog/metadata.go b/util/elog/metadata.go index 22c8b2a2a..19357e76a 100644 --- a/util/elog/metadata.go +++ b/util/elog/metadata.go @@ -13,7 +13,7 @@ type Metadata map[string]interface{} // Loggable describes objects that can be marshalled into Metadata for logging type Loggable interface { - Loggable() Metadata + Loggable() map[string]interface{} } // UniqueEvent returns a Metadata with the string key and UUID value