/
save.go
80 lines (60 loc) · 1.67 KB
/
save.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
// Copyright (c) 2018
// Author: Jeff Weisberg <jaw @ tcp4me.com>
// Created: 2018-Jul-03 11:43 (EST)
// Function: save server info
package main
import (
"time"
"github.com/jaw0/kibitz"
"github.com/jaw0/yentablue/info"
"github.com/jaw0/yentablue/proto"
)
func addServerInfo(res []*info.Server, w *acproto.ACPHeartBeat, isUp bool) []*info.Server {
ii := w.PeerInfo
dbName := make([]string, len(w.Database))
for i, dr := range w.Database {
dbName[i] = dr.Name
}
r := &info.Server{
Subsystem: ii.GetSubsystem(),
Environment: ii.GetEnvironment(),
Id: ii.GetServerId(),
Datacenter: ii.GetDatacenter(),
Rack: ii.GetRack(),
IsLocal: (ii.GetDatacenter() == pdb.Datacenter()),
Hostname: ii.GetHostname(),
TimeLastUp: ii.GetTimeLastUp(),
TimeUpSince: ii.GetTimeUpSince(),
IsUp: isUp,
SortMetric: w.GetSortMetric(),
CpuMetric: w.GetCpuMetric(),
CapacityMetric: w.GetCapacityMetric(),
Database: dbName,
Uptodate: w.GetUptodate(),
}
for _, n := range ii.NetInfo {
r.NetInfo = append(r.NetInfo, info.Net{Addr: n.GetAddr(), Dom: n.GetNatdom()})
}
return append(res, r)
}
func SaveServers(file string) error {
pwd := pdb.GetAll()
res := []*info.Server{}
for _, p := range pwd {
pd := p.GetData()
w := pd.(*acproto.ACPHeartBeat)
isUp := w.PeerInfo.GetStatusCode() == int32(kibitz.STATUS_UP)
res = addServerInfo(res, w, isUp)
}
res = addServerInfo(res, pdb.Myself().(*acproto.ACPHeartBeat), true)
return info.SaveJson(file, res)
}
func periodicSaveServerInfo(file string) {
if file == "" {
return
}
for {
time.Sleep(60 * time.Second)
SaveServers(file)
}
}