forked from ipfs/go-bitswap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stat.go
48 lines (41 loc) · 1.07 KB
/
stat.go
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
40
41
42
43
44
45
46
47
48
package bitswap
import (
"sort"
cid "github.com/ipfs/go-cid"
)
// Stat is a struct that provides various statistics on bitswap operations
type Stat struct {
ProvideBufLen int
Wantlist []cid.Cid
Peers []string
BlocksReceived uint64
DataReceived uint64
BlocksSent uint64
DataSent uint64
DupBlksReceived uint64
DupDataReceived uint64
MessagesReceived uint64
}
// Stat returns aggregated statistics about bitswap operations
func (bs *Bitswap) Stat() (*Stat, error) {
st := new(Stat)
st.ProvideBufLen = len(bs.newBlocks)
st.Wantlist = bs.GetWantlist()
bs.counterLk.Lock()
c := bs.counters
st.BlocksReceived = c.blocksRecvd
st.DupBlksReceived = c.dupBlocksRecvd
st.DupDataReceived = c.dupDataRecvd
st.BlocksSent = c.blocksSent
st.DataSent = c.dataSent
st.DataReceived = c.dataRecvd
st.MessagesReceived = c.messagesRecvd
bs.counterLk.Unlock()
peers := bs.engine.Peers()
st.Peers = make([]string, 0, len(peers))
for _, p := range peers {
st.Peers = append(st.Peers, p.Pretty())
}
sort.Strings(st.Peers)
return st, nil
}