diag.go 830 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
package dht

import (
	"encoding/json"
	"time"

	peer "github.com/jbenet/go-ipfs/peer"
)

type connDiagInfo struct {
	Latency time.Duration
	Id peer.ID
}

type diagInfo struct {
	Id peer.ID
	Connections []connDiagInfo
	Keys []string
	LifeSpan time.Duration
	CodeVersion string
}

func (di *diagInfo) Marshal() []byte {
	b, err := json.Marshal(di)
	if err != nil {
		panic(err)
	}
	//TODO: also consider compressing this. There will be a lot of these
	return b
}


func (dht *IpfsDHT) getDiagInfo() *diagInfo {
	di := new(diagInfo)
	di.CodeVersion = "github.com/jbenet/go-ipfs"
	di.Id = dht.self.ID
	di.LifeSpan = time.Since(dht.birth)
	di.Keys = nil // Currently no way to query datastore

40
	for _,p := range dht.routes[0].Listpeers() {
41
		di.Connections = append(di.Connections, connDiagInfo{p.GetLatency(), p.ID})
42 43 44
	}
	return di
}