forked from mcuadros/harvester
-
Notifications
You must be signed in to change notification settings - Fork 0
/
harvesterd.go
87 lines (68 loc) · 1.74 KB
/
harvesterd.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package harvesterd
import (
"os"
"os/signal"
"runtime"
"syscall"
"time"
. "github.com/mcuadros/harvesterd/src/logger"
)
type Harvesterd struct {
writerGroup *WriterGroup
signsChannel chan os.Signal
isAlive bool
}
func NewHarvesterd() *Harvesterd {
harvesterd := new(Harvesterd)
return harvesterd
}
func (h *Harvesterd) Configure(filename string) {
GetConfig().LoadFile(filename)
}
func (h *Harvesterd) Boot() {
h.isAlive = true
h.configureLogger()
h.configureMaxProcs()
h.bootSignalWaiter()
h.bootWriter()
}
func (h *Harvesterd) bootSignalWaiter() {
h.signsChannel = make(chan os.Signal, 1)
signal.Notify(h.signsChannel, syscall.SIGINT, syscall.SIGTERM)
go h.signalWaiter()
}
func (h *Harvesterd) signalWaiter() {
signal := <-h.signsChannel
Warning("Received signal: %s", signal)
h.isAlive = false
}
func (h *Harvesterd) configureLogger() {
Info("Starting ...")
}
func (h *Harvesterd) configureMaxProcs() {
Info("Number of max. process %d", runtime.NumCPU())
runtime.GOMAXPROCS(runtime.NumCPU())
}
func (h *Harvesterd) bootWriter() {
h.writerGroup = GetContainer().GetWriterGroup()
}
func (h *Harvesterd) Run() {
h.writerGroup.Setup()
h.writerGroup.Boot()
h.wait()
h.writerGroup.Teardown()
}
func (h *Harvesterd) wait() {
for h.writerGroup.IsAlive() && h.isAlive {
time.Sleep(1 * time.Second)
h.PrintCounters(1)
}
Info("nothing more for read, terminating daemon ...")
}
func (h *Harvesterd) PrintCounters(elapsedSeconds int) {
created, failed, _, threads := h.writerGroup.GetCounters()
h.writerGroup.ResetCounters()
logFormat := "processed %d document(s), failed %d times(s), %g doc/sec in %d thread(s)"
rate := float64(created+failed) / float64(elapsedSeconds)
Info(logFormat, created, failed, rate, threads)
}