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  }