github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/monitor/commands/disconnect.go (about) 1 package commands 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/docker/buildx/monitor/types" 8 "github.com/pkg/errors" 9 ) 10 11 type DisconnectCmd struct { 12 m types.Monitor 13 } 14 15 func NewDisconnectCmd(m types.Monitor) types.Command { 16 return &DisconnectCmd{m} 17 } 18 19 func (cm *DisconnectCmd) Info() types.CommandInfo { 20 return types.CommandInfo{ 21 Name: "disconnect", 22 HelpMessage: "disconnect a client from a buildx server. Specific session ID can be specified an arg", 23 HelpMessageLong: fmt.Sprintf(` 24 Usage: 25 disconnect [ID] 26 27 ID is for a session (visible via list command). Default is %q. 28 `, cm.m.AttachedSessionID()), 29 } 30 } 31 32 func (cm *DisconnectCmd) Exec(ctx context.Context, args []string) error { 33 target := cm.m.AttachedSessionID() 34 if len(args) >= 2 { 35 target = args[1] 36 } else if target == "" { 37 return errors.Errorf("no attaching session") 38 } 39 isProcess, err := isProcessID(ctx, cm.m, target) 40 if err == nil && isProcess { 41 sid := cm.m.AttachedSessionID() 42 if sid == "" { 43 return errors.Errorf("no attaching session") 44 } 45 if err := cm.m.DisconnectProcess(ctx, sid, target); err != nil { 46 return errors.Errorf("disconnecting from process failed %v", target) 47 } 48 return nil 49 } 50 if err := cm.m.DisconnectSession(ctx, target); err != nil { 51 return errors.Errorf("disconnecting from session failed: %v", err) 52 } 53 return nil 54 }