Supervisor -actually- proxies metrics

This commit is contained in:
Radon Rosborough 2022-02-12 19:00:27 -08:00
parent c916f91771
commit c7c2611222
1 changed files with 57 additions and 18 deletions

View File

@ -60,10 +60,12 @@ type reloadJob struct {
type supervisor struct { type supervisor struct {
config supervisorConfig config supervisorConfig
blueProxyHandler http.Handler blueProxyHandler http.Handler
greenProxyHandler http.Handler greenProxyHandler http.Handler
isGreen bool // blue-green deployment blueMetricsProxyHandler http.Handler
deployConfigHash string greenMetricsProxyHandler http.Handler
isGreen bool // blue-green deployment
deployConfigHash string
awsAccountNumber string awsAccountNumber string
awsRegion string awsRegion string
@ -106,7 +108,15 @@ func (sv *supervisor) scheduleReload() string {
return uuid return uuid
} }
func (sv *supervisor) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (sv *supervisor) serveHTTP(w http.ResponseWriter, r *http.Request, metricsPort bool) {
if metricsPort {
if sv.isGreen {
sv.greenMetricsProxyHandler.ServeHTTP(w, r)
} else {
sv.blueMetricsProxyHandler.ServeHTTP(w, r)
}
return
}
if strings.HasPrefix(r.URL.Path, "/api/supervisor") { if strings.HasPrefix(r.URL.Path, "/api/supervisor") {
authHeader := r.Header.Get("Authorization") authHeader := r.Header.Get("Authorization")
if authHeader == "" { if authHeader == "" {
@ -477,8 +487,8 @@ func main() {
} }
rijuInitVolume := exec.Command("riju-init-volume") rijuInitVolume := exec.Command("riju-init-volume")
rijuInitVolume.Stdout = rijuInitVolume.Stdout rijuInitVolume.Stdout = os.Stdout
rijuInitVolume.Stderr = rijuInitVolume.Stderr rijuInitVolume.Stderr = os.Stderr
if err := rijuInitVolume.Run(); err != nil { if err := rijuInitVolume.Run(); err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
@ -492,6 +502,15 @@ func main() {
log.Fatalln(err) log.Fatalln(err)
} }
blueMetricsUrl, err := url.Parse(fmt.Sprintf("http://localhost:%d", blueMetricsPort))
if err != nil {
log.Fatalln(err)
}
greenMetricsUrl, err := url.Parse(fmt.Sprintf("http://localhost:%d", greenMetricsPort))
if err != nil {
log.Fatalln(err)
}
awsCfg, err := awsConfig.LoadDefaultConfig(context.Background()) awsCfg, err := awsConfig.LoadDefaultConfig(context.Background())
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
@ -609,18 +628,38 @@ func main() {
} }
sv := &supervisor{ sv := &supervisor{
config: supervisorCfg, config: supervisorCfg,
blueProxyHandler: httputil.NewSingleHostReverseProxy(blueUrl), blueProxyHandler: httputil.NewSingleHostReverseProxy(blueUrl),
greenProxyHandler: httputil.NewSingleHostReverseProxy(greenUrl), greenProxyHandler: httputil.NewSingleHostReverseProxy(greenUrl),
isGreen: isGreen, blueMetricsProxyHandler: httputil.NewSingleHostReverseProxy(blueMetricsUrl),
deployConfigHash: deployCfgHash, greenMetricsProxyHandler: httputil.NewSingleHostReverseProxy(greenMetricsUrl),
s3: s3.NewFromConfig(awsCfg), isGreen: isGreen,
ecr: ecr.NewFromConfig(awsCfg), deployConfigHash: deployCfgHash,
awsRegion: awsCfg.Region, s3: s3.NewFromConfig(awsCfg),
awsAccountNumber: *ident.Account, ecr: ecr.NewFromConfig(awsCfg),
reloadJobs: map[string]*reloadJob{}, awsRegion: awsCfg.Region,
awsAccountNumber: *ident.Account,
reloadJobs: map[string]*reloadJob{},
} }
go sv.scheduleReload() go sv.scheduleReload()
go func() {
log.Println("listening on http://127.0.0.1:6121/metrics")
log.Fatalln(http.ListenAndServe(
"127.0.0.1:6121",
http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
sv.serveHTTP(w, r, true)
},
),
))
}()
log.Println("listening on http://0.0.0.0:80") log.Println("listening on http://0.0.0.0:80")
log.Fatalln(http.ListenAndServe("0.0.0.0:80", sv)) log.Fatalln(http.ListenAndServe(
"0.0.0.0:80",
http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
sv.serveHTTP(w, r, false)
},
),
))
} }