Skip to content

Commit 4d3216d

Browse files
committed
hum: add safe and finalized heights
Signed-off-by: bingyuyap <[email protected]>
1 parent bce4fa0 commit 4d3216d

File tree

3 files changed

+61
-10
lines changed

3 files changed

+61
-10
lines changed

fly/cmd/historical_uptime/main.go

+45-3
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,22 @@ var (
6868
[]string{"guardian", "chain"},
6969
)
7070

71+
guardianChainSafeHeight = promauto.NewGaugeVec(
72+
prometheus.GaugeOpts{
73+
Name: "guardian_chain_safe_height",
74+
Help: "Safe height of each guardian on each chain over time",
75+
},
76+
[]string{"guardian", "chain"},
77+
)
78+
79+
guardianChainFinalizedHeight = promauto.NewGaugeVec(
80+
prometheus.GaugeOpts{
81+
Name: "guardian_chain_finalized_height",
82+
Help: "Finalized height of each guardian on each chain over time",
83+
},
84+
[]string{"guardian", "chain"},
85+
)
86+
7187
guardianChainHeightDifferences = promauto.NewGaugeVec(
7288
prometheus.GaugeOpts{
7389
Name: "guardian_chain_height_differences",
@@ -143,7 +159,7 @@ func recordGuardianHeightDifferences() {
143159
chainName := vaa.ChainID(chainId).String()
144160

145161
for guardian, heightDifference := range guardianHeightDifferences {
146-
guardianChainHeightDifferences.WithLabelValues(guardian, chainName).Set(float64(heightDifference))
162+
guardianChainHeightDifferences.WithLabelValues(guardian, chainName).Set(float64(heightDifference.Latest))
147163
}
148164
}
149165
}
@@ -166,9 +182,11 @@ func initPromScraper(promRemoteURL string, logger *zap.Logger, errC chan error)
166182
for {
167183
select {
168184
case <-ctx.Done():
185+
logger.Info("Prometheus scraper context done")
169186
return nil
170187
case <-t.C:
171188
recordGuardianHeightDifferences()
189+
172190
for i := 1; i < 36; i++ {
173191
if i == PYTHNET_CHAIN_ID {
174192
continue
@@ -186,6 +204,7 @@ func initPromScraper(promRemoteURL string, logger *zap.Logger, errC chan error)
186204
guardianMissedObservations.WithLabelValues(guardianName, chainName).Add(0)
187205
}
188206
}
207+
189208
err := promremotew.ScrapeAndSendLocalMetrics(ctx, info, promLogger)
190209
if err != nil {
191210
promLogger.Error("ScrapeAndSendLocalMetrics error", zap.Error(err))
@@ -194,6 +213,8 @@ func initPromScraper(promRemoteURL string, logger *zap.Logger, errC chan error)
194213
}
195214
}
196215
})
216+
} else {
217+
logger.Warn("Prometheus remote write URL not provided, metrics will not be sent")
197218
}
198219
}
199220

@@ -387,13 +408,34 @@ func main() {
387408
guardianChainHeights[network.Id] = make(common.GuardianHeight)
388409
}
389410

390-
guardianChainHeights[network.Id][guardianName] = uint64(network.Height)
411+
guardianChainHeights[network.Id][guardianName] = common.HeightInfo{
412+
Latest: uint64(network.Height),
413+
Safe: uint64(network.SafeHeight),
414+
Finalized: uint64(network.FinalizedHeight),
415+
}
416+
417+
chain := vaa.ChainID(network.Id).String()
418+
391419
guardianChainHeight.With(
392420
prometheus.Labels{
393421
"guardian": guardianName,
394-
"chain": vaa.ChainID(network.Id).String(),
422+
"chain": chain,
395423
},
396424
).Set(float64(network.Height))
425+
426+
guardianChainSafeHeight.With(
427+
prometheus.Labels{
428+
"guardian": guardianName,
429+
"chain": chain,
430+
},
431+
).Set(float64(network.SafeHeight))
432+
433+
guardianChainFinalizedHeight.With(
434+
prometheus.Labels{
435+
"guardian": guardianName,
436+
"chain": chain,
437+
},
438+
).Set(float64(network.FinalizedHeight))
397439
}
398440

399441
guardianHeartbeats.With(

fly/common/types.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package common
22

3-
type GuardianHeight map[string]uint64 // map of guardian addr to chain height
3+
type HeightInfo struct {
4+
Latest uint64
5+
Safe uint64
6+
Finalized uint64
7+
}
8+
9+
type GuardianHeight map[string]HeightInfo // map of guardian addr to height info
410

511
type GuardianChainHeights map[uint32]GuardianHeight // map of chainIds to guardian heights
612

fly/pkg/historical_uptime/helpers.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ func computeMaxChainHeights(guardianChainHeights common.GuardianChainHeights) co
108108
for chainId, guardianHeights := range guardianChainHeights {
109109
highest := uint64(0)
110110

111-
for _, guardianHeight := range guardianHeights {
112-
if highest < guardianHeight {
113-
highest = guardianHeight
111+
for _, heightInfo := range guardianHeights {
112+
if highest < heightInfo.Latest {
113+
highest = heightInfo.Latest
114114
}
115115
}
116116

@@ -124,13 +124,16 @@ func computeGuardianChainHeightDifferences(guardianChainHeights common.GuardianC
124124
heightDifferences := make(common.GuardianChainHeights)
125125

126126
for chainId, guardianHeights := range guardianChainHeights {
127-
for guardian, height := range guardianHeights {
127+
for guardian, heightInfo := range guardianHeights {
128128
if heightDifferences[chainId] == nil {
129129
heightDifferences[chainId] = make(common.GuardianHeight)
130130
}
131131

132-
// maxChainHeights[chain] always guaranteed to be at least height since it's computed in `computeMaxChainHeights`
133-
heightDifferences[chainId][guardian] = maxChainHeights[chainId] - height
132+
heightDifferences[chainId][guardian] = common.HeightInfo{
133+
Latest: maxChainHeights[chainId] - heightInfo.Latest,
134+
Safe: 0, // We're not calculating differences for Safe
135+
Finalized: 0, // We're not calculating differences for Finalized
136+
}
134137
}
135138
}
136139

0 commit comments

Comments
 (0)