func handler()

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!")
}