Supervisor proxies metrics

This commit is contained in:
Radon Rosborough 2022-02-12 09:31:19 -08:00
parent 9cde685a25
commit b93477132c
1 changed files with 27 additions and 3 deletions

View File

@ -34,6 +34,9 @@ import (
const bluePort = 6229 const bluePort = 6229
const greenPort = 6230 const greenPort = 6230
const blueMetricsPort = 6231
const greenMetricsPort = 6232
const blueName = "riju-app-blue" const blueName = "riju-app-blue"
const greenName = "riju-app-green" const greenName = "riju-app-green"
@ -339,14 +342,17 @@ func (sv *supervisor) reload() error {
)) ))
} }
var port int var port int
var metricsPort int
var name string var name string
var oldName string var oldName string
if sv.isGreen { if sv.isGreen {
port = bluePort port = bluePort
metricsPort = blueMetricsPort
name = blueName name = blueName
oldName = greenName oldName = greenName
} else { } else {
port = greenPort port = greenPort
metricsPort = greenMetricsPort
name = greenName name = greenName
oldName = blueName oldName = blueName
} }
@ -356,7 +362,7 @@ func (sv *supervisor) reload() error {
"-v", "/var/cache/riju:/var/cache/riju", "-v", "/var/cache/riju:/var/cache/riju",
"-v", "/var/run/docker.sock:/var/run/docker.sock", "-v", "/var/run/docker.sock:/var/run/docker.sock",
"-p", fmt.Sprintf("127.0.0.1:%d:6119", port), "-p", fmt.Sprintf("127.0.0.1:%d:6119", port),
"-p", "127.0.0.1:6121:6121", "-p", fmt.Sprintf("127.0.0.1:%d:6121", metricsPort),
"-e", "ANALYTICS_TAG", "-e", "ANALYTICS_TAG",
"-e", "RIJU_DEPLOY_CONFIG", "-e", "RIJU_DEPLOY_CONFIG",
"-e", "SENTRY_DSN", "-e", "SENTRY_DSN",
@ -374,7 +380,7 @@ func (sv *supervisor) reload() error {
} }
sv.status("waiting for container to start up") sv.status("waiting for container to start up")
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
sv.status("checking that container is healthy") sv.status("checking that container responds to HTTP")
resp, err := http.Get(fmt.Sprintf("http://localhost:%d", port)) resp, err := http.Get(fmt.Sprintf("http://localhost:%d", port))
if err != nil { if err != nil {
return err return err
@ -385,7 +391,25 @@ func (sv *supervisor) reload() error {
return err return err
} }
if !strings.Contains(string(body), "python") { if !strings.Contains(string(body), "python") {
return errors.New("container did not appear to be healthy") return errors.New("container did not respond successfully to HTTP")
}
sv.status("checking that container exposes metrics")
resp, err = http.Get(fmt.Sprintf("http://localhost:%d/metrics", metricsPort))
if err != nil {
return err
}
defer resp.Body.Close()
body, err = io.ReadAll(resp.Body)
if err != nil {
return err
}
if !strings.Contains(string(body), "process_cpu_seconds_total") {
return errors.New("container did not expose metrics properly")
}
if sv.isGreen {
sv.status("switching from green to blue")
} else {
sv.status("switching from blue to green")
} }
sv.isGreen = !sv.isGreen sv.isGreen = !sv.isGreen
sv.status("stopping old container") sv.status("stopping old container")