Skip to content

Commit

Permalink
feat: output rewards to csv (#167)
Browse files Browse the repository at this point in the history
* feat: output rewards to csv

* fix: spelling

* fix: make directories work
  • Loading branch information
shrimalmadhur authored Jul 16, 2024
1 parent d3ee649 commit e5508d4
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 11 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ require (
github.com/consensys/gnark-crypto v0.12.1
github.com/ethereum/go-ethereum v1.14.5
github.com/fatih/color v1.17.0
github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1
github.com/posthog/posthog-go v0.0.0-20240327112532-87b23fe11103
github.com/stretchr/testify v1.9.0
github.com/urfave/cli/v2 v2.27.2
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 h1:FWNFq4fM1wPfcK40yHE5UO3RUdSNPaBC+j3PokzA6OQ=
github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
Expand Down
42 changes: 41 additions & 1 deletion pkg/common/fileio.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@ import (
"fmt"
"os"
"path"

"github.com/gocarina/gocsv"
)

func WriteToJSON(data []byte, filePath string) error {
// Write JSON data to a file
dir := path.Dir(filePath)
// Ensure the directory exists
err := ensureDir(dir)
if err != nil {
return fmt.Errorf("error creating directory: %v", err)
}

file, err := os.Create(path.Clean(filePath))
if err != nil {
fmt.Println("Error creating file:", err)
Expand All @@ -23,3 +31,35 @@ func WriteToJSON(data []byte, filePath string) error {

return nil
}

func WriteToCSV(data interface{}, filePath string) error {
dir := path.Dir(filePath)
// Ensure the directory exists
err := ensureDir(dir)
if err != nil {
return fmt.Errorf("error creating directory: %v", err)
}

file, err := os.Create(path.Clean(filePath))
if err != nil {
fmt.Println("Error creating file:", err)
return err
}
defer file.Close()

err = gocsv.MarshalFile(data, file)
if err != nil {
return err
}

return nil
}

// Ensure that the directory exists, creating it if necessary
func ensureDir(dirName string) error {
err := os.MkdirAll(dirName, os.ModePerm)
if err != nil {
return err
}
return nil
}
26 changes: 23 additions & 3 deletions pkg/rewards/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ type ShowConfig struct {
Environment string
ClaimType ClaimType
ChainID *big.Int
Output string
}

func ShowCmd(p utils.Prompter) *cli.Command {
Expand Down Expand Up @@ -119,7 +120,16 @@ func ShowRewards(cCtx *cli.Context) error {
return err
}
normalizedRewards := normalizeRewardResponse(responseBody)
printNormalizedRewardsAsTable(normalizedRewards)
if common.IsEmptyString(config.Output) {
printNormalizedRewardsAsTable(normalizedRewards)
} else {
logger.Debugf("Writing total rewards to %s", config.Output)
err = common.WriteToCSV(normalizedRewards, config.Output)
if err != nil {
return err
}
logger.Infof("Total rewards written to %s", config.Output)
}
} else if config.ClaimType == Unclaimed {
requestBody := map[string]string{
"earnerAddress": config.EarnerAddress.String(),
Expand All @@ -136,7 +146,16 @@ func ShowRewards(cCtx *cli.Context) error {
return err
}
unclaimedNormalizedRewards := normalizeUnclaimedRewardResponse(response)
printUnclaimedNormalizedRewardsAsTable(unclaimedNormalizedRewards)
if common.IsEmptyString(config.Output) {
printUnclaimedNormalizedRewardsAsTable(unclaimedNormalizedRewards)
} else {
logger.Debugf("Writing unclaimed rewards to %s", config.Output)
err = common.WriteToCSV(unclaimedNormalizedRewards, config.Output)
if err != nil {
return err
}
logger.Infof("Unclaimed rewards written to %s", config.Output)
}
} else {
return fmt.Errorf("claim type %s not supported", config.ClaimType)
}
Expand All @@ -159,7 +178,6 @@ func normalizeUnclaimedRewardResponse(unclaimedRewardResponse UnclaimedRewardRes
amount := new(big.Int)
amount.SetString(token.WeiAmount, 10)
normalizedUnclaimedRewards = append(normalizedUnclaimedRewards, NormalizedUnclaimedReward{
AVSAddress: rewardsPerAVS.AVSAddress,
TokenAddress: token.TokenAddress,
WeiAmount: amount,
})
Expand Down Expand Up @@ -246,6 +264,7 @@ func formatColumns(columnName string, size int32) string {

func readAndValidateConfig(cCtx *cli.Context, logger logging.Logger) (*ShowConfig, error) {
earnerAddress := gethcommon.HexToAddress(cCtx.String(EarnerAddressFlag.Name))
output := cCtx.String(flags.OutputFileFlag.Name)
numberOfDays := cCtx.Int64(NumberOfDaysFlag.Name)
if numberOfDays >= 0 {
return nil, errors.New(
Expand Down Expand Up @@ -274,6 +293,7 @@ func readAndValidateConfig(cCtx *cli.Context, logger logging.Logger) (*ShowConfi
Environment: env,
ClaimType: claimType,
ChainID: chainID,
Output: output,
}, nil
}

Expand Down
13 changes: 6 additions & 7 deletions pkg/rewards/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ type Token struct {
}

type NormalizedReward struct {
StrategyAddress string
AVSAddress string
TokenAddress string
WeiAmount *big.Int
StrategyAddress string `csv:"strategyAddress"`
AVSAddress string `csv:"avsAddress"`
TokenAddress string `csv:"tokenAddress"`
WeiAmount *big.Int `csv:"weiAmount"`
}

type UnclaimedRewardResponse struct {
Expand All @@ -34,7 +34,6 @@ type UnclaimedRewardResponse struct {
}

type NormalizedUnclaimedReward struct {
AVSAddress string
TokenAddress string
WeiAmount *big.Int
TokenAddress string `csv:"tokenAddress"`
WeiAmount *big.Int `csv:"weiAmount"`
}

0 comments on commit e5508d4

Please sign in to comment.