Skip to content

Commit

Permalink
feat(cli): add log_level option for customizable logging
Browse files Browse the repository at this point in the history
  • Loading branch information
ccamel committed Dec 26, 2024
1 parent 4e5c9b7 commit 1cfc352
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 13 deletions.
2 changes: 1 addition & 1 deletion cmd/delegators.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ var extractDelegatorsCmd = &cobra.Command{
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
chainName, _ := cmd.Flags().GetString(flagChainName)
pipeline, err := delegators.Pipeline(chainName, args[0], args[1])
pipeline, err := delegators.Pipeline(chainName, args[0], args[1], logger)
if err != nil {
return err
}
Expand Down
24 changes: 24 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,34 @@ package cmd
import (
"os"

pkglogger "github.com/axone-protocol/wallet-extractor/pkg/logger"
"github.com/spf13/cobra"

"cosmossdk.io/log"
)

var logger = log.NewNopLogger()

const (
flagLogLevel = "log_level"
)

// rootCmd represents the base command when called without any subcommands.
var rootCmd = &cobra.Command{
Use: "wallet-extractor",
Short: "A template fo Golang projects",
Long: "A template fo Golang projects",
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
logLevel := cmd.Flag(flagLogLevel).Value.String()
filterFn, err := log.ParseLogLevel(logLevel)
if err != nil {
return nil
}
logger = log.NewLogger(os.Stderr, log.FilterOption(filterFn))
pkglogger.InstallETLLogger(logger)

return nil
},
}

// Execute adds all child commands to the root command and sets flags appropriately.
Expand All @@ -21,3 +41,7 @@ func Execute() {
os.Exit(1)
}
}

func init() {
rootCmd.PersistentFlags().String(flagLogLevel, "info", "The logging level (trace|debug|info|warn|error|fatal|panic)")
}
20 changes: 15 additions & 5 deletions pkg/delegators/pipeline.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"path"

"github.com/teambenny/goetl"

"cosmossdk.io/log"
)

const (
Expand All @@ -15,8 +17,8 @@ type pipelines struct {
pipelines []goetl.PipelineIface
}

func Pipeline(chainName, src, dst string) (goetl.PipelineIface, error) {
readDelegators, err := NewDelegatorsReader(chainName, src)
func Pipeline(chainName, src, dst string, logger log.Logger) (goetl.PipelineIface, error) {
readDelegators, err := NewDelegatorsReader(chainName, src, logger)
if err != nil {
return nil, err
}
Expand All @@ -25,7 +27,7 @@ func Pipeline(chainName, src, dst string) (goetl.PipelineIface, error) {
return nil, err
}

readChain, err := NewChainReader(chainName, src)
readChain, err := NewChainReader(chainName, src, logger)
if err != nil {
return nil, err
}
Expand All @@ -36,8 +38,16 @@ func Pipeline(chainName, src, dst string) (goetl.PipelineIface, error) {

return &pipelines{
pipelines: []goetl.PipelineIface{
goetl.NewPipeline(readChain, writeChain),
goetl.NewPipeline(readDelegators, writeDelegators),
func() goetl.PipelineIface {
pipeline := goetl.NewPipeline(readChain, writeChain)
pipeline.Name = "Chain"
return pipeline
}(),
func() goetl.PipelineIface {
pipeline := goetl.NewPipeline(readDelegators, writeDelegators)
pipeline.Name = "Delegators"
return pipeline
}(),
},
}, nil
}
Expand Down
9 changes: 2 additions & 7 deletions pkg/delegators/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package delegators
import (
"fmt"
"io"
"os"
"strings"

"github.com/axone-protocol/wallet-extractor/pkg/keeper"
Expand All @@ -26,9 +25,7 @@ type delegatorsReader struct {
}

// NewDelegatorsReader returns a new Reader that reads delegators from a blockchain data stores.
func NewDelegatorsReader(chainName, src string) (goetl.Processor, error) {
logger := log.NewLogger(os.Stderr)

func NewDelegatorsReader(chainName, src string, logger log.Logger) (goetl.Processor, error) {
return &delegatorsReader{
chainName: chainName,
src: src,
Expand Down Expand Up @@ -131,9 +128,7 @@ type chainReader struct {
}

// NewChainReader returns a new Reader that reads metadata information about a blockchain data store.
func NewChainReader(chainName, src string) (goetl.Processor, error) {
logger := log.NewLogger(os.Stderr)

func NewChainReader(chainName, src string, logger log.Logger) (goetl.Processor, error) {
return &chainReader{
chainName: chainName,
src: src,
Expand Down
49 changes: 49 additions & 0 deletions pkg/logger/logger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package logger

import (
"fmt"
"io"
"strings"

"github.com/sourcegraph/conc/iter"
"github.com/teambenny/goetl/logger"

"cosmossdk.io/log"
)

type etlLogger struct {
logger log.Logger
}

func NewETLLogger(l log.Logger) logger.ETLNotifier {
return &etlLogger{
logger: l,
}
}

func InstallETLLogger(l log.Logger) {
logger.Notifier = NewETLLogger(l)
logger.SetOutput(io.Discard)
}

// ETLNotifier is an interface for receiving log events from goetl.
func (l *etlLogger) ETLNotify(lvl int, _ []byte, v ...interface{}) {
s := func() string {
return strings.Join(iter.Map(v, func(it *interface{}) string {
return fmt.Sprint(*it)
}), " ")
}

switch lvl {
case logger.LevelDebug:
l.logger.Debug(s())
case logger.LevelInfo:
l.logger.Info(s())
case logger.LevelError:
l.logger.Error(s())
case logger.LevelStatus:
l.logger.Info(s())
case logger.LevelSilent:
// shh
}
}

0 comments on commit 1cfc352

Please sign in to comment.