-
Notifications
You must be signed in to change notification settings - Fork 3
/
stats.go
69 lines (56 loc) 路 1.64 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
58
59
60
61
62
63
64
65
66
67
68
69
package crawl
import (
"fmt"
"runtime"
"strconv"
"time"
"github.com/CorentinB/warc"
"github.com/dustin/go-humanize"
"github.com/gosuri/uilive"
"github.com/gosuri/uitable"
)
func bToMb(b uint64) uint64 {
return b / 1024 / 1024
}
func (c *Crawl) printLiveStats() {
var stats *uitable.Table
var m runtime.MemStats
writer := uilive.New()
writer.Start()
for {
runtime.ReadMemStats(&m)
stats = uitable.New()
stats.MaxColWidth = 80
stats.Wrap = true
crawledSeeds := c.CrawledSeeds.Value()
crawledAssets := c.CrawledAssets.Value()
stats.AddRow("", "")
stats.AddRow(" - Job:", c.Job)
stats.AddRow(" - State:", c.getCrawlState())
stats.AddRow(" - Active workers:", strconv.Itoa(int(c.ActiveWorkers.Value()))+"/"+strconv.Itoa(c.Workers))
stats.AddRow(" - URI/s:", c.URIsPerSecond.Rate())
stats.AddRow(" - Queued:", c.Frontier.QueueCount.Value())
stats.AddRow(" - Crawled total:", crawledSeeds+crawledAssets)
stats.AddRow(" - Crawled seeds:", crawledSeeds)
stats.AddRow(" - Crawled assets:", crawledAssets)
stats.AddRow(" - WARC writing queue:", c.Client.WaitGroup.Size())
stats.AddRow(" - Data:", humanize.Bytes(uint64(warc.DataTotal.Value())))
stats.AddRow("", "")
stats.AddRow(" - Elapsed time:", time.Since(c.StartTime).String())
stats.AddRow(" - Allocated (heap):", bToMb(m.Alloc))
stats.AddRow(" - Goroutines:", runtime.NumGoroutine())
stats.AddRow("", "")
fmt.Fprintln(writer, stats.String())
writer.Flush()
time.Sleep(time.Second * 1)
}
}
func (c *Crawl) getCrawlState() (state string) {
if c.Finished.Get() {
return "finishing"
}
if c.Paused.Get() {
return "paused"
}
return "running"
}