github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/cli/commands/resources/builds/query.go (about)

     1  package builds
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/jedib0t/go-pretty/v6/table"
     7  	"github.com/taubyte/go-interfaces/services/patrick"
     8  	"github.com/taubyte/tau-cli/cli/common"
     9  	projectLib "github.com/taubyte/tau-cli/lib/project"
    10  	patrickClient "github.com/taubyte/tau-cli/singletons/patrick_client"
    11  	buildsTable "github.com/taubyte/tau-cli/table/builds"
    12  	"github.com/urfave/cli/v2"
    13  )
    14  
    15  func (link) Query() common.Command {
    16  	return common.Create(
    17  		&cli.Command{
    18  			Flags: []cli.Flag{
    19  				&cli.StringFlag{
    20  					Name:        "since",
    21  					Aliases:     []string{"t", "s"},
    22  					Usage:       "(optional) filters jobs by time range",
    23  					DefaultText: defaultTimeFilter,
    24  				},
    25  			},
    26  			Action: query,
    27  		},
    28  	)
    29  }
    30  
    31  func (l link) List() common.Command {
    32  	return l.Query()
    33  }
    34  
    35  func query(ctx *cli.Context) error {
    36  	prj, err := projectLib.SelectedProjectInterface()
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	patrickC, err := patrickClient.Load()
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	jobIds, err := patrickC.Jobs(prj.Get().Id())
    47  	if err != nil {
    48  		// use i18n
    49  		return err
    50  	}
    51  
    52  	since := defaultTimeFilter
    53  	if _since := ctx.String("since"); len(_since) > 0 {
    54  		since = _since
    55  	}
    56  
    57  	sinceParsed, err := time.ParseDuration(since)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	rangeEnd := time.Now().Add(-sinceParsed).Unix()
    63  
    64  	// index string for unique jobs
    65  	jobs := make([]*patrick.Job, 0, len(jobIds))
    66  	for _, id := range jobIds {
    67  		job, err := patrickC.Job(id)
    68  		if err != nil {
    69  			// use i18n
    70  			return err
    71  		}
    72  
    73  		if job.Timestamp >= rangeEnd {
    74  			jobs = append(jobs, job)
    75  		}
    76  	}
    77  
    78  	// separate keys from original for loop to ensure unique values
    79  	t, err := buildsTable.ListNoRender(jobs, false)
    80  	if err != nil {
    81  		return err
    82  	}
    83  
    84  	t.SetStyle(table.StyleLight)
    85  	t.Render()
    86  
    87  	return nil
    88  }