kube/testapp/db/main.go
2019-08-04 21:51:11 +02:00

89 lines
1.8 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"log"
"net"
"net/http"
"os"
"time"
)
var version string
var tracer = []string{
"x-request-id",
"x-b3-traceid",
"x-b3-spanid",
"x-b3-parentspanid",
"x-b3-sampled",
"x-b3-flags",
"x-ot-span-context",
}
func trace(rd, rs *http.Request) {
if rd == nil || rs == nil {
return
}
for _, t := range tracer {
v := rs.Header.Get(t)
if v != "" {
rd.Header.Set(t, v)
}
}
}
func get(c *http.Client, req *http.Request, url string) (body string, err error) {
r, err := http.NewRequest("GET", url, nil)
if err != nil {
return
}
trace(r, req)
resp, err := c.Do(r)
if err != nil {
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
body = string(b)
return
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s %s", r.RemoteAddr, r.Method, r.URL)
h, err := os.Hostname()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
c := &http.Client{Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: 5 * time.Second,
}).DialContext,
}}
body, err := get(c, r, "http://testapp-api:8080/healthz")
if err != nil {
body = err.Error()
}
fmt.Fprintf(w, "%s (%s) API Health: '%s'", h, version, body)
})
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s %s", r.RemoteAddr, r.Method, r.URL)
fmt.Fprintf(w, "db: ok")
})
http.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
})
s := &http.Server{
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
Addr: ":8080",
}
log.Fatal(s.ListenAndServe())
}