(opts *globalOptions)
| 30 | } |
| 31 | |
| 32 | func (cmd *searchBlocksCmd) Run(opts *globalOptions) error { |
| 33 | r, _, _, err := loadBackend(&cmd.backendOptions, opts) |
| 34 | if err != nil { |
| 35 | return err |
| 36 | } |
| 37 | |
| 38 | startTime, err := parseTime(cmd.Start) |
| 39 | if err != nil { |
| 40 | return err |
| 41 | } |
| 42 | endTime, err := parseTime(cmd.End) |
| 43 | if err != nil { |
| 44 | return err |
| 45 | } |
| 46 | |
| 47 | searchReq := &tempopb.SearchRequest{ |
| 48 | Tags: map[string]string{cmd.Name: cmd.Value}, |
| 49 | Limit: limit, |
| 50 | } |
| 51 | |
| 52 | ctx := context.Background() |
| 53 | |
| 54 | blockIDs, _, err := r.Blocks(ctx, cmd.TenantID) |
| 55 | if err != nil { |
| 56 | return err |
| 57 | } |
| 58 | |
| 59 | fmt.Println("Total Blocks:", len(blockIDs)) |
| 60 | |
| 61 | // Load in parallel |
| 62 | wg := boundedwaitgroup.New(20) |
| 63 | resultsCh := make(chan *backend.BlockMeta, len(blockIDs)) |
| 64 | for _, id := range blockIDs { |
| 65 | wg.Add(1) |
| 66 | |
| 67 | go func(id2 uuid.UUID) { |
| 68 | defer wg.Done() |
| 69 | |
| 70 | // search here |
| 71 | meta, err := r.BlockMeta(ctx, id2, cmd.TenantID) |
| 72 | if errors.Is(err, backend.ErrDoesNotExist) { |
| 73 | return |
| 74 | } |
| 75 | if err != nil { |
| 76 | fmt.Println("Error reading block meta:", err) |
| 77 | return |
| 78 | } |
| 79 | if meta.StartTime.Unix() <= endTime.Unix() && |
| 80 | meta.EndTime.Unix() >= startTime.Unix() { |
| 81 | resultsCh <- meta |
| 82 | } |
| 83 | }(id) |
| 84 | } |
| 85 | |
| 86 | wg.Wait() |
| 87 | close(resultsCh) |
| 88 | |
| 89 | blockmetas := []*backend.BlockMeta{} |
nothing calls this directly
no test coverage detected