github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/tools/blocksconvert/builder/fetcher.go (about) 1 package builder 2 3 import ( 4 "context" 5 6 "github.com/prometheus/client_golang/prometheus" 7 8 "github.com/cortexproject/cortex/pkg/chunk" 9 ) 10 11 type Fetcher struct { 12 userID string 13 14 client chunk.Client 15 16 fetchedChunks prometheus.Counter 17 fetchedChunksSize prometheus.Counter 18 } 19 20 func newFetcher(userID string, client chunk.Client, fetchedChunks, fetchedChunksSize prometheus.Counter) (*Fetcher, error) { 21 return &Fetcher{ 22 client: client, 23 userID: userID, 24 fetchedChunks: fetchedChunks, 25 fetchedChunksSize: fetchedChunksSize, 26 }, nil 27 } 28 29 func (f *Fetcher) fetchChunks(ctx context.Context, chunkIDs []string) ([]chunk.Chunk, error) { 30 chunks := make([]chunk.Chunk, 0, len(chunkIDs)) 31 32 for _, cid := range chunkIDs { 33 c, err := chunk.ParseExternalKey(f.userID, cid) 34 if err != nil { 35 return nil, err 36 } 37 38 chunks = append(chunks, c) 39 } 40 41 cs, err := f.client.GetChunks(ctx, chunks) 42 for _, c := range cs { 43 f.fetchedChunks.Inc() 44 enc, nerr := c.Encoded() 45 if nerr != nil { 46 return nil, nerr 47 } 48 f.fetchedChunksSize.Add(float64(len(enc))) 49 } 50 51 return cs, err 52 }