From 2f08e0942afb26ddffd82b0ba1fc61ea3b27c15c Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Wed, 11 May 2022 19:48:11 +1000 Subject: [PATCH] support starting a service --- docs/Config.md | 1 + pkg/commands/service.go | 10 ++++++++++ pkg/config/app_config.go | 4 ++++ pkg/gui/keybindings.go | 7 +++++++ pkg/gui/services_panel.go | 15 +++++++++++++++ pkg/i18n/english.go | 4 ++++ 6 files changed, 41 insertions(+) diff --git a/docs/Config.md b/docs/Config.md index 485d28e3..1636b210 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -34,6 +34,7 @@ logs: commandTemplates: dockerCompose: docker-compose restartService: '{{ .DockerCompose }} restart {{ .Service.Name }}' + startService: '{{ .DockerCompose }} start {{ .Service.Name }}' stopService: '{{ .DockerCompose }} stop {{ .Service.Name }}' serviceLogs: '{{ .DockerCompose }} logs --since=60m --follow {{ .Service.Name }}' viewServiceLogs: '{{ .DockerCompose }} logs --follow {{ .Service.Name }}' diff --git a/pkg/commands/service.go b/pkg/commands/service.go index ca8af1db..269e119f 100644 --- a/pkg/commands/service.go +++ b/pkg/commands/service.go @@ -56,6 +56,16 @@ func (s *Service) Restart() error { return s.OSCommand.RunCommand(command) } +// Restart starts the service +func (s *Service) Start() error { + templateString := s.OSCommand.Config.UserConfig.CommandTemplates.StartService + command := utils.ApplyTemplate( + templateString, + s.DockerCommand.NewCommandObject(CommandObject{Service: s}), + ) + return s.OSCommand.RunCommand(command) +} + // Attach attaches to the service func (s *Service) Attach() (*exec.Cmd, error) { return s.Container.Attach() diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go index b9aef7ce..5526feb7 100644 --- a/pkg/config/app_config.go +++ b/pkg/config/app_config.go @@ -121,6 +121,9 @@ type CommandTemplatesConfig struct { // .Service.Name }} RestartService string `yaml:"restartService,omitempty"` + // StartService is just like the above but for starting + StartService string `yaml:"startService,omitempty"` + // DockerCompose is for your docker-compose command. You may want to combine a // few different docker-compose.yml files together, in which case you can set // this to "docker-compose -f foo/docker-compose.yml -f @@ -326,6 +329,7 @@ func GetDefaultConfig() UserConfig { CommandTemplates: CommandTemplatesConfig{ DockerCompose: "docker-compose", RestartService: "{{ .DockerCompose }} restart {{ .Service.Name }}", + StartService: "{{ .DockerCompose }} start {{ .Service.Name }}", RebuildService: "{{ .DockerCompose }} up -d --build {{ .Service.Name }}", RecreateService: "{{ .DockerCompose }} up -d --force-recreate {{ .Service.Name }}", StopService: "{{ .DockerCompose }} stop {{ .Service.Name }}", diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index cfb9c42f..875a26e9 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -297,6 +297,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleServiceRestart, Description: gui.Tr.Restart, }, + { + ViewName: "services", + Key: 'S', + Modifier: gocui.ModNone, + Handler: gui.handleServiceStart, + Description: gui.Tr.Start, + }, { ViewName: "services", Key: 'a', diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index d311afce..da7a8b6e 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -251,6 +251,21 @@ func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error { }) } +func (gui *Gui) handleServiceStart(g *gocui.Gui, v *gocui.View) error { + service, err := gui.getSelectedService() + if err != nil { + return nil + } + + return gui.WithWaitingStatus(gui.Tr.StartingStatus, func() error { + if err := service.Start(); err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + return nil + }) +} + func (gui *Gui) handleServiceAttach(g *gocui.Gui, v *gocui.View) error { service, err := gui.getSelectedService() if err != nil { diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index b7c53864..5dbfdb5c 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -40,6 +40,7 @@ type TranslationSet struct { FocusMain string StopContainer string RestartingStatus string + StartingStatus string StoppingStatus string RemovingStatus string RunningCustomCommandStatus string @@ -47,6 +48,7 @@ type TranslationSet struct { RemoveService string Stop string Restart string + Start string Rebuild string Recreate string PreviousContext string @@ -108,6 +110,7 @@ func englishSet() TranslationSet { PruningStatus: "pruning", RemovingStatus: "removing", RestartingStatus: "restarting", + StartingStatus: "starting", StoppingStatus: "stopping", RunningCustomCommandStatus: "running custom command", RunningBulkCommandStatus: "running bulk command", @@ -144,6 +147,7 @@ func englishSet() TranslationSet { RemoveService: "remove containers", Stop: "stop", Restart: "restart", + Start: "start", Rebuild: "rebuild", Recreate: "recreate", PreviousContext: "previous tab",