From 14cc0209f51ab762553fa5d64490e8305300d339 Mon Sep 17 00:00:00 2001 From: free6k Date: Sat, 18 Jun 2022 21:27:50 +0300 Subject: [PATCH] Added the health status from healthcheck to RuntimeContainer struct --- README.md | 7 ++++++- internal/context/context.go | 5 +++++ internal/generator/generator.go | 5 ++++- internal/generator/generator_test.go | 5 +++++ templates/nginx.tmpl | 6 ++++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5e8362f6..2dc11ef0 100644 --- a/README.md +++ b/README.md @@ -282,7 +282,12 @@ type SwarmNode struct { } type State struct { - Running bool + Running bool + Health Health +} + +type Health struct { + Status string } // Accessible from the root in templates as .Docker diff --git a/internal/context/context.go b/internal/context/context.go index 1d5e75a8..89670a9f 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -81,6 +81,11 @@ type Volume struct { type State struct { Running bool + Health Health +} + +type Health struct { + Status string } type RuntimeContainer struct { diff --git a/internal/generator/generator.go b/internal/generator/generator.go index 6f0d08df..40089aa1 100644 --- a/internal/generator/generator.go +++ b/internal/generator/generator.go @@ -275,7 +275,7 @@ func (g *generator) generateFromEvents() { time.Sleep(10 * time.Second) break } - if event.Status == "start" || event.Status == "stop" || event.Status == "die" { + if event.Status == "start" || event.Status == "stop" || event.Status == "die" || strings.Index(event.Status, "health_status:") != -1 { log.Printf("Received event %s for container %s", event.Status, event.ID[:12]) // fanout event to all watchers for _, watcher := range watchers { @@ -389,6 +389,9 @@ func (g *generator) getContainers() ([]*context.RuntimeContainer, error) { }, State: context.State{ Running: container.State.Running, + Health: context.Health{ + Status: container.State.Health.Status, + }, }, Name: strings.TrimLeft(container.Name, "/"), Hostname: container.Config.Hostname, diff --git a/internal/generator/generator_test.go b/internal/generator/generator_test.go index f82b43fd..8932ca47 100644 --- a/internal/generator/generator_test.go +++ b/internal/generator/generator_test.go @@ -87,6 +87,11 @@ func TestGenerateFromEvents(t *testing.T) { Pid: 400, ExitCode: 0, StartedAt: time.Now(), + Health: docker.Health{ + Status: "healthy", + FailingStreak: 5, + Log: []docker.HealthCheck{}, + }, }, Image: "0ff407d5a7d9ed36acdf3e75de8cc127afecc9af234d05486be2981cdc01a38d", NetworkSettings: &docker.NetworkSettings{ diff --git a/templates/nginx.tmpl b/templates/nginx.tmpl index f4aa32e0..bab7dc6f 100644 --- a/templates/nginx.tmpl +++ b/templates/nginx.tmpl @@ -13,6 +13,12 @@ upstream {{ $host }} { {{ $addrLen := len $value.Addresses }} {{ $network := index $value.Networks 0 }} + + {{ if $value.State.Health.Status }} + {{ if ne $value.State.Health.Status "healthy" }} + {{ continue }} + {{ end }} + {{ end }} {{/* If only 1 port exposed, use that */}} {{ if eq $addrLen 1 }}