/
main.go
102 lines (96 loc) · 2.1 KB
/
main.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"flag"
"log"
"strconv"
"time"
old_datastore "github.com/alexgear/checker/datastore"
"github.com/alexgear/suplat/common"
"github.com/alexgear/suplat/config"
"github.com/alexgear/suplat/datastore"
"github.com/alexgear/suplat/worker"
)
var err error
func Migrate() {
iefs := []string{"lan", "wifi"}
go func() {
err = datastore.Flush()
if err != nil {
log.Fatalf("Failed to flush: %s", err.Error())
}
}()
for _, ief := range iefs {
log.Printf("Migrating %s...\n", ief)
data, err := old_datastore.Read(ief, 10000*time.Hour)
if err != nil {
log.Fatalf("Failed to read: %s", err.Error())
}
log.Println("Done reading")
var ops int
ticker := time.NewTicker(5 * time.Second)
go func() {
for _ = range ticker.C {
log.Printf("Writing %d points per second\n", ops/5)
ops = 0
}
}()
for t, status := range data {
ops += 1
point := common.Point{
Time: t,
Interface: ief,
}
p99 := strconv.FormatFloat(status.Percentile99, 'f', -1, 64)
point.Latency, err = time.ParseDuration(p99 + "s")
if err != nil {
log.Fatalf("Failed to parse duration:", err.Error())
}
if status.Uptime > 99.0 {
point.Error = 0
} else {
point.Error = 1
}
datastore.Write(point)
}
ticker.Stop()
}
}
func main() {
log.Printf("Suplat version %s, build %s", config.Version, config.BuildTime)
log.Println("Load flags...")
var migrate bool
flag.BoolVar(&migrate, "migrate", false, "help")
flag.Parse()
log.Println("Load config...")
err := config.InitConfig()
if err != nil {
log.Fatal(err)
}
if migrate {
log.Println("Init old DB...")
db, err := old_datastore.InitDB()
if err != nil {
log.Fatal(err)
}
defer db.Close()
log.Println("Init new DB...")
_, err = datastore.InitDB()
if err != nil {
log.Fatal(err)
}
log.Println("Migrating...")
Migrate()
log.Println("Waiting for migration to finish...")
time.Sleep(15 * time.Second)
} else {
log.Println("Init DB...")
_, err = datastore.InitDB()
if err != nil {
log.Fatal(err)
}
worker.InitWorker()
for {
time.Sleep(60 * time.Second)
}
}
}