81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
// Package loggables includes a bunch of transaltor functions for commonplace/stdlib
|
|
// objects. This is boilerplate code that shouldn't change much, and not sprinkled
|
|
// all over the place (i.e. gather it here).
|
|
//
|
|
// Note: it may make sense to put all stdlib Loggable functions in the eventlog
|
|
// package. Putting it here for now in case we don't want to polute it.
|
|
package loggables
|
|
|
|
import (
|
|
"net"
|
|
|
|
uuid "github.com/google/uuid"
|
|
logging "github.com/ipfs/go-log"
|
|
"github.com/libp2p/go-libp2p-core/peer"
|
|
ma "github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
// NetConn returns an eventlog.Metadata with the conn addresses
|
|
func NetConn(c net.Conn) logging.Loggable {
|
|
return logging.Metadata{
|
|
"localAddr": c.LocalAddr(),
|
|
"remoteAddr": c.RemoteAddr(),
|
|
}
|
|
}
|
|
|
|
// Error returns an eventlog.Metadata with an error
|
|
func Error(e error) logging.Loggable {
|
|
return logging.Metadata{
|
|
"error": e.Error(),
|
|
}
|
|
}
|
|
|
|
func Uuid(key string) logging.Metadata {
|
|
ids := "#UUID-ERROR#"
|
|
if id, err := uuid.NewRandom(); err == nil {
|
|
ids = id.String()
|
|
}
|
|
return logging.Metadata{
|
|
key: ids,
|
|
}
|
|
}
|
|
|
|
// Dial metadata is metadata for dial events
|
|
func Dial(sys string, lid, rid peer.ID, laddr, raddr ma.Multiaddr) DeferredMap {
|
|
m := DeferredMap{}
|
|
m["subsystem"] = sys
|
|
if lid != "" {
|
|
m["localPeer"] = func() interface{} { return lid.Pretty() }
|
|
}
|
|
if laddr != nil {
|
|
m["localAddr"] = func() interface{} { return laddr.String() }
|
|
}
|
|
if rid != "" {
|
|
m["remotePeer"] = func() interface{} { return rid.Pretty() }
|
|
}
|
|
if raddr != nil {
|
|
m["remoteAddr"] = func() interface{} { return raddr.String() }
|
|
}
|
|
return m
|
|
}
|
|
|
|
// DeferredMap is a Loggable which may contain deferred values.
|
|
type DeferredMap map[string]interface{}
|
|
|
|
// Loggable describes objects that can be marshalled into Metadata for logging
|
|
func (m DeferredMap) Loggable() map[string]interface{} {
|
|
m2 := map[string]interface{}{}
|
|
for k, v := range m {
|
|
|
|
if vf, ok := v.(func() interface{}); ok {
|
|
// if it's a DeferredVal, call it.
|
|
m2[k] = vf()
|
|
|
|
} else {
|
|
// else use the value as is.
|
|
m2[k] = v
|
|
}
|
|
}
|
|
return m2
|
|
}
|