Skip to content

Commit c99a51e

Browse files
committed
historical_uptime: update logic to use bigtable instead of badgerdb
Signed-off-by: bingyuyap <[email protected]>
1 parent ed5906d commit c99a51e

16 files changed

+888
-930
lines changed

fly/cmd/historical_uptime/main.go

+42-27
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ import (
2020
"github.com/prometheus/client_golang/prometheus"
2121
"github.com/prometheus/client_golang/prometheus/promauto"
2222
"github.com/wormhole-foundation/wormhole-monitor/fly/common"
23-
"github.com/wormhole-foundation/wormhole-monitor/fly/pkg/db"
23+
"github.com/wormhole-foundation/wormhole-monitor/fly/pkg/bigtable"
2424
"github.com/wormhole-foundation/wormhole-monitor/fly/pkg/historical_uptime"
25+
"github.com/wormhole-foundation/wormhole-monitor/fly/pkg/types"
2526
"github.com/wormhole-foundation/wormhole-monitor/fly/utils"
2627
"github.com/wormhole-foundation/wormhole/sdk/vaa"
2728
"go.uber.org/zap"
@@ -31,7 +32,6 @@ var (
3132
rootCtx context.Context
3233
rootCtxCancel context.CancelFunc
3334

34-
dataDir string
3535
p2pNetworkID string
3636
p2pPort uint
3737
p2pBootstrap string
@@ -40,6 +40,12 @@ var (
4040
ethRpcUrl string
4141
coreBridgeAddr string
4242
promRemoteURL string
43+
44+
gcpProjectId string
45+
useBigtableEmulator bool // only use this in local development
46+
bigTableEmulatorHost string = "" // required if using emulator
47+
gcpCredentialsFile string = "" // required if not using emulator
48+
bigTableInstanceId string
4349
)
4450

4551
var (
@@ -96,7 +102,6 @@ func loadEnvVars() {
96102
if err != nil {
97103
log.Fatal("Error loading .env file")
98104
}
99-
dataDir = verifyEnvVar("DATA_DIR")
100105
p2pNetworkID = verifyEnvVar("P2P_NETWORK_ID")
101106
port, err := strconv.ParseUint(verifyEnvVar("P2P_PORT"), 10, 32)
102107
if err != nil {
@@ -108,6 +113,18 @@ func loadEnvVars() {
108113
ethRpcUrl = verifyEnvVar("ETH_RPC_URL")
109114
coreBridgeAddr = verifyEnvVar("CORE_BRIDGE_ADDR")
110115
promRemoteURL = verifyEnvVar("PROM_REMOTE_URL")
116+
117+
gcpProjectId = verifyEnvVar("GCP_PROJECT_ID")
118+
bigTableInstanceId = verifyEnvVar("BIGTABLE_INSTANCE_ID")
119+
useBigtableEmulator, err = strconv.ParseBool(verifyEnvVar("USE_BIGTABLE_EMULATOR"))
120+
if err != nil {
121+
log.Fatal("Error parsing USE_BIGTABLE_EMULATOR")
122+
}
123+
if useBigtableEmulator {
124+
bigTableEmulatorHost = verifyEnvVar("BIGTABLE_EMULATOR_HOST")
125+
} else {
126+
gcpCredentialsFile = verifyEnvVar("GCP_CREDENTIALS_FILE")
127+
}
111128
}
112129

113130
func verifyEnvVar(key string) string {
@@ -180,7 +197,7 @@ func initPromScraper(promRemoteURL string, logger *zap.Logger, errC chan error)
180197
}
181198
}
182199

183-
func initObservationScraper(db *db.Database, logger *zap.Logger, errC chan error) {
200+
func initObservationScraper(db *bigtable.BigtableDB, logger *zap.Logger, errC chan error) {
184201
node_common.StartRunnable(rootCtx, errC, false, "observation_scraper", func(ctx context.Context) error {
185202
t := time.NewTicker(15 * time.Second)
186203

@@ -189,20 +206,35 @@ func initObservationScraper(db *db.Database, logger *zap.Logger, errC chan error
189206
case <-ctx.Done():
190207
return nil
191208
case <-t.C:
192-
messages, err := db.QueryMessagesByIndex(false, common.ExpiryDuration)
209+
messageObservations := make(map[types.MessageID][]*types.Observation)
210+
211+
messages, err := db.GetUnprocessedMessagesBeforeCutOffTime(ctx, time.Now().Add(-common.ExpiryDuration))
193212
if err != nil {
194213
logger.Error("QueryMessagesByIndex error", zap.Error(err))
195214
continue
196215
}
197216

217+
for _, message := range messages {
218+
observations, err := db.GetObservationsByMessageID(ctx, string(message.MessageID))
219+
if err != nil {
220+
logger.Error("GetObservationsByMessageID error",
221+
zap.Error(err),
222+
zap.String("messageId", string(message.MessageID)),
223+
)
224+
continue
225+
}
226+
227+
messageObservations[message.MessageID] = observations
228+
}
229+
198230
// Tally the number of messages for each chain
199231
messagesPerChain := historical_uptime.TallyMessagesPerChain(logger, messages)
200232

201233
// Initialize the missing observations count for each guardian for each chain
202234
guardianMissingObservations := historical_uptime.InitializeMissingObservationsCount(logger, messages, messagesPerChain)
203235

204236
// Decrement the missing observations count for each observed message
205-
historical_uptime.DecrementMissingObservationsCount(logger, guardianMissingObservations, messages)
237+
historical_uptime.DecrementMissingObservationsCount(logger, guardianMissingObservations, messageObservations)
206238

207239
// Update the metrics with the final count of missing observations
208240
historical_uptime.UpdateMetrics(guardianMissedObservations, guardianMissingObservations)
@@ -211,25 +243,6 @@ func initObservationScraper(db *db.Database, logger *zap.Logger, errC chan error
211243
})
212244
}
213245

214-
func initDatabaseCleanUp(db *db.Database, logger *zap.Logger, errC chan error) {
215-
node_common.StartRunnable(rootCtx, errC, false, "db_cleanup", func(ctx context.Context) error {
216-
t := time.NewTicker(common.DatabaseCleanUpInterval)
217-
218-
for {
219-
select {
220-
case <-ctx.Done():
221-
return nil
222-
case <-t.C:
223-
err := db.RemoveObservationsByIndex(true, common.ExpiryDuration)
224-
if err != nil {
225-
logger.Error("RemoveObservationsByIndex error", zap.Error(err))
226-
}
227-
}
228-
}
229-
})
230-
231-
}
232-
233246
func main() {
234247
loadEnvVars()
235248
p2pBootstrap = "/dns4/wormhole-v2-mainnet-bootstrap.xlabs.xyz/udp/8999/quic/p2p/12D3KooWNQ9tVrcb64tw6bNs2CaNrUGPM7yRrKvBBheQ5yCyPHKC,/dns4/wormhole.mcf.rocks/udp/8999/quic/p2p/12D3KooWDZVv7BhZ8yFLkarNdaSWaB43D6UbQwExJ8nnGAEmfHcU,/dns4/wormhole-v2-mainnet-bootstrap.staking.fund/udp/8999/quic/p2p/12D3KooWG8obDX9DNi1KUwZNu9xkGwfKqTp2GFwuuHpWZ3nQruS1"
@@ -283,12 +296,14 @@ func main() {
283296
}
284297
gst.Set(&gs)
285298

286-
db := db.OpenDb(logger, &dataDir)
299+
db, err := bigtable.NewBigtableDB(rootCtx, gcpProjectId, bigTableInstanceId, gcpCredentialsFile, bigTableEmulatorHost, useBigtableEmulator)
300+
if err != nil {
301+
logger.Fatal("Failed to create bigtable db", zap.Error(err))
302+
}
287303
promErrC := make(chan error)
288304
// Start Prometheus scraper
289305
initPromScraper(promRemoteURL, logger, promErrC)
290306
initObservationScraper(db, logger, promErrC)
291-
initDatabaseCleanUp(db, logger, promErrC)
292307

293308
go func() {
294309
for {

fly/common/consts.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
)
66

77
const (
8-
ExpiryDuration = 30 * time.Hour
8+
ExpiryDuration = 30 * time.Hour
99
DatabaseCleanUpInterval = 48 * time.Hour
1010

1111
MessageUpdateBatchSize = 100

0 commit comments

Comments
 (0)