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