wormhole-explorer/contract-watcher/cmd/main.go

89 lines
3.0 KiB
Go

package main
import (
"github.com/spf13/cobra"
"github.com/wormhole-foundation/wormhole-explorer/contract-watcher/cmd/backfiller"
"github.com/wormhole-foundation/wormhole-explorer/contract-watcher/cmd/service"
"github.com/wormhole-foundation/wormhole-explorer/contract-watcher/config"
)
func main() {
execute()
}
func execute() error {
root := &cobra.Command{
Use: "contract-watcher",
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
service.Run()
}
},
}
addServiceCommand(root)
addBackfillerCommand(root)
return root.Execute()
}
func addServiceCommand(root *cobra.Command) {
serviceCommand := &cobra.Command{
Use: "service",
Short: "Run contract-watcher as service",
Run: func(_ *cobra.Command, _ []string) {
service.Run()
},
}
root.AddCommand(serviceCommand)
}
func addBackfillerCommand(parent *cobra.Command) {
var network, mongoUri, mongoDb, chainName, chainURL, logLevel string
var fromBlock, toBlock, pageSize uint64
var rateLimit int
var persistBlock bool
backfillerCommand := &cobra.Command{
Use: "backfiller",
Short: "Run backfiller to backfill data",
Run: func(c *cobra.Command, _ []string) {
cfg := &config.BackfillerConfiguration{
LogLevel: logLevel,
Network: network,
MongoURI: mongoUri,
MongoDatabase: mongoDb,
ChainName: chainName,
ChainUrl: chainURL,
FromBlock: fromBlock,
ToBlock: toBlock,
RateLimitPerSecond: rateLimit,
PageSize: pageSize,
PersistBlock: persistBlock,
}
backfiller.Run(cfg)
},
}
backfillerCommand.Flags().StringVar(&logLevel, "log-level", "INFO", "log level")
backfillerCommand.Flags().StringVar(&network, "network", "", "network (mainnet or testnet)")
backfillerCommand.Flags().StringVar(&mongoUri, "mongo-uri", "", "Mongo connection")
backfillerCommand.Flags().StringVar(&mongoDb, "mongo-database", "", "Mongo database")
backfillerCommand.Flags().StringVar(&chainName, "chain-name", "", "chain name")
backfillerCommand.Flags().StringVar(&chainURL, "chain-url", "", "chain URL")
backfillerCommand.Flags().Uint64Var(&fromBlock, "from", 0, "first block to be processed")
backfillerCommand.Flags().Uint64Var(&toBlock, "to", 0, "last block to be processed (included)")
backfillerCommand.Flags().IntVar(&rateLimit, "rate-limit", 3, "rate limit per second")
backfillerCommand.Flags().Uint64Var(&pageSize, "page-size", 100, "maximum number to process at one time")
backfillerCommand.Flags().BoolVar(&persistBlock, "persist-blocks", false, "persist processed blocks in storage")
backfillerCommand.MarkFlagRequired("network")
backfillerCommand.MarkFlagRequired("mongo-uri")
backfillerCommand.MarkFlagRequired("mongo-database")
backfillerCommand.MarkFlagRequired("chain-name")
backfillerCommand.MarkFlagRequired("chain-url")
backfillerCommand.MarkFlagRequired("from")
backfillerCommand.MarkFlagRequired("to")
parent.AddCommand(backfillerCommand)
}