github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/monitor/commands/list.go (about)

     1  package commands
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io"
     7  	"sort"
     8  	"text/tabwriter"
     9  
    10  	"github.com/docker/buildx/monitor/types"
    11  )
    12  
    13  type ListCmd struct {
    14  	m types.Monitor
    15  
    16  	stdout io.WriteCloser
    17  }
    18  
    19  func NewListCmd(m types.Monitor, stdout io.WriteCloser) types.Command {
    20  	return &ListCmd{m, stdout}
    21  }
    22  
    23  func (cm *ListCmd) Info() types.CommandInfo {
    24  	return types.CommandInfo{
    25  		Name:        "list",
    26  		HelpMessage: "list buildx sessions",
    27  		HelpMessageLong: `
    28  Usage:
    29    list
    30  `,
    31  	}
    32  }
    33  
    34  func (cm *ListCmd) Exec(ctx context.Context, args []string) error {
    35  	refs, err := cm.m.List(ctx)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	sort.Strings(refs)
    40  	tw := tabwriter.NewWriter(cm.stdout, 1, 8, 1, '\t', 0)
    41  	fmt.Fprintln(tw, "ID\tCURRENT_SESSION")
    42  	for _, k := range refs {
    43  		fmt.Fprintf(tw, "%-20s\t%v\n", k, k == cm.m.AttachedSessionID())
    44  	}
    45  	tw.Flush()
    46  	return nil
    47  }