func main()

in devops/otel-trace-exemplar/recursive/main.go [136:175]


func main() {
	log.Print("starting tracer provider")
	tp, err := initTracer()
	if err != nil {
		log.Fatalf("failed to start OpenTelemetry Trace config: %v", err)
	}
	mp, err := initMeter()
	if err != nil {
		log.Fatalf("failed to start OpenTelemetry Meter config: %v", err)
	}
	defer func() {
		if err := tp.Shutdown(context.Background()); err != nil {
			log.Fatalf("failed to shutdown TraceProvider: %v", err)
		}
		if err := mp.Shutdown(context.Background()); err != nil {
			log.Fatalf("failed to shutdown MeterProvider: %v", err)
		}
	}()
	log.Print("launch telemetry data generator")

	meter := mp.Meter("demo")
	histogram, err = meter.Int64Histogram(
		"exemplar/root.latency",
		metric.WithDescription("latency of the root handler"),
		metric.WithUnit("ms"),
	)
	if err != nil {
		log.Fatalf("failed to initialize histogram: %v", err)
	}

	http.HandleFunc("/_hello", func(w http.ResponseWriter, _ *http.Request) {
		w.WriteHeader(http.StatusOK)
		w.Write([]byte("ok"))
	})
	otelHandler := otelhttp.NewHandler(http.HandlerFunc(root), "client.handler")
	http.Handle("/root", otelHandler)
	if err := http.ListenAndServe(":8080", nil); err != nil {
		log.Fatalf("failed to start server: %v", err)
	}
}