package main
import (
"io"
"net/http"
"golang.org/x/net/context/ctxhttp"
"fmt"
"io/ioutil"
"time"
"errors"
"strconv"
_ "github.com/aws/aws-xray-sdk-go/plugins/ec2"
_ "github.com/aws/aws-xray-sdk-go/plugins/ecs"
"github.com/aws/aws-xray-sdk-go/xray"
)
func init() {
xray.Configure(xray.Config{
DaemonAddr: "xray-service.default:2000",
LogLevel: "info",
})
}
var tr = &http.Transport{
MaxIdleConns: 20,
IdleConnTimeout: 30 * time.Second,
}
func main() {
http.Handle("/api", xray.Handler(xray.NewFixedSegmentNamer("x-ray-sample-front-k8s"), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
slow := param(r, "slow", "false")
repeat := param(r, "repeat", "false")
count := 1
if repeat == "true" {
count = 20
}
for idx := 0; idx < count; idx++ {
if resp, err := backend(r, slow); err == nil {
io.WriteString(w, fmt.Sprintf("%s
", resp))
} else {
io.WriteString(w, fmt.Sprintf("Unable to make request to: http://x-ray-sample-back-k8s.default.svc.cluster.local: %v
", err))
}
}
})))
// Write the landing page
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
io.WriteString(w, html)
})
http.ListenAndServe(":8080", nil)
}
func backend(r *http.Request, slow string) (string, error) {
resp, err := ctxhttp.Get(
r.Context(),
xray.Client(&http.Client{Transport: tr}),
fmt.Sprintf("http://x-ray-sample-back-k8s.default.svc.cluster.local?slow=%s", slow),
)
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
} else {
return "", errors.New(fmt.Sprintf("Bad backend request - http status: %s", strconv.Itoa(resp.StatusCode)))
}
}
func param(r *http.Request, name, base string) string {
if vars, ok := r.URL.Query()[name]; ok && len(vars) > 0 && len(vars[0]) > 0 {
return vars[0]
}
return base
}
var html = `
oooo$$$$$$$$$$$$oooo oo$$$$$$$$$$$$$$$$$$$$$$$$o oo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o o$ $$ o$ o $ oo o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o $$ $$ $$o$ oo $ $ "$ o$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$o $$$o$$o$ "$$$$$$o$ o$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$o $$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ """$$$ "$$$""""$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ "$$$ $$$ o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ "$$$o o$$" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$o $$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$""$$$$$$ooooo$$$$o o$$$oooo$$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ o$$$$$$$$$$$$$$$$$ $$$$$$$$"$$$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$"""""""" """" $$$$ "$$$$$$$$$$$$$$$$$$$$$$$$$$$$" o$$$ "$$$o """$$$$$$$$$$$$$$$$$$"$$" $$$ $$$o "$$""$$$$$$"""" o$$$ $$$$o o$$$" "$$$$o o$$$$$$o"$$$$o o$$$$ "$$$$$oo ""$$$$o$$$$$o o$$$$"" ""$$$$$oooo "$$$o$$$$$$$$$""" ""$$$$$$$oo $$$$$$$$$$ """"$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$" "$$$""""