Compare commits

...

2 Commits

Author SHA1 Message Date
Svilen Markov e0c15c7782 Correctly identify unhealthy containers 2025-08-09 13:20:00 +07:00
Svilen Markov 270d1f83fd More icon tweaks 2025-08-06 07:13:58 +07:00
2 changed files with 14 additions and 11 deletions

@ -378,10 +378,11 @@ details[open] .summary::after {
.icon { .icon {
object-fit: contain; object-fit: contain;
user-select: none;
} }
.icon:not(.colored-icon) { .icon:not(.colored-icon) {
opacity: 0.8; opacity: 0.85;
filter: grayscale(0.2); filter: grayscale(0.2);
transition: opacity 0.2s, filter 0.2s; transition: opacity 0.2s, filter 0.2s;
} }

@ -49,7 +49,7 @@ func (widget *dockerContainersWidget) update(ctx context.Context) {
return return
} }
containers.sortByStateIconThenTitle() containers.sortByStateIconThenName()
widget.Containers = containers widget.Containers = containers
} }
@ -125,7 +125,7 @@ type dockerContainer struct {
type dockerContainerList []dockerContainer type dockerContainerList []dockerContainer
func (containers dockerContainerList) sortByStateIconThenTitle() { func (containers dockerContainerList) sortByStateIconThenName() {
p := &dockerContainerStateIconPriorities p := &dockerContainerStateIconPriorities
sort.SliceStable(containers, func(a, b int) bool { sort.SliceStable(containers, func(a, b int) bool {
@ -137,13 +137,17 @@ func (containers dockerContainerList) sortByStateIconThenTitle() {
}) })
} }
func dockerContainerStateToStateIcon(state string) string { func dockerContainerStateToStateIcon(container *dockerContainerJsonResponse) string {
switch state { if strings.Contains(strings.ToLower(container.Status), "(unhealthy)") {
return dockerContainerStateIconWarn
}
switch strings.ToLower(container.State) {
case "running": case "running":
return dockerContainerStateIconOK return dockerContainerStateIconOK
case "paused": case "paused":
return dockerContainerStateIconPaused return dockerContainerStateIconPaused
case "exited", "unhealthy", "dead": case "exited", "dead":
return dockerContainerStateIconWarn return dockerContainerStateIconWarn
default: default:
return dockerContainerStateIconOther return dockerContainerStateIconOther
@ -187,13 +191,13 @@ func fetchDockerContainers(
dc.Children = append(dc.Children, dockerContainer{ dc.Children = append(dc.Children, dockerContainer{
Name: deriveDockerContainerName(child, formatNames), Name: deriveDockerContainerName(child, formatNames),
StateText: child.Status, StateText: child.Status,
StateIcon: dockerContainerStateToStateIcon(strings.ToLower(child.State)), StateIcon: dockerContainerStateToStateIcon(child),
}) })
} }
} }
} }
dc.Children.sortByStateIconThenTitle() dc.Children.sortByStateIconThenName()
stateIconSupersededByChild := false stateIconSupersededByChild := false
for i := range dc.Children { for i := range dc.Children {
@ -204,7 +208,7 @@ func fetchDockerContainers(
} }
} }
if !stateIconSupersededByChild { if !stateIconSupersededByChild {
dc.StateIcon = dockerContainerStateToStateIcon(dc.State) dc.StateIcon = dockerContainerStateToStateIcon(container)
} }
dockerContainers = append(dockerContainers, dc) dockerContainers = append(dockerContainers, dc)
@ -278,7 +282,6 @@ func isDockerContainerHidden(container *dockerContainerJsonResponse, hideByDefau
return hideByDefault return hideByDefault
} }
func fetchDockerContainersFromSource( func fetchDockerContainersFromSource(
source string, source string,
category string, category string,
@ -312,7 +315,6 @@ func fetchDockerContainersFromSource(
} }
} }
fetchAll := ternary(runningOnly, "false", "true") fetchAll := ternary(runningOnly, "false", "true")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() defer cancel()