/
coordinator.go
105 lines (88 loc) · 3.05 KB
/
coordinator.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
103
104
105
package prometheus
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/gohornet/hornet/pkg/model/coordinator"
"github.com/iotaledger/hive.go/events"
)
var (
coordinatorQuorumResponseTime prometheus.Histogram
coordinatorQuorumErrorCounter prometheus.Counter
coordinatorQuorumNodesResponseTimes *prometheus.HistogramVec
coordinatorQuorumNodesErrorCounters *prometheus.CounterVec
coordinatorSoftErrEncountered prometheus.Counter
)
func configureCoordinator() {
coordinatorQuorumResponseTime = prometheus.NewHistogram(
prometheus.HistogramOpts{
Namespace: "iota",
Subsystem: "coordinator",
Name: "quorum_duration",
Help: "Durations for complete quorum. [s]",
Buckets: prometheus.DefBuckets,
})
coordinatorQuorumErrorCounter = prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: "iota",
Subsystem: "coordinator",
Name: "quorum_error_counter",
Help: "Number encountered errors for complete quorum.",
})
coordinatorQuorumNodesResponseTimes = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "iota",
Subsystem: "coordinator",
Name: "quorum_nodes_response_times",
Help: "Latest response time by quorum client. [s]",
Buckets: prometheus.DefBuckets,
},
[]string{"group", "alias", "baseURL"},
)
coordinatorQuorumNodesErrorCounters = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: "iota",
Subsystem: "coordinator",
Name: "quorum_nodes_error_counters",
Help: "Number encountered errors by quorum client.",
},
[]string{"group", "alias", "baseURL"},
)
coordinatorSoftErrEncountered = prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: "iota",
Subsystem: "coordinator",
Name: "soft_error_count",
Help: "The coordinator's encountered soft error count.",
},
)
registry.MustRegister(coordinatorQuorumResponseTime)
registry.MustRegister(coordinatorQuorumErrorCounter)
registry.MustRegister(coordinatorQuorumNodesResponseTimes)
registry.MustRegister(coordinatorQuorumNodesErrorCounters)
registry.MustRegister(coordinatorSoftErrEncountered)
deps.Coordinator.Events.QuorumFinished.Attach(events.NewClosure(func(result *coordinator.QuorumFinishedResult) {
coordinatorQuorumResponseTime.Observe(result.Duration.Seconds())
if result.Err != nil {
coordinatorQuorumErrorCounter.Inc()
}
// get snapshot of last quorum stats
for _, entry := range deps.Coordinator.QuorumStats() {
labelsResponseTime := prometheus.Labels{
"group": entry.Group,
"alias": entry.Alias,
"baseURL": entry.BaseURL,
}
coordinatorQuorumNodesResponseTimes.With(labelsResponseTime).Observe(entry.ResponseTimeSeconds)
labelsErrorCounters := prometheus.Labels{
"group": entry.Group,
"alias": entry.Alias,
"baseURL": entry.BaseURL,
}
if entry.Error != nil {
coordinatorQuorumNodesErrorCounters.With(labelsErrorCounters).Inc()
}
}
}))
deps.Coordinator.Events.SoftError.Attach(events.NewClosure(func(_ error) {
coordinatorSoftErrEncountered.Inc()
}))
}