github.com/yggdrasil-network/yggdrasil-go@v0.5.6/src/admin/getsessions.go (about) 1 package admin 2 3 import ( 4 "encoding/hex" 5 "net" 6 "sort" 7 "strings" 8 9 "github.com/yggdrasil-network/yggdrasil-go/src/address" 10 ) 11 12 type GetSessionsRequest struct{} 13 14 type GetSessionsResponse struct { 15 Sessions []SessionEntry `json:"sessions"` 16 } 17 18 type SessionEntry struct { 19 IPAddress string `json:"address"` 20 PublicKey string `json:"key"` 21 RXBytes DataUnit `json:"bytes_recvd"` 22 TXBytes DataUnit `json:"bytes_sent"` 23 Uptime float64 `json:"uptime"` 24 } 25 26 func (a *AdminSocket) getSessionsHandler(req *GetSessionsRequest, res *GetSessionsResponse) error { 27 sessions := a.core.GetSessions() 28 res.Sessions = make([]SessionEntry, 0, len(sessions)) 29 for _, s := range sessions { 30 addr := address.AddrForKey(s.Key) 31 res.Sessions = append(res.Sessions, SessionEntry{ 32 IPAddress: net.IP(addr[:]).String(), 33 PublicKey: hex.EncodeToString(s.Key[:]), 34 RXBytes: DataUnit(s.RXBytes), 35 TXBytes: DataUnit(s.TXBytes), 36 Uptime: s.Uptime.Seconds(), 37 }) 38 } 39 sort.SliceStable(res.Sessions, func(i, j int) bool { 40 return strings.Compare(res.Sessions[i].PublicKey, res.Sessions[j].PublicKey) < 0 41 }) 42 return nil 43 }