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 {
config supervisorConfig
blueProxyHandler http.Handler
greenProxyHandler http.Handler
isGreen bool // blue-green deployment
deployConfigHash string
blueProxyHandler http.Handler
greenProxyHandler http.Handler
blueMetricsProxyHandler http.Handler
greenMetricsProxyHandler http.Handler
isGreen bool // blue-green deployment
deployConfigHash string
awsAccountNumber string
awsRegion string
@ -106,7 +108,15 @@ func (sv *supervisor) scheduleReload() string {
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") {
authHeader := r.Header.Get("Authorization")
if authHeader == "" {
@ -477,8 +487,8 @@ func main() {
}
rijuInitVolume := exec.Command("riju-init-volume")
rijuInitVolume.Stdout = rijuInitVolume.Stdout
rijuInitVolume.Stderr = rijuInitVolume.Stderr
rijuInitVolume.Stdout = os.Stdout
rijuInitVolume.Stderr = os.Stderr
if err := rijuInitVolume.Run(); err != nil {
log.Fatalln(err)
}
@ -492,6 +502,15 @@ func main() {
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())
if err != nil {
log.Fatalln(err)
@ -609,18 +628,38 @@ func main() {
}
sv := &supervisor{
config: supervisorCfg,
blueProxyHandler: httputil.NewSingleHostReverseProxy(blueUrl),
greenProxyHandler: httputil.NewSingleHostReverseProxy(greenUrl),
isGreen: isGreen,
deployConfigHash: deployCfgHash,
s3: s3.NewFromConfig(awsCfg),
ecr: ecr.NewFromConfig(awsCfg),
awsRegion: awsCfg.Region,
awsAccountNumber: *ident.Account,
reloadJobs: map[string]*reloadJob{},
config: supervisorCfg,
blueProxyHandler: httputil.NewSingleHostReverseProxy(blueUrl),
greenProxyHandler: httputil.NewSingleHostReverseProxy(greenUrl),
blueMetricsProxyHandler: httputil.NewSingleHostReverseProxy(blueMetricsUrl),
greenMetricsProxyHandler: httputil.NewSingleHostReverseProxy(greenMetricsUrl),
isGreen: isGreen,
deployConfigHash: deployCfgHash,
s3: s3.NewFromConfig(awsCfg),
ecr: ecr.NewFromConfig(awsCfg),
awsRegion: awsCfg.Region,
awsAccountNumber: *ident.Account,
reloadJobs: map[string]*reloadJob{},
}
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.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)
},
),
))
}