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 }