2022-04-19 21:09:59 +00:00
|
|
|
/*
|
|
|
|
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
|
|
|
|
|
|
|
|
*/
|
|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
2022-04-22 16:27:54 +00:00
|
|
|
"os"
|
2022-04-26 17:57:01 +00:00
|
|
|
"time"
|
2022-04-22 16:27:54 +00:00
|
|
|
|
2022-04-19 21:09:59 +00:00
|
|
|
"github.com/spf13/cobra"
|
2022-04-22 16:27:54 +00:00
|
|
|
"github.com/spf13/viper"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2022-04-26 17:57:01 +00:00
|
|
|
dbUsername string
|
|
|
|
dbPassword string
|
|
|
|
dbName string
|
|
|
|
dbAddress string
|
|
|
|
dbDriver string
|
|
|
|
dbPort int
|
|
|
|
bcAddress string
|
|
|
|
bcPort int
|
2022-04-27 18:01:59 +00:00
|
|
|
bcConnectionProtocol string
|
2022-05-13 12:48:31 +00:00
|
|
|
bcType string
|
2022-05-12 19:44:05 +00:00
|
|
|
maxWaitSecondsShutdown time.Duration = time.Duration(5) * time.Second
|
|
|
|
notifierCh chan os.Signal = make(chan os.Signal, 1)
|
2022-05-13 12:48:31 +00:00
|
|
|
testDisregardSync bool
|
2022-04-19 21:09:59 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// captureCmd represents the capture command
|
|
|
|
var captureCmd = &cobra.Command{
|
|
|
|
Use: "capture",
|
2022-04-20 13:25:47 +00:00
|
|
|
Short: "Capture the SignedBeaconBlocks and BeaconStates from the Beacon Chain",
|
|
|
|
Long: `Capture SignedBeaconBlocks and BeaconStates from the Beacon Chain.
|
|
|
|
These blocks and states will be captured in
|
2022-04-20 22:12:44 +00:00
|
|
|
Postgres. They require a beacon client to be connected. You can run this to
|
2022-04-20 13:25:47 +00:00
|
|
|
capture blocks and states at head or historic blocks.`,
|
2022-04-19 21:09:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
rootCmd.AddCommand(captureCmd)
|
|
|
|
|
2022-04-22 16:27:54 +00:00
|
|
|
// Required Flags
|
|
|
|
|
|
|
|
//// DB Specific
|
|
|
|
captureCmd.PersistentFlags().StringVarP(&dbUsername, "db.username", "", "", "Database username (required)")
|
|
|
|
captureCmd.PersistentFlags().StringVarP(&dbPassword, "db.password", "", "", "Database Password (required)")
|
|
|
|
captureCmd.PersistentFlags().StringVarP(&dbAddress, "db.address", "", "", "Port to connect to DB(required)")
|
|
|
|
captureCmd.PersistentFlags().StringVarP(&dbName, "db.name", "n", "", "Database name connect to DB(required)")
|
|
|
|
captureCmd.PersistentFlags().StringVarP(&dbDriver, "db.driver", "", "", "Database Driver to connect to DB(required)")
|
|
|
|
captureCmd.PersistentFlags().IntVarP(&dbPort, "db.port", "", 0, "Port to connect to DB(required)")
|
|
|
|
err := captureCmd.MarkPersistentFlagRequired("db.username")
|
|
|
|
exitErr(err)
|
|
|
|
err = captureCmd.MarkPersistentFlagRequired("db.password")
|
|
|
|
exitErr(err)
|
|
|
|
err = captureCmd.MarkPersistentFlagRequired("db.address")
|
|
|
|
exitErr(err)
|
|
|
|
err = captureCmd.MarkPersistentFlagRequired("db.port")
|
|
|
|
exitErr(err)
|
|
|
|
err = captureCmd.MarkPersistentFlagRequired("db.name")
|
|
|
|
exitErr(err)
|
|
|
|
err = captureCmd.MarkPersistentFlagRequired("db.driver")
|
|
|
|
exitErr(err)
|
|
|
|
|
|
|
|
//// Beacon Client Specific
|
2022-05-13 12:48:31 +00:00
|
|
|
captureCmd.PersistentFlags().StringVarP(&bcAddress, "bc.address", "l", "", "Address to connect to beacon node (required)")
|
|
|
|
captureCmd.PersistentFlags().StringVarP(&bcType, "bc.type", "", "lighthouse", "The beacon client we are using, options are prysm and lighthouse.")
|
|
|
|
captureCmd.PersistentFlags().IntVarP(&bcPort, "bc.port", "r", 0, "Port to connect to beacon node (required )")
|
2022-04-27 18:01:59 +00:00
|
|
|
captureCmd.PersistentFlags().StringVarP(&bcConnectionProtocol, "bc.connectionProtocol", "", "http", "protocol for connecting to the beacon node.")
|
2022-04-22 16:27:54 +00:00
|
|
|
err = captureCmd.MarkPersistentFlagRequired("bc.address")
|
|
|
|
exitErr(err)
|
|
|
|
err = captureCmd.MarkPersistentFlagRequired("bc.port")
|
|
|
|
exitErr(err)
|
|
|
|
|
2022-05-13 12:48:31 +00:00
|
|
|
//// Testing Specific
|
|
|
|
captureCmd.PersistentFlags().BoolVar(&testDisregardSync, "t.skipSync", false, "Should we disregard the head sync?")
|
|
|
|
|
2022-04-22 16:27:54 +00:00
|
|
|
// Bind Flags with Viper
|
|
|
|
//// DB Flags
|
|
|
|
err = viper.BindPFlag("db.username", captureCmd.PersistentFlags().Lookup("db.username"))
|
|
|
|
exitErr(err)
|
|
|
|
err = viper.BindPFlag("db.password", captureCmd.PersistentFlags().Lookup("db.password"))
|
|
|
|
exitErr(err)
|
|
|
|
err = viper.BindPFlag("db.address", captureCmd.PersistentFlags().Lookup("db.address"))
|
|
|
|
exitErr(err)
|
|
|
|
err = viper.BindPFlag("db.port", captureCmd.PersistentFlags().Lookup("db.port"))
|
|
|
|
exitErr(err)
|
|
|
|
err = viper.BindPFlag("db.name", captureCmd.PersistentFlags().Lookup("db.name"))
|
|
|
|
exitErr(err)
|
2022-05-13 12:48:31 +00:00
|
|
|
err = viper.BindPFlag("t.skipSync", captureCmd.PersistentFlags().Lookup("t.skipSync"))
|
|
|
|
exitErr(err)
|
|
|
|
|
|
|
|
// Testing Specific
|
|
|
|
err = viper.BindPFlag("t.driver", captureCmd.PersistentFlags().Lookup("db.driver"))
|
2022-04-22 16:27:54 +00:00
|
|
|
exitErr(err)
|
|
|
|
|
|
|
|
// LH specific
|
|
|
|
err = viper.BindPFlag("bc.address", captureCmd.PersistentFlags().Lookup("bc.address"))
|
|
|
|
exitErr(err)
|
2022-05-13 12:48:31 +00:00
|
|
|
err = viper.BindPFlag("bc.type", captureCmd.PersistentFlags().Lookup("bc.type"))
|
|
|
|
exitErr(err)
|
2022-04-22 16:27:54 +00:00
|
|
|
err = viper.BindPFlag("bc.port", captureCmd.PersistentFlags().Lookup("bc.port"))
|
|
|
|
exitErr(err)
|
2022-04-27 18:01:59 +00:00
|
|
|
err = viper.BindPFlag("bc.connectionProtocol", captureCmd.PersistentFlags().Lookup("bc.connectionProtocol"))
|
|
|
|
exitErr(err)
|
2022-04-19 21:09:59 +00:00
|
|
|
// Here you will define your flags and configuration settings.
|
|
|
|
|
2022-04-22 16:27:54 +00:00
|
|
|
}
|
2022-04-19 21:09:59 +00:00
|
|
|
|
2022-04-22 16:27:54 +00:00
|
|
|
// Helper function to catch any errors.
|
|
|
|
// We need to capture these errors for the linter.
|
|
|
|
func exitErr(err error) {
|
|
|
|
if err != nil {
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
2022-04-19 21:09:59 +00:00
|
|
|
}
|