github.com/stellar/stellar-etl@v1.0.1-0.20240312145900-4874b6bf2b89/cmd/export_trades.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 6 "github.com/sirupsen/logrus" 7 "github.com/stellar/stellar-etl/internal/toid" 8 9 "github.com/spf13/cobra" 10 "github.com/stellar/stellar-etl/internal/input" 11 "github.com/stellar/stellar-etl/internal/transform" 12 "github.com/stellar/stellar-etl/internal/utils" 13 ) 14 15 // tradesCmd represents the trades command 16 var tradesCmd = &cobra.Command{ 17 Use: "export_trades", 18 Short: "Exports the trade data", 19 Long: `Exports trade data within the specified range to an output file`, 20 Run: func(cmd *cobra.Command, args []string) { 21 cmdLogger.SetLevel(logrus.InfoLevel) 22 endNum, strictExport, isTest, isFuture, extra := utils.MustCommonFlags(cmd.Flags(), cmdLogger) 23 cmdLogger.StrictExport = strictExport 24 startNum, path, limit := utils.MustArchiveFlags(cmd.Flags(), cmdLogger) 25 env := utils.GetEnvironmentDetails(isTest, isFuture) 26 cloudStorageBucket, cloudCredentials, cloudProvider := utils.MustCloudStorageFlags(cmd.Flags(), cmdLogger) 27 28 trades, err := input.GetTrades(startNum, endNum, limit, env) 29 if err != nil { 30 cmdLogger.Fatal("could not read trades ", err) 31 } 32 33 outFile := mustOutFile(path) 34 numFailures := 0 35 totalNumBytes := 0 36 for _, tradeInput := range trades { 37 trades, err := transform.TransformTrade(tradeInput.OperationIndex, tradeInput.OperationHistoryID, tradeInput.Transaction, tradeInput.CloseTime) 38 if err != nil { 39 parsedID := toid.Parse(tradeInput.OperationHistoryID) 40 cmdLogger.LogError(fmt.Errorf("from ledger %d, transaction %d, operation %d: %v", parsedID.LedgerSequence, parsedID.TransactionOrder, parsedID.OperationOrder, err)) 41 numFailures += 1 42 continue 43 } 44 45 for _, transformed := range trades { 46 numBytes, err := exportEntry(transformed, outFile, extra) 47 if err != nil { 48 cmdLogger.LogError(err) 49 numFailures += 1 50 continue 51 } 52 totalNumBytes += numBytes 53 } 54 } 55 56 outFile.Close() 57 cmdLogger.Info("Number of bytes written: ", totalNumBytes) 58 59 printTransformStats(len(trades), numFailures) 60 61 maybeUpload(cloudCredentials, cloudStorageBucket, cloudProvider, path) 62 }, 63 } 64 65 func init() { 66 rootCmd.AddCommand(tradesCmd) 67 utils.AddCommonFlags(tradesCmd.Flags()) 68 utils.AddArchiveFlags("trades", tradesCmd.Flags()) 69 utils.AddCloudStorageFlags(tradesCmd.Flags()) 70 tradesCmd.MarkFlagRequired("end-ledger") 71 72 /* 73 TODO: implement extra flags if possible 74 serialize-method: the method for serialization of the output data (JSON, XDR, etc) 75 start and end time as a replacement for start and end sequence numbers 76 */ 77 }