log(dht) log a couple events to demonstrate API
License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>
Brian Tiger Chow committed
Nov 15, 2014 at 18:31 UTC
4b1607819f3cb9723c6b7d06beef2ed363fb68e1
5 files changed
+38
-5
peer/peer.go
+22
@@ -101,6 +101,8 @@ type Peer interface {
101
102
// Update with the data of another peer instance
103
Update(Peer) error
104
+
105
+ Loggable() map[string]interface{}
106
}
107
108
type Type uint8
@@ -112,6 +114,17 @@ const (
114
Remote
115
)
116
117
+func (t Type) String() string {
118
+ switch t {
119
+ case Local:
120
+ return "localPeer"
121
+ case Remote:
122
+ return "remotePeer"
123
+ default:
124
+ }
125
+ return "unspecifiedPeer"
126
+}
127
+
128
type peer struct {
129
id ID
130
addresses []ma.Multiaddr
@@ -145,6 +158,15 @@ func (p *peer) String() string {
158
return "[Peer " + pid[:maxRunes] + "]"
159
}
160
161
+func (p *peer) Loggable() map[string]interface{} {
162
+ return map[string]interface{}{
163
+ p.GetType().String(): map[string]interface{}{
164
+ "id": p.ID(),
165
+ "latency": p.GetLatency(),
166
+ },
167
+ }
168
+}
169
+
170
// Key returns the ID as a Key (string) for maps.
171
func (p *peer) Key() u.Key {
172
return u.Key(p.id)
routing/dht/dht.go
+4
-1
@@ -18,6 +18,7 @@ import (
18
kb "github.com/jbenet/go-ipfs/routing/kbucket"
19
u "github.com/jbenet/go-ipfs/util"
20
ctxc "github.com/jbenet/go-ipfs/util/ctxcloser"
21
+ "github.com/jbenet/go-ipfs/util/elog"
22
23
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
24
ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
@@ -25,7 +26,7 @@ import (
26
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
27
)
28
28
-var log = u.Logger("dht")
29
+var log = elog.Logger("dht")
30
31
const doPinging = false
32
@@ -152,6 +153,7 @@ func (dht *IpfsDHT) HandleMessage(ctx context.Context, mes msg.NetMessage) msg.N
153
dht.Update(mPeer)
154
155
// Print out diagnostic
156
+ log.Event(ctx, "foo", dht.self, mPeer, pmes)
157
log.Debugf("%s got message type: '%s' from %s",
158
dht.self, pb.Message_MessageType_name[int32(pmes.GetType())], mPeer)
159
@@ -197,6 +199,7 @@ func (dht *IpfsDHT) sendRequest(ctx context.Context, p peer.Peer, pmes *pb.Messa
199
start := time.Now()
200
201
// Print out diagnostic
202
+ log.Event(ctx, "sentMessage", dht.self, p, pmes)
203
log.Debugf("Sent message type: '%s' to %s",
204
pb.Message_MessageType_name[int32(pmes.GetType())], p)
205
routing/dht/pb/message.go
+8
@@ -65,3 +65,11 @@ func (m *Message) SetClusterLevel(level int) {
65
lvl := int32(level)
66
m.ClusterLevelRaw = &lvl
67
}
68
+
69
+func (m *Message) Loggable() map[string]interface{} {
70
+ return map[string]interface{}{
71
+ "message": map[string]string{
72
+ "type": m.Type.String(),
73
+ },
74
+ }
75
+}
util/elog/log.go
+3
-3
@@ -14,7 +14,7 @@ func init() {
14
15
type EventLogger interface {
16
StandardLogger
17
- Event(ctx context.Context, event string, m ...Metadata)
17
+ Event(ctx context.Context, event string, m ...Loggable)
18
}
19
20
type StandardLogger interface {
@@ -46,14 +46,14 @@ type eventLogger struct {
46
*logging.Logger
47
}
48
49
-func (el *eventLogger) Event(ctx context.Context, event string, metadata ...Metadata) {
49
+func (el *eventLogger) Event(ctx context.Context, event string, metadata ...Loggable) {
50
existing, err := MetadataFromContext(ctx)
51
if err != nil {
52
existing = Metadata{}
53
}
54
accum := existing
55
for _, datum := range metadata {
56
- accum = DeepMerge(accum, datum)
56
+ accum = DeepMerge(accum, datum.Loggable())
57
}
58
accum["event"] = event
59
util/elog/metadata.go
+1
-1
@@ -13,7 +13,7 @@ type Metadata map[string]interface{}
13
14
// Loggable describes objects that can be marshalled into Metadata for logging
15
type Loggable interface {
16
- Loggable() Metadata
16
+ Loggable() map[string]interface{}
17
}
18
19
// UniqueEvent returns a Metadata with the string key and UUID value