From 9567446f5034b831ebfa75bc4e3b3f4f3f037249 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Mon, 21 May 2018 15:21:23 +0100 Subject: [PATCH] Offload formatting to yggdrasilctl and keep precision in JSON --- src/yggdrasil/admin.go | 17 ++++++----------- yggdrasilctl.go | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/yggdrasil/admin.go b/src/yggdrasil/admin.go index 98aceeda..b6bc7f38 100644 --- a/src/yggdrasil/admin.go +++ b/src/yggdrasil/admin.go @@ -434,17 +434,12 @@ func (a *admin) getData_getPeers() []admin_nodeInfo { for _, port := range ps { p := ports[port] addr := *address_addrForNodeID(getNodeID(&p.box)) - duration := time.Since(p.firstSeen) info := admin_nodeInfo{ {"ip", net.IP(addr[:]).String()}, {"port", port}, - {"uptime", fmt.Sprintf("%02d:%02d:%02d", - int(duration.Hours()), - int(duration.Minutes())%60, - int(duration.Seconds())%60, - )}, - {"bytes_sent", fmt.Sprintf("%d", atomic.LoadUint64(&p.bytesSent))}, - {"bytes_recvd", fmt.Sprintf("%d", atomic.LoadUint64(&p.bytesRecvd))}, + {"uptime", int(time.Since(p.firstSeen).Seconds())}, + {"bytes_sent", atomic.LoadUint64(&p.bytesSent)}, + {"bytes_recvd", atomic.LoadUint64(&p.bytesRecvd)}, } peerInfos = append(peerInfos, info) } @@ -486,7 +481,7 @@ func (a *admin) getData_getDHT() []admin_nodeInfo { {"coords", fmt.Sprint(v.coords)}, {"bucket", i}, {"peer_only", isPeer}, - {"last_seen", fmt.Sprintf("%ds", int(now.Sub(v.recv).Seconds()))}, + {"last_seen", int(now.Sub(v.recv).Seconds())}, } infos = append(infos, info) } @@ -509,8 +504,8 @@ func (a *admin) getData_getSessions() []admin_nodeInfo { {"coords", fmt.Sprint(sinfo.coords)}, {"mtu", sinfo.getMTU()}, {"was_mtu_fixed", sinfo.wasMTUFixed}, - {"bytes_sent", fmt.Sprintf("%d", sinfo.bytesSent)}, - {"bytes_recvd", fmt.Sprintf("%d", sinfo.bytesRecvd)}, + {"bytes_sent", sinfo.bytesSent}, + {"bytes_recvd", sinfo.bytesRecvd}, } infos = append(infos, info) } diff --git a/yggdrasilctl.go b/yggdrasilctl.go index 77c98fbc..693fd1f8 100644 --- a/yggdrasilctl.go +++ b/yggdrasilctl.go @@ -127,7 +127,20 @@ func main() { for slk, slv := range tlv.(map[string]interface{}) { fmt.Printf("%-"+fmt.Sprint(maxWidths["key"])+"s ", slk) for _, k := range keyOrder { - fmt.Printf("%-"+fmt.Sprint(maxWidths[k])+"s ", fmt.Sprint(slv.(map[string]interface{})[k])) + preformatted := slv.(map[string]interface{})[k] + var formatted string + switch k { + case "bytes_sent", "bytes_recvd": + formatted = fmt.Sprintf("%d", uint(preformatted.(float64))) + case "uptime", "last_seen": + seconds := uint(preformatted.(float64)) % 60 + minutes := uint(preformatted.(float64)/60) % 60 + hours := uint(preformatted.(float64) / 60 / 60) + formatted = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) + default: + formatted = fmt.Sprint(preformatted) + } + fmt.Printf("%-"+fmt.Sprint(maxWidths[k])+"s ", formatted) } fmt.Println() }