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  }