forked from lzjluzijie/websocks
/
stats.go
57 lines (50 loc) · 1.05 KB
/
stats.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
49
50
51
52
53
54
55
56
57
package core
import (
"sync"
"time"
)
//todo better stats
type Stats struct {
Downloaded uint64
DownloadSpeed uint64
downloadMutex sync.Mutex
downloadSpeedA uint64
Uploaded uint64
UploadSpeed uint64
uploadMutex sync.Mutex
uploadSpeedA uint64
}
func NewStats() (stats *Stats) {
stats = &Stats{}
go func() {
for range time.Tick(time.Second) {
stats.downloadMutex.Lock()
stats.DownloadSpeed = stats.downloadSpeedA
stats.downloadSpeedA = 0
stats.downloadMutex.Unlock()
}
}()
go func() {
for range time.Tick(time.Second) {
stats.uploadMutex.Lock()
stats.UploadSpeed = stats.uploadSpeedA
stats.uploadSpeedA = 0
stats.uploadMutex.Unlock()
}
}()
return
}
func (stats *Stats) AddDownloaded(downloaded uint64) {
stats.downloadMutex.Lock()
stats.Downloaded += downloaded
stats.downloadSpeedA += downloaded
stats.downloadMutex.Unlock()
return
}
func (stats *Stats) AddUploaded(uploaded uint64) {
stats.uploadMutex.Lock()
stats.Uploaded += uploaded
stats.uploadSpeedA += uploaded
stats.uploadMutex.Unlock()
return
}