in app/main.go [108:140]
func handler(w http.ResponseWriter, r *http.Request) {
// get trace context propagated from http request
prop := otel.GetTextMapPropagator()
ctx := prop.Extract(r.Context(), propagation.HeaderCarrier(r.Header))
tp := otel.GetTracerProvider()
tracer := tp.Tracer("example.com/trace")
ctx, span := tracer.Start(ctx, "foo")
defer span.End()
// extract current span ID
spanId := span.SpanContext().SpanID().String()
traceId := span.SpanContext().TraceID().String()
// open logging file
f, err := os.OpenFile("/logging/sample-app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatalf("Error opening log file: %s", err)
}
defer f.Close()
// log incoming request with spanID
logger := log.New(f, traceLogPrefix(traceId, spanId), log.LstdFlags)
logger.Printf("Request: %s %s", r.Method, r.URL.Path)
fmt.Fprintln(w, "Logged request to /logging/sample-app.log")
// write traces
generateSpans(ctx, tracer, logger, 10)
fmt.Fprintln(w, "Generated 10 spans!")
// update metric
counter.Add(ctx, 100)
fmt.Fprintln(w, "Updated sidecar-sample-counter metric!")
}