in sandbox/ho11y/main.go [325:401]
func main() {
// configure log in JSON format:
log.SetFormatter(&log.JSONFormatter{})
logdest, ldprovided := os.LookupEnv("HO11Y_LOG_DEST")
if ldprovided {
switch logdest {
case "stdout":
log.SetOutput(os.Stdout)
default:
log.SetOutput(os.Stderr)
}
}
// make sure to provide random values:
rand.Seed(time.Now().UTC().UnixNano())
// handle service port setting from environment:
port := ":8765"
useport, pprovided := os.LookupEnv("HO11Y_PORT")
if pprovided {
port = ":" + useport
}
// handle injection mode setting from environment:
if os.Getenv("HO11Y_INJECT_FAILURE") != "" {
log.Info("Failure injection enabled, dropping half of the requests")
}
// handle downstream settings from environment:
for i := range downstreams {
downstreams[i] = os.Getenv("DOWNSTREAM" + strconv.Itoa(i))
if downstreams[i] != "" {
log.Info("Using downstream " + strconv.Itoa(i) + ": " + downstreams[i])
}
}
// handle throttle setting from environment:
enableThrottling = false
tpv, tprovided := os.LookupEnv("HO11Y_CUTOFF_TPS")
if tprovided {
parsedval, err := strconv.Atoi(tpv)
if err == nil {
tpsCutoffVal = float64(parsedval)
enableThrottling = true
go manageThrottle()
log.Info("Throttling enabled with a " + tpv + " TPS cutoff point")
} else {
log.Error("Invalid cutoff TPS value provided")
}
}
// need to explicitly register those bad dawgs:
prometheus.MustRegister(payloadsSummary)
prometheus.MustRegister(payloadsHistogram)
// kick off randomized metrics:
go randValues()
// configure OTEL tracing:
initProvider()
log.Info("Init instrumentation done")
// set up HTTP API and launch service:
exposeOpenMetrics := true
_, omprovided := os.LookupEnv("DISABLE_OM")
if omprovided {
exposeOpenMetrics = false
log.Info("OpenMetrics disabled")
}
r := mux.NewRouter()
r.Use(otelmux.Middleware("ho11y-svc"))
r.HandleFunc("/", handler).Methods(http.MethodGet)
r.Handle("/metrics", promhttp.HandlerFor(
prometheus.DefaultGatherer,
promhttp.HandlerOpts{
EnableOpenMetrics: exposeOpenMetrics,
},
))
ho11yinstance := os.Getenv("OTEL_RESOURCE_ATTRIB")
if ho11yinstance == "" {
ho11yinstance = "ho11y-svc"
}
log.Infof("Launching ho11y: I am [%s] listening on port %s on all local IPs.", ho11yinstance, port)
log.Fatal(http.ListenAndServe(port, r))
}