github.com/stellar/stellar-etl@v1.0.1-0.20240312145900-4874b6bf2b89/cmd/export_offers.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 6 "github.com/sirupsen/logrus" 7 "github.com/spf13/cobra" 8 9 "github.com/stellar/stellar-etl/internal/input" 10 "github.com/stellar/stellar-etl/internal/transform" 11 "github.com/stellar/stellar-etl/internal/utils" 12 13 "github.com/stellar/go/xdr" 14 ) 15 16 // offersCmd represents the offers command 17 var offersCmd = &cobra.Command{ 18 Use: "export_offers", 19 Short: "Exports the data on offers made from the genesis ledger to a specified endpoint.", 20 Long: `Exports historical offer data from the genesis ledger to the provided end-ledger to an output file. 21 The command reads from the bucket list, which includes the full history of the Stellar ledger. As a result, it 22 should be used in an initial data dump. In order to get offer information within a specified ledger range, see 23 the export_ledger_entry_changes command.`, 24 Run: func(cmd *cobra.Command, args []string) { 25 cmdLogger.SetLevel(logrus.InfoLevel) 26 endNum, strictExport, isTest, isFuture, extra := utils.MustCommonFlags(cmd.Flags(), cmdLogger) 27 cmdLogger.StrictExport = strictExport 28 env := utils.GetEnvironmentDetails(isTest, isFuture) 29 path := utils.MustBucketFlags(cmd.Flags(), cmdLogger) 30 cloudStorageBucket, cloudCredentials, cloudProvider := utils.MustCloudStorageFlags(cmd.Flags(), cmdLogger) 31 32 offers, err := input.GetEntriesFromGenesis(endNum, xdr.LedgerEntryTypeOffer, env.ArchiveURLs) 33 if err != nil { 34 cmdLogger.Fatal("could not read offers: ", err) 35 } 36 37 outFile := mustOutFile(path) 38 numFailures := 0 39 totalNumBytes := 0 40 var header xdr.LedgerHeaderHistoryEntry 41 for _, offer := range offers { 42 transformed, err := transform.TransformOffer(offer, header) 43 if err != nil { 44 cmdLogger.LogError(fmt.Errorf("could not transform offer %+v: %v", offer, err)) 45 numFailures += 1 46 continue 47 } 48 49 numBytes, err := exportEntry(transformed, outFile, extra) 50 if err != nil { 51 cmdLogger.LogError(fmt.Errorf("could not export offer %+v: %v", offer, err)) 52 numFailures += 1 53 continue 54 } 55 totalNumBytes += numBytes 56 } 57 58 outFile.Close() 59 cmdLogger.Info("Number of bytes written: ", totalNumBytes) 60 61 printTransformStats(len(offers), numFailures) 62 63 maybeUpload(cloudCredentials, cloudStorageBucket, cloudProvider, path) 64 }, 65 } 66 67 func init() { 68 rootCmd.AddCommand(offersCmd) 69 utils.AddCommonFlags(offersCmd.Flags()) 70 utils.AddBucketFlags("offers", offersCmd.Flags()) 71 utils.AddCloudStorageFlags(offersCmd.Flags()) 72 offersCmd.MarkFlagRequired("end-ledger") 73 /* 74 Current flags: 75 end-ledger: the ledger sequence number for the end of the export range (required) 76 output-file: filename of the output file 77 78 TODO: implement extra flags if possible 79 serialize-method: the method for serialization of the output data (JSON, XDR, etc) 80 end time as a replacement for end sequence numbers 81 */ 82 }