Skip to content

Commit

Permalink
add logging to file same as ssv
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelkrolevets committed Sep 20, 2023
1 parent aecffb6 commit 211e779
Show file tree
Hide file tree
Showing 20 changed files with 346 additions and 190 deletions.
44 changes: 44 additions & 0 deletions cli/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ const (
depositResultsPath = "depositResultsPath"
ssvPayloadResultsPath = "ssvPayloadResultsPath"
storeShare = "storeShare"
logLevel = "logLevel"
logFormat = "logFormat"
logLevelFormat = "logLevelFormat"
logFilePath = "logFilePath"
)

// ThresholdFlag adds threshold flag to the command
Expand Down Expand Up @@ -179,6 +183,46 @@ func GetOperatorPortFlagValue(c *cobra.Command) (uint64, error) {
return c.Flags().GetUint64(operatorPort)
}

// LogLevelFlag logger's log level flag to the command
func LogLevelFlag(c *cobra.Command) {
AddPersistentStringFlag(c, logLevel, "debug", "Defines logger's log level", false)
}

// GetLogLevelFlagValue gets logger's log level flag from the command
func GetLogLevelFlagValue(c *cobra.Command) (string, error) {
return c.Flags().GetString(logLevel)
}

// LogFormatFlag logger's logger's encoding flag to the command
func LogFormatFlag(c *cobra.Command) {
AddPersistentStringFlag(c, logFormat, "json", "Defines logger's encoding, valid values are 'json' (default) and 'console'", false)
}

// GetLogFormatFlagValue gets logger's encoding flag from the command
func GetLogFormatFlagValue(c *cobra.Command) (string, error) {
return c.Flags().GetString(logFormat)
}

// LogLevelFormatFlag logger's level format flag to the command
func LogLevelFormatFlag(c *cobra.Command) {
AddPersistentStringFlag(c, logLevelFormat, "capitalColor", "Defines logger's level format, valid values are 'capitalColor' (default), 'capital' or 'lowercase'", false)
}

// GetLogLevelFormatFlagValue gets logger's level format flag from the command
func GetLogLevelFormatFlagValue(c *cobra.Command) (string, error) {
return c.Flags().GetString(logLevelFormat)
}

// LogFilePathFlag file path to write logs into
func LogFilePathFlag(c *cobra.Command) {
AddPersistentStringFlag(c, logFilePath, "./data/debug.log", "Defines a file path to write logs into", false)
}

// GetLogFilePathValue gets logs file path flag from the command
func GetLogFilePathValue(c *cobra.Command) (string, error) {
return c.Flags().GetString(logFilePath)
}

// AddPersistentStringFlag adds a string flag to the command
func AddPersistentStringFlag(c *cobra.Command, flag string, value string, description string, isRequired bool) {
req := ""
Expand Down
2 changes: 1 addition & 1 deletion cli/initiator/generate_initiator_keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ var GenerateInitiatorKeysCmd = &cobra.Command{
Short: "generates RSA initiator keys",
Run: func(cmd *cobra.Command, args []string) {
logger := zap.L().Named(cmd.Short)
if err := logging.SetGlobalLogger("debug", "capital", "console"); err != nil {
if err := logging.SetGlobalLogger("debug", "capital", "console", "./data/debug.log"); err != nil {
log.Fatal(err)
}
password, err := cmd.Flags().GetString("password")
Expand Down
45 changes: 34 additions & 11 deletions cli/initiator/initiator.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"crypto/rsa"
"encoding/hex"
"fmt"
"log"
"os"
"strconv"

Expand Down Expand Up @@ -34,6 +33,10 @@ func init() {
flags.AddDepositResultStorePathFlag(StartDKG)
flags.AddSSVPayloadResultStorePathFlag(StartDKG)
flags.ConfigPathFlag(StartDKG)
flags.LogLevelFlag(StartDKG)
flags.LogFormatFlag(StartDKG)
flags.LogLevelFormatFlag(StartDKG)
flags.LogFilePathFlag(StartDKG)
if err := viper.BindPFlag("withdrawAddress", StartDKG.PersistentFlags().Lookup("withdrawAddress")); err != nil {
panic(err)
}
Expand Down Expand Up @@ -64,37 +67,57 @@ func init() {
if err := viper.BindPFlag("initiatorPrivKeyPassword", StartDKG.PersistentFlags().Lookup("initiatorPrivKeyPassword")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logLevel", StartDKG.PersistentFlags().Lookup("logLevel")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logFormat", StartDKG.PersistentFlags().Lookup("logFormat")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logLevelFormat", StartDKG.PersistentFlags().Lookup("logLevelFormat")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logFilePath", StartDKG.PersistentFlags().Lookup("logFilePath")); err != nil {
panic(err)
}
}

var StartDKG = &cobra.Command{
Use: "init",
Short: "Initiates a DKG protocol",
Run: func(cmd *cobra.Command, args []string) {
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println(`
█████╗ ██╗ ██╗ ██████╗ ██╗███╗ ██╗██╗████████╗██╗ █████╗ ████████╗ ██████╗ ██████╗
██╔══██╗██║ ██╔╝██╔════╝ ██║████╗ ██║██║╚══██╔══╝██║██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗
██║ ██║█████╔╝ ██║ ███╗ ██║██╔██╗ ██║██║ ██║ ██║███████║ ██║ ██║ ██║██████╔╝
██║ ██║██╔═██╗ ██║ ██║ ██║██║╚██╗██║██║ ██║ ██║██╔══██║ ██║ ██║ ██║██╔══██╗
██████╔╝██║ ██╗╚██████╔╝ ██║██║ ╚████║██║ ██║ ██║██║ ██║ ██║ ╚██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝`)
if err := logging.SetGlobalLogger("debug", "capital", "console"); err != nil {
log.Fatal(err)
}
logger := zap.L().Named("dkg-initiator")
viper.SetConfigType("yaml")
configPath, err := flags.GetConfigPathFlagValue(cmd)
if err != nil {
logger.Fatal(err.Error())
return err
}
if configPath != "" {
viper.SetConfigFile(configPath)
} else {
viper.AddConfigPath("./config")
}
err = viper.ReadInConfig()
if err := viper.ReadInConfig(); err != nil {
return err
}
logLevel := viper.GetString("logLevel")
logFormat := viper.GetString("logFormat")
logLevelFormat := viper.GetString("logLevelFormat")
logFilePath := viper.GetString("logFilePath")
// If the log file doesn't exist, create it
_, err = os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
logger.Warn("couldn't find config file, its ok if you using, cli params")
return err
}
if err := logging.SetGlobalLogger(logLevel, logFormat, logLevelFormat, logFilePath); err != nil {
return fmt.Errorf("logging.SetGlobalLogger: %w", err)
}
logger := zap.L().Named("dkg-initiator")
// Check paths for results
depositResultsPath := viper.GetString("depositResultsPath")
if depositResultsPath == "" {
Expand Down Expand Up @@ -166,7 +189,7 @@ var StartDKG = &cobra.Command{
}
}

dkgInitiator := initiator.New(privateKey, opMap)
dkgInitiator := initiator.New(privateKey, opMap, logger)
withdrawAddr := viper.GetString("withdrawAddress")
if withdrawAddr == "" {
logger.Fatal("failed to get withdrawal address flag value", zap.Error(err))
Expand Down Expand Up @@ -196,7 +219,6 @@ var StartDKG = &cobra.Command{
logger.Fatal("failed to decode withdrawal public key", zap.Error(err))
}
depositData, keyShares, err := dkgInitiator.StartDKG(withdrawPubKey, parts, forkHEX, fork, common.HexToAddress(owner), nonce)

if err != nil {
logger.Fatal("failed to initiate DKG ceremony", zap.Error(err))
}
Expand Down Expand Up @@ -230,6 +252,7 @@ var StartDKG = &cobra.Command{
When using distributed key generation you understand all the risks involved with
experimental cryptography.
`)
return nil
},
}

Expand Down
53 changes: 44 additions & 9 deletions cli/operator/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ func init() {
flags.OperatorPortFlag(StartDKGOperator)
flags.AddStoreShareFlag(StartDKGOperator)
flags.ConfigPathFlag(StartDKGOperator)
flags.LogLevelFlag(StartDKGOperator)
flags.LogFormatFlag(StartDKGOperator)
flags.LogLevelFormatFlag(StartDKGOperator)
flags.LogFilePathFlag(StartDKGOperator)
if err := viper.BindPFlag("privKey", StartDKGOperator.PersistentFlags().Lookup("privKey")); err != nil {
panic(err)
}
Expand All @@ -34,34 +38,57 @@ func init() {
if err := viper.BindPFlag("storeShare", StartDKGOperator.PersistentFlags().Lookup("storeShare")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logLevel", StartDKGOperator.PersistentFlags().Lookup("logLevel")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logFormat", StartDKGOperator.PersistentFlags().Lookup("logFormat")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logLevelFormat", StartDKGOperator.PersistentFlags().Lookup("logLevelFormat")); err != nil {
panic(err)
}
if err := viper.BindPFlag("logFilePath", StartDKGOperator.PersistentFlags().Lookup("logFilePath")); err != nil {
panic(err)
}
}

var StartDKGOperator = &cobra.Command{
Use: "start-operator",
Short: "Starts an instance of DKG operator",
Run: func(cmd *cobra.Command, args []string) {
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println(`
██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗ █████╗ ████████╗ ██████╗ ██████╗
██╔══██╗██║ ██╔╝██╔════╝ ██╔═══██╗██╔══██╗██╔════╝██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗
██║ ██║█████╔╝ ██║ ███╗ ██║ ██║██████╔╝█████╗ ██████╔╝███████║ ██║ ██║ ██║██████╔╝
██║ ██║██╔═██╗ ██║ ██║ ██║ ██║██╔═══╝ ██╔══╝ ██╔══██╗██╔══██║ ██║ ██║ ██║██╔══██╗
██████╔╝██║ ██╗╚██████╔╝ ╚██████╔╝██║ ███████╗██║ ██║██║ ██║ ██║ ╚██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝`)
if err := logging.SetGlobalLogger("debug", "capital", "console"); err != nil {
log.Fatal(err)
}
logger := zap.L().Named("dkg-operator")
viper.SetConfigType("yaml")
configPath, err := flags.GetConfigPathFlagValue(cmd)
if err != nil {
logger.Fatal(err.Error())
return err
}
if configPath != "" {
viper.SetConfigFile(configPath)
} else {
viper.AddConfigPath("./config")
}
err = viper.ReadInConfig()
if err := viper.ReadInConfig(); err != nil {
return err
}
logLevel := viper.GetString("logLevel")
logFormat := viper.GetString("logFormat")
logLevelFormat := viper.GetString("logLevelFormat")
logFilePath := viper.GetString("logFilePath")
// If the log file doesn't exist, create it
_, err = os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
}
if err := logging.SetGlobalLogger(logLevel, logFormat, logLevelFormat, logFilePath); err != nil {
return fmt.Errorf("logging.SetGlobalLogger: %w", err)
}
logger := zap.L().Named("dkg-operator")
if err != nil {
logger.Warn("couldn't find config file, its ok if you are using cli params")
}
Expand All @@ -79,30 +106,38 @@ var StartDKGOperator = &cobra.Command{
keyStorePassword, err := os.ReadFile(pass)
if err != nil {
logger.Fatal("Error reading Password file", zap.Error(err))
return err
}
encryptedJSON, err := os.ReadFile(privKeyPath)
if err != nil {
logger.Fatal("cant read operator`s key file", zap.Error(err))
return err
}
privateKey, err = crypto.ConvertEncryptedPemToPrivateKey(encryptedJSON, string(keyStorePassword))
if err != nil {
logger.Fatal(err.Error())
logger.Fatal("cant read operator`s key file", zap.Error(err))
return err
}
} else {
logger.Fatal("please provide password string or path to password file", zap.Error(err))
return err
}
srv := operator.New(privateKey)
srv := operator.New(privateKey, logger)
port := viper.GetUint64("port")
if port == 0 {
logger.Fatal("failed to get operator info file path flag value", zap.Error(err))
return err
}
pubKey, err := crypto.EncodePublicKey(&privateKey.PublicKey)
if err != nil {
logger.Fatal(err.Error())
return err
}
logger.Info("starting DKG operator", zap.Uint64("port", port), zap.String("public key", string(pubKey)))
if err := srv.Start(uint16(port)); err != nil {
log.Fatalf("Error in operator %v", err)
return err
}
return nil
},
}
4 changes: 4 additions & 0 deletions examples/config/initiator.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ depositResultsPath: /data/output/
ssvPayloadResultsPath: /data/output/
initiatorPrivKey: /data/initiator/encrypted_private_key.json
initiatorPrivKeyPassword: /data/initiator/password
logLevel: info
logFormat: json
logLevelFormat: capitalColor
logFilePath: /data/output/initiator_logs/debug.log
4 changes: 4 additions & 0 deletions examples/config/operator1.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@ privKey: /data/operator1/encrypted_private_key.json
password: /data/operator1/password
port: 3030
storeShare: false
logLevel: info
logFormat: json
logLevelFormat: capitalColor
logFilePath: /data/output/operator1_logs/debug.log
6 changes: 5 additions & 1 deletion examples/config/operator2.example.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
privKey: /data/operator2/encrypted_private_key.json
password: /data/operator2/password
port: 3030
storeShare: false
storeShare: false
logLevel: info
logFormat: json
logLevelFormat: capitalColor
logFilePath: /data/output/operator2_logs/debug.log
4 changes: 4 additions & 0 deletions examples/config/operator3.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@ privKey: /data/operator3/encrypted_private_key.json
password: /data/operator3/password
port: 3030
storeShare: false
logLevel: info
logFormat: json
logLevelFormat: capitalColor
logFilePath: /data/output/operator3_logs/debug.log
4 changes: 4 additions & 0 deletions examples/config/operator4.example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@ privKey: /data/operator4/encrypted_private_key.json
password: /data/operator4/password
port: 3030
storeShare: false
logLevel: info
logFormat: json
logLevelFormat: capitalColor
logFilePath: /data/output/operator4_logs/debug.log
Loading

0 comments on commit 211e779

Please sign in to comment.