github.com/stellar/stellar-etl@v1.0.1-0.20240312145900-4874b6bf2b89/internal/input/ledgers.go (about)

     1  package input
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/stellar/stellar-etl/internal/utils"
     7  
     8  	"github.com/stellar/go/historyarchive"
     9  )
    10  
    11  // GetLedgers returns a slice of ledger close metas for the ledgers in the provided range (inclusive on both ends)
    12  func GetLedgers(start, end uint32, limit int64, isTest bool, isFuturenet bool) ([]historyarchive.Ledger, error) {
    13  	env := utils.GetEnvironmentDetails(isTest, isFuturenet)
    14  	backend, err := utils.CreateBackend(start, end, env.ArchiveURLs)
    15  	if err != nil {
    16  		return []historyarchive.Ledger{}, err
    17  	}
    18  
    19  	ledgerSlice := []historyarchive.Ledger{}
    20  	ctx := context.Background()
    21  	for seq := start; seq <= end; seq++ {
    22  		ledger, err := backend.GetLedgerArchive(ctx, seq)
    23  		if err != nil {
    24  			return []historyarchive.Ledger{}, err
    25  		}
    26  
    27  		ledgerSlice = append(ledgerSlice, ledger)
    28  		if int64(len(ledgerSlice)) >= limit && limit >= 0 {
    29  			break
    30  		}
    31  	}
    32  
    33  	return ledgerSlice, nil
    34  }