p2p/net: better dial log.Event
Juan Batiz-Benet committed
Jan 28, 2015 at 00:13 UTC
b4af146fc85b3fd4d9efcd9ceb84e7262285e060
2 files changed
+30
-9
p2p/net/conn/dial.go
+1
-2
@@ -28,6 +28,7 @@ func (d *Dialer) String() string {
28
// Example: d.DialAddr(ctx, peer.Addresses()[0], peer)
29
func (d *Dialer) Dial(ctx context.Context, raddr ma.Multiaddr, remote peer.ID) (Conn, error) {
30
logdial := lgbl.Dial("conn", d.LocalPeer, remote, nil, raddr)
31
+ logdial["encrypted"] = (d.PrivateKey != nil) // log wether this will be an encrypted dial or not.
32
defer log.EventBegin(ctx, "connDial", logdial).Done()
33
34
maconn, err := d.rawConnDial(ctx, raddr, remote)
@@ -53,12 +54,10 @@ func (d *Dialer) Dial(ctx context.Context, raddr ma.Multiaddr, remote peer.ID) (
54
55
if d.PrivateKey == nil {
56
log.Warning("dialer %s dialing INSECURELY %s at %s!", d, remote, raddr)
56
- log.Event(ctx, "connDialInsecure", logdial)
57
connOut = c
58
return
59
}
60
61
- defer log.EventBegin(ctx, "connDialEncrypt", logdial).Done()
61
c2, err := newSecureConn(ctx, d.PrivateKey, c)
62
if err != nil {
63
logdial["error"] = err
util/eventlog/loggables/loggables.go
+29
-7
@@ -32,19 +32,41 @@ func Error(e error) log.Loggable {
32
}
33
34
// Dial metadata is metadata for dial events
35
-func Dial(sys string, lid, rid peer.ID, laddr, raddr ma.Multiaddr) log.LoggableMap {
36
- m := log.Metadata{"subsystem": sys}
35
+func Dial(sys string, lid, rid peer.ID, laddr, raddr ma.Multiaddr) DeferredMap {
36
+ m := DeferredMap{}
37
+ m["subsystem"] = sys
38
if lid != "" {
38
- m["localPeer"] = lid.Pretty()
39
+ m["localPeer"] = func() interface{} { return lid.Pretty() }
40
+ _ = m["localPeer"].(func() interface{})
41
}
42
if laddr != nil {
41
- m["localAddr"] = laddr.String()
43
+ m["localAddr"] = func() interface{} { return laddr.String() }
44
}
45
if rid != "" {
44
- m["remotePeer"] = rid.Pretty()
46
+ m["remotePeer"] = func() interface{} { return rid.Pretty() }
47
}
48
if raddr != nil {
47
- m["remoteAddr"] = raddr.String()
49
+ m["remoteAddr"] = func() interface{} { return raddr.String() }
50
}
49
- return log.LoggableMap(m)
51
+ return m
52
+}
53
+
54
+// DeferredMap is a Loggable which may contained deffered values.
55
+type DeferredMap map[string]interface{}
56
+
57
+// Loggable describes objects that can be marshalled into Metadata for logging
58
+func (m DeferredMap) Loggable() map[string]interface{} {
59
+ m2 := map[string]interface{}{}
60
+ for k, v := range m {
61
+
62
+ if vf, ok := v.(func() interface{}); ok {
63
+ // if it's a DeferredVal, call it.
64
+ m2[k] = vf()
65
+
66
+ } else {
67
+ // else use the value as is.
68
+ m2[k] = v
69
+ }
70
+ }
71
+ return m2
72
}