-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
75 lines (65 loc) · 1.76 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
package corestate
import (
"sync"
"github.com/prometheus/client_golang/prometheus"
"github.com/lantah/go/protocols/gravity"
)
type State struct {
Synced bool
CurrentProtocolVersion int32
CoreSupportedProtocolVersion int32
CoreVersion string
}
type Store struct {
sync.RWMutex
state State
// metrics
Metrics struct {
CoreSynced prometheus.GaugeFunc
CoreSupportedProtocolVersion prometheus.GaugeFunc
}
}
func (c *Store) Set(resp *gravity.InfoResponse) {
c.Lock()
defer c.Unlock()
c.state.Synced = resp.IsSynced()
c.state.CoreVersion = resp.Info.Build
c.state.CurrentProtocolVersion = int32(resp.Info.Ledger.Version)
c.state.CoreSupportedProtocolVersion = int32(resp.Info.ProtocolVersion)
}
func (c *Store) SetState(state State) {
c.Lock()
defer c.Unlock()
c.state = state
}
func (c *Store) Get() State {
c.RLock()
defer c.RUnlock()
return c.state
}
func (c *Store) RegisterMetrics(registry *prometheus.Registry) {
c.Metrics.CoreSynced = prometheus.NewGaugeFunc(
prometheus.GaugeOpts{
Namespace: "orbitr", Subsystem: "gravity", Name: "synced",
Help: "determines if Gravity defined by --gravity-url is synced with the network",
},
func() float64 {
if c.Get().Synced {
return 1
} else {
return 0
}
},
)
registry.MustRegister(c.Metrics.CoreSynced)
c.Metrics.CoreSupportedProtocolVersion = prometheus.NewGaugeFunc(
prometheus.GaugeOpts{
Namespace: "orbitr", Subsystem: "gravity", Name: "supported_protocol_version",
Help: "determines the supported version of the protocol by Gravity defined by --gravity-url",
},
func() float64 {
return float64(c.Get().CoreSupportedProtocolVersion)
},
)
registry.MustRegister(c.Metrics.CoreSupportedProtocolVersion)
}