github.com/saucelabs/saucectl@v0.175.1/internal/cmd/imagerunner/logs.go (about) 1 package imagerunner 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 cmds "github.com/saucelabs/saucectl/internal/cmd" 9 "github.com/saucelabs/saucectl/internal/http" 10 imgrunner "github.com/saucelabs/saucectl/internal/imagerunner" 11 "github.com/saucelabs/saucectl/internal/segment" 12 "github.com/saucelabs/saucectl/internal/usage" 13 "github.com/spf13/cobra" 14 "golang.org/x/text/cases" 15 "golang.org/x/text/language" 16 ) 17 18 func LogsCommand() *cobra.Command { 19 var liveLogs bool 20 21 cmd := &cobra.Command{ 22 Use: "logs <runID>", 23 Short: "Fetch the logs for an imagerunner run", 24 SilenceUsage: true, 25 Args: func(cmd *cobra.Command, args []string) error { 26 if len(args) == 0 || args[0] == "" { 27 return errors.New("no run ID specified") 28 } 29 return nil 30 }, 31 PreRunE: func(cmd *cobra.Command, args []string) error { 32 err := http.CheckProxy() 33 if err != nil { 34 return fmt.Errorf("invalid HTTP_PROXY value") 35 } 36 37 tracker := segment.DefaultTracker 38 39 go func() { 40 tracker.Collect( 41 cases.Title(language.English).String(cmds.FullName(cmd)), 42 usage.Properties{}.SetFlags(cmd.Flags()), 43 ) 44 _ = tracker.Close() 45 }() 46 return nil 47 }, 48 RunE: func(cmd *cobra.Command, args []string) error { 49 return exec(args[0], liveLogs) 50 }, 51 } 52 53 flags := cmd.PersistentFlags() 54 flags.BoolVarP(&liveLogs, "live", "", false, "Tail the live log output from a running Sauce Orchestrate container.") 55 56 return cmd 57 } 58 59 func exec(runID string, liveLogs bool) error { 60 if liveLogs { 61 err := imagerunnerClient.GetLiveLogs(context.Background(), runID) 62 if err != nil { 63 if errors.Is(err, imgrunner.ErrResourceNotFound) { 64 return fmt.Errorf("could not find log URL for run with ID (%s): %w", runID, err) 65 } 66 } 67 return err 68 } 69 70 log, err := imagerunnerClient.GetLogs(context.Background(), runID) 71 if err != nil { 72 if errors.Is(err, imgrunner.ErrResourceNotFound) { 73 return fmt.Errorf("could not find log URL for run with ID (%s): %w", runID, err) 74 } 75 return err 76 } 77 fmt.Println(log) 78 79 return nil 80 }