mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	add uptime and bytes sent/recvd to peer struct and getPeers
This commit is contained in:
		
							parent
							
								
									fdb826578f
								
							
						
					
					
						commit
						5c0636eb3d
					
				
					 2 changed files with 21 additions and 8 deletions
				
			
		| 
						 | 
					@ -10,6 +10,7 @@ import "net/url"
 | 
				
			||||||
import "sort"
 | 
					import "sort"
 | 
				
			||||||
import "strings"
 | 
					import "strings"
 | 
				
			||||||
import "strconv"
 | 
					import "strconv"
 | 
				
			||||||
 | 
					import "sync/atomic"
 | 
				
			||||||
import "time"
 | 
					import "time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO? Make all of this JSON
 | 
					// TODO? Make all of this JSON
 | 
				
			||||||
| 
						 | 
					@ -322,6 +323,9 @@ func (a *admin) getData_getPeers() []admin_nodeInfo {
 | 
				
			||||||
		info := admin_nodeInfo{
 | 
							info := admin_nodeInfo{
 | 
				
			||||||
			{"IP", net.IP(addr[:]).String()},
 | 
								{"IP", net.IP(addr[:]).String()},
 | 
				
			||||||
			{"port", fmt.Sprint(port)},
 | 
								{"port", fmt.Sprint(port)},
 | 
				
			||||||
 | 
								{"uptime", fmt.Sprint(time.Since(p.firstSeen))},
 | 
				
			||||||
 | 
								{"bytesSent", fmt.Sprint(atomic.LoadUint64(&p.bytesSent))},
 | 
				
			||||||
 | 
								{"bytesRecvd", fmt.Sprint(atomic.LoadUint64(&p.bytesRecvd))},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		peerInfos = append(peerInfos, info)
 | 
							peerInfos = append(peerInfos, info)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,7 +87,10 @@ type peer struct {
 | 
				
			||||||
	// Rolling approximation of bandwidth, in bps, used by switch, updated by packet sends
 | 
						// Rolling approximation of bandwidth, in bps, used by switch, updated by packet sends
 | 
				
			||||||
	// use get/update methods only! (atomic accessors as float64)
 | 
						// use get/update methods only! (atomic accessors as float64)
 | 
				
			||||||
	bandwidth  uint64
 | 
						bandwidth  uint64
 | 
				
			||||||
 | 
						bytesSent  uint64 // To track bandwidth usage for getPeers
 | 
				
			||||||
 | 
						bytesRecvd uint64 // To track bandwidth usage for getPeers
 | 
				
			||||||
	// BUG: sync/atomic, 32 bit platforms need the above to be the first element
 | 
						// BUG: sync/atomic, 32 bit platforms need the above to be the first element
 | 
				
			||||||
 | 
						firstSeen time.Time // To track uptime for getPeers
 | 
				
			||||||
	box       boxPubKey
 | 
						box       boxPubKey
 | 
				
			||||||
	sig       sigPubKey
 | 
						sig       sigPubKey
 | 
				
			||||||
	shared    boxSharedKey
 | 
						shared    boxSharedKey
 | 
				
			||||||
| 
						 | 
					@ -133,10 +136,12 @@ func (p *peer) updateBandwidth(bytes int, duration time.Duration) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (ps *peers) newPeer(box *boxPubKey,
 | 
					func (ps *peers) newPeer(box *boxPubKey,
 | 
				
			||||||
	sig *sigPubKey) *peer {
 | 
						sig *sigPubKey) *peer {
 | 
				
			||||||
 | 
						now := time.Now()
 | 
				
			||||||
	p := peer{box: *box,
 | 
						p := peer{box: *box,
 | 
				
			||||||
		sig:       *sig,
 | 
							sig:       *sig,
 | 
				
			||||||
		shared:    *getSharedKey(&ps.core.boxPriv, box),
 | 
							shared:    *getSharedKey(&ps.core.boxPriv, box),
 | 
				
			||||||
		lastAnc: time.Now(),
 | 
							lastAnc:   now,
 | 
				
			||||||
 | 
							firstSeen: now,
 | 
				
			||||||
		core:      ps.core}
 | 
							core:      ps.core}
 | 
				
			||||||
	ps.mutex.Lock()
 | 
						ps.mutex.Lock()
 | 
				
			||||||
	defer ps.mutex.Unlock()
 | 
						defer ps.mutex.Unlock()
 | 
				
			||||||
| 
						 | 
					@ -221,6 +226,8 @@ func (p *peer) linkLoop(in <-chan []byte) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *peer) handlePacket(packet []byte, linkIn chan<- []byte) {
 | 
					func (p *peer) handlePacket(packet []byte, linkIn chan<- []byte) {
 | 
				
			||||||
 | 
						// TODO See comment in sendPacket about atomics technically being done wrong
 | 
				
			||||||
 | 
						atomic.AddUint64(&p.bytesRecvd, uint64(len(packet)))
 | 
				
			||||||
	pType, pTypeLen := wire_decode_uint64(packet)
 | 
						pType, pTypeLen := wire_decode_uint64(packet)
 | 
				
			||||||
	if pTypeLen == 0 {
 | 
						if pTypeLen == 0 {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
| 
						 | 
					@ -277,6 +284,8 @@ func (p *peer) sendPacket(packet []byte) {
 | 
				
			||||||
	// Is there ever a case where something more complicated is needed?
 | 
						// Is there ever a case where something more complicated is needed?
 | 
				
			||||||
	// What if p.out blocks?
 | 
						// What if p.out blocks?
 | 
				
			||||||
	p.out(packet)
 | 
						p.out(packet)
 | 
				
			||||||
 | 
						// TODO this should really happen at the interface, to account for LIFO packet drops and additional per-packet/per-message overhead, but this should be pretty close... better to move it to the tcp/udp stuff *after* rewriting both to give a common interface
 | 
				
			||||||
 | 
						atomic.AddUint64(&p.bytesSent, uint64(len(packet)))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *peer) sendLinkPacket(packet []byte) {
 | 
					func (p *peer) sendLinkPacket(packet []byte) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue