From badc92f192528ed2eea8ea73582657c4c4b1a84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= Date: Mon, 9 May 2022 15:28:47 +0200 Subject: [PATCH 1/3] Add container pause functionality --- pkg/commands/container.go | 12 ++++++++++++ pkg/gui/containers_panel.go | 21 +++++++++++++++++++++ pkg/gui/keybindings.go | 7 +++++++ pkg/i18n/english.go | 4 ++++ 4 files changed, 44 insertions(+) diff --git a/pkg/commands/container.go b/pkg/commands/container.go index f664eba3..9b56664d 100644 --- a/pkg/commands/container.go +++ b/pkg/commands/container.go @@ -175,6 +175,18 @@ func (c *Container) Stop() error { return c.Client.ContainerStop(context.Background(), c.ID, nil) } +// Pause pauses the container +func (c *Container) Pause() error { + c.Log.Warn(fmt.Sprintf("pausing container %s", c.Name)) + return c.Client.ContainerPause(context.Background(), c.ID) +} + +// Unpause unpauses the container +func (c *Container) Unpause() error { + c.Log.Warn(fmt.Sprintf("unpausing container %s", c.Name)) + return c.Client.ContainerUnpause(context.Background(), c.ID) +} + // Restart restarts the container func (c *Container) Restart() error { c.Log.Warn(fmt.Sprintf("restarting container %s", c.Name)) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index fe4715ea..961d073c 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -423,6 +423,27 @@ func (gui *Gui) handleContainersRemoveMenu(g *gocui.Gui, v *gocui.View) error { return gui.createMenu("", options, len(options), handleMenuPress) } +func (gui *Gui) handleContainerPause(g *gocui.Gui, v *gocui.View) error { + container, err := gui.getSelectedContainer() + if err != nil { + return nil + } + + return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() error { + if container.Details.State.Paused { + err = container.Unpause() + } else { + err = container.Pause() + } + + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + return gui.refreshContainersAndServices() + }) +} + func (gui *Gui) handleContainerStop(g *gocui.Gui, v *gocui.View) error { container, err := gui.getSelectedContainer() if err != nil { diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index aabf1b3b..4ef3eb8d 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -220,6 +220,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleHideStoppedContainers, Description: gui.Tr.HideStopped, }, + { + ViewName: "containers", + Key: 'p', + Modifier: gocui.ModNone, + Handler: gui.handleContainerPause, + Description: gui.Tr.Pause, + }, { ViewName: "containers", Key: 's', diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 5dbfdb5c..cec206e0 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -42,11 +42,13 @@ type TranslationSet struct { RestartingStatus string StartingStatus string StoppingStatus string + PausingStatus string RemovingStatus string RunningCustomCommandStatus string RunningBulkCommandStatus string RemoveService string Stop string + Pause string Restart string Start string Rebuild string @@ -112,6 +114,7 @@ func englishSet() TranslationSet { RestartingStatus: "restarting", StartingStatus: "starting", StoppingStatus: "stopping", + PausingStatus: "pausing", RunningCustomCommandStatus: "running custom command", RunningBulkCommandStatus: "running bulk command", @@ -146,6 +149,7 @@ func englishSet() TranslationSet { RemoveWithVolumes: "remove with volumes", RemoveService: "remove containers", Stop: "stop", + Pause: "pause", Restart: "restart", Start: "start", Rebuild: "rebuild", From 0ced576d9c436a0df1c51d341b52cac01e780b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= Date: Wed, 11 May 2022 17:10:40 +0200 Subject: [PATCH 2/3] Add services pause functionality --- pkg/gui/keybindings.go | 7 +++++++ pkg/gui/services_panel.go | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 4ef3eb8d..54cab25f 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -297,6 +297,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleServiceStop, Description: gui.Tr.Stop, }, + { + ViewName: "services", + Key: 'p', + Modifier: gocui.ModNone, + Handler: gui.handleServicePause, + Description: gui.Tr.Pause, + }, { ViewName: "services", Key: 'r', diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index a40569a7..57b02539 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -219,6 +219,30 @@ func (gui *Gui) handleServiceRemoveMenu(g *gocui.Gui, v *gocui.View) error { return gui.createServiceCommandMenu(options, gui.Tr.RemovingStatus) } +func (gui *Gui) handleServicePause(g *gocui.Gui, v *gocui.View) error { + service, err := gui.getSelectedService() + if err != nil { + return nil + } + if service.Container == nil { + return nil + } + + return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() error { + if service.Container.Details.State.Paused { + err = service.Container.Unpause() + } else { + err = service.Container.Pause() + } + + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + return gui.refreshContainersAndServices() + }) +} + func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error { service, err := gui.getSelectedService() if err != nil { From a03f5505353a21502406c3ded6bd7c4491c2169d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= Date: Thu, 12 May 2022 14:19:06 +0200 Subject: [PATCH 3/3] Refactor pausing a bit --- pkg/gui/containers_panel.go | 18 +++++++++++------- pkg/gui/services_panel.go | 14 +------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 961d073c..c50e1985 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -423,13 +423,8 @@ func (gui *Gui) handleContainersRemoveMenu(g *gocui.Gui, v *gocui.View) error { return gui.createMenu("", options, len(options), handleMenuPress) } -func (gui *Gui) handleContainerPause(g *gocui.Gui, v *gocui.View) error { - container, err := gui.getSelectedContainer() - if err != nil { - return nil - } - - return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() error { +func (gui *Gui) PauseContainer(container *commands.Container) error { + return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() (err error) { if container.Details.State.Paused { err = container.Unpause() } else { @@ -444,6 +439,15 @@ func (gui *Gui) handleContainerPause(g *gocui.Gui, v *gocui.View) error { }) } +func (gui *Gui) handleContainerPause(g *gocui.Gui, v *gocui.View) error { + container, err := gui.getSelectedContainer() + if err != nil { + return nil + } + + return gui.PauseContainer(container) +} + func (gui *Gui) handleContainerStop(g *gocui.Gui, v *gocui.View) error { container, err := gui.getSelectedContainer() if err != nil { diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index 57b02539..b308bb93 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -228,19 +228,7 @@ func (gui *Gui) handleServicePause(g *gocui.Gui, v *gocui.View) error { return nil } - return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() error { - if service.Container.Details.State.Paused { - err = service.Container.Unpause() - } else { - err = service.Container.Pause() - } - - if err != nil { - return gui.createErrorPanel(gui.g, err.Error()) - } - - return gui.refreshContainersAndServices() - }) + return gui.PauseContainer(service.Container) } func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error {