diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 7b8a172e..844ef2d3 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -18,11 +18,11 @@ import ( // list panel functions func (gui *Gui) getContainerContexts() []string { - return []string{"logs", "stats", "config", "top"} + return []string{"logs", "stats", "env", "config", "top"} } func (gui *Gui) getContainerContextTitles() []string { - return []string{gui.Tr.LogsTitle, gui.Tr.StatsTitle, gui.Tr.ConfigTitle, gui.Tr.TopTitle} + return []string{gui.Tr.LogsTitle, gui.Tr.StatsTitle, gui.Tr.EnvTitle, gui.Tr.ConfigTitle, gui.Tr.TopTitle} } func (gui *Gui) getSelectedContainer() (*commands.Container, error) { @@ -75,6 +75,10 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View) error { if err := gui.renderContainerConfig(container); err != nil { return err } + case "env": + if err := gui.renderContainerEnv(container); err != nil { + return err + } case "stats": if err := gui.renderContainerStats(container); err != nil { return err @@ -90,6 +94,33 @@ func (gui *Gui) handleContainerSelect(g *gocui.Gui, v *gocui.View) error { return nil } +func (gui *Gui) renderContainerEnv(container *commands.Container) error { + mainView := gui.getMainView() + mainView.Autoscroll = false + mainView.Wrap = gui.Config.UserConfig.Gui.WrapMainPanel + envVariablesList := [][]string{} + renderedTable := gui.Tr.NothingToDisplay + if len(container.Details.Config.Env) > 0 { + var err error + for _, env := range container.Details.Config.Env { + splitEnv := strings.SplitN(env, "=", 2) + envVariablesList = append(envVariablesList, + []string{ + utils.ColoredString(splitEnv[0]+":", color.FgGreen), + utils.ColoredString(splitEnv[1], color.FgYellow), + }) + } + renderedTable, err = utils.RenderTable(envVariablesList) + if err != nil { + gui.Log.Error(err) + renderedTable = gui.Tr.CannotDisplayEnvVariables + } + } + return gui.T.NewTask(func(stop chan struct{}) { + gui.renderString(gui.g, "main", renderedTable) + }) +} + func (gui *Gui) renderContainerConfig(container *commands.Container) error { mainView := gui.getMainView() mainView.Autoscroll = false diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index fd2bdd45..c47521b0 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -15,11 +15,16 @@ import ( // list panel functions func (gui *Gui) getServiceContexts() []string { - return []string{"logs", "stats", "container-config", "top"} + return []string{"logs", "stats", "container-env", "container-config", "top"} } func (gui *Gui) getServiceContextTitles() []string { - return []string{gui.Tr.LogsTitle, gui.Tr.StatsTitle, gui.Tr.ContainerConfigTitle, gui.Tr.TopTitle} + return []string{ + gui.Tr.LogsTitle, + gui.Tr.StatsTitle, + gui.Tr.ContainerEnvTitle, + gui.Tr.ContainerConfigTitle, + gui.Tr.TopTitle} } func (gui *Gui) getSelectedService() (*commands.Service, error) { @@ -73,6 +78,13 @@ func (gui *Gui) handleServiceSelect(g *gocui.Gui, v *gocui.View) error { if err := gui.renderServiceStats(service); err != nil { return err } + case "container-env": + if service.Container == nil { + return gui.renderString(gui.g, "main", gui.Tr.NoContainer) + } + if err := gui.renderContainerEnv(service.Container); err != nil { + return err + } case "container-config": if service.Container == nil { return gui.renderString(gui.g, "main", gui.Tr.NoContainer) diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go index e455567e..9abce8e9 100644 --- a/pkg/i18n/dutch.go +++ b/pkg/i18n/dutch.go @@ -64,11 +64,15 @@ func dutchSet() TranslationSet { ErrorTitle: "Fout", LogsTitle: "Logs", ConfigTitle: "Config", + EnvTitle: "Env", DockerComposeConfigTitle: "Docker-Compose Configuratie", TopTitle: "Top", StatsTitle: "Stats", CreditsTitle: "Over", ContainerConfigTitle: "Container Configuratie", + ContainerEnvTitle: "Container Env", + NothingToDisplay: "Nothing to display", + CannotDisplayEnvVariables: "Something went wrong while displaying environment variables", NoContainers: "Geen containers", NoContainer: "Geen container", diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 8551703c..ce509b63 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -84,12 +84,16 @@ type TranslationSet struct { OpenInBrowser string SortContainersByState string - LogsTitle string - ConfigTitle string - DockerComposeConfigTitle string - StatsTitle string - CreditsTitle string - ContainerConfigTitle string + LogsTitle string + ConfigTitle string + EnvTitle string + DockerComposeConfigTitle string + StatsTitle string + CreditsTitle string + ContainerConfigTitle string + ContainerEnvTitle string + NothingToDisplay string + CannotDisplayEnvVariables string No string Yes string @@ -168,11 +172,15 @@ func englishSet() TranslationSet { ErrorTitle: "Error", LogsTitle: "Logs", ConfigTitle: "Config", + EnvTitle: "Env", DockerComposeConfigTitle: "Docker-Compose Config", TopTitle: "Top", StatsTitle: "Stats", CreditsTitle: "About", ContainerConfigTitle: "Container Config", + ContainerEnvTitle: "Container Env", + NothingToDisplay: "Nothing to display", + CannotDisplayEnvVariables: "Something went wrong while displaying environment variables", NoContainers: "No containers", NoContainer: "No container", diff --git a/pkg/i18n/german.go b/pkg/i18n/german.go index 2c5a816e..7edcfc81 100644 --- a/pkg/i18n/german.go +++ b/pkg/i18n/german.go @@ -63,11 +63,15 @@ func germanSet() TranslationSet { ErrorTitle: "Fehler", LogsTitle: "Protokoll", ConfigTitle: "Konfiguration", + EnvTitle: "Env", DockerComposeConfigTitle: "Docker-Compose Konfiguration", TopTitle: "Top", StatsTitle: "Statistiken", CreditsTitle: "Über Uns", ContainerConfigTitle: "Container Konfiguration", + ContainerEnvTitle: "Container Env", + NothingToDisplay: "Nothing to display", + CannotDisplayEnvVariables: "Something went wrong while displaying environment variables", NoContainers: "Keine Container", NoContainer: "Kein Container", diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go index 53681fa4..8762821f 100644 --- a/pkg/i18n/polish.go +++ b/pkg/i18n/polish.go @@ -63,11 +63,15 @@ func polishSet() TranslationSet { ErrorTitle: "Błąd", LogsTitle: "Logi", ConfigTitle: "Konfiguracja", + EnvTitle: "Env", DockerComposeConfigTitle: "Konfiguracja docker-compose", TopTitle: "Top", StatsTitle: "Staty", CreditsTitle: "O", ContainerConfigTitle: "Konfiguracja kontenera", + ContainerEnvTitle: "Container Env", + NothingToDisplay: "Nothing to display", + CannotDisplayEnvVariables: "Something went wrong while displaying environment variables", NoContainers: "Brak kontenerów", NoContainer: "Brak kontenera", diff --git a/pkg/i18n/turkish.go b/pkg/i18n/turkish.go index a728dabf..22b2604d 100644 --- a/pkg/i18n/turkish.go +++ b/pkg/i18n/turkish.go @@ -63,11 +63,15 @@ func turkishSet() TranslationSet { ErrorTitle: "Hata", LogsTitle: "Kayitlar", ConfigTitle: "Ayarlar", + EnvTitle: "Env", DockerComposeConfigTitle: "Docker-Compose Ayar", TopTitle: "Top", StatsTitle: "Durumlar", CreditsTitle: "Hakkinda", ContainerConfigTitle: "Konteyner Ayar", + ContainerEnvTitle: "Konteyner Env", + NothingToDisplay: "Nothing to display", + CannotDisplayEnvVariables: "Something went wrong while displaying environment variables", NoContainers: "Konteynerler yok", NoContainer: "Konteyner yok", diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index e05da371..de6ec340 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -165,6 +165,9 @@ func renderDisplayableList(items []Displayable, config RenderListConfig) (string // RenderTable takes an array of string arrays and returns a table containing the values func RenderTable(stringArrays [][]string) (string, error) { + if len(stringArrays) == 0 { + return "", nil + } if !displayArraysAligned(stringArrays) { return "", errors.New("Each item must return the same number of strings to display") }