fabiocicerchia/go-proxy-cache

View on GitHub
telemetry/tracing/provider.go

Summary

Maintainability
A
0 mins
Test Coverage
package tracing

//                                                                         __
// .-----.-----.______.-----.----.-----.--.--.--.--.______.----.---.-.----|  |--.-----.
// |  _  |  _  |______|  _  |   _|  _  |_   _|  |  |______|  __|  _  |  __|     |  -__|
// |___  |_____|      |   __|__| |_____|__.__|___  |      |____|___._|____|__|__|_____|
// |_____|            |__|                   |_____|
//
// Copyright (c) 2023 Fabio Cicerchia. https://fabiocicerchia.it. MIT License
// Repo: https://github.com/fabiocicerchia/go-proxy-cache

import (
    "os"

    "go.opentelemetry.io/otel/attribute"
    "go.opentelemetry.io/otel/exporters/jaeger"
    "go.opentelemetry.io/otel/sdk/resource"
    tracesdk "go.opentelemetry.io/otel/sdk/trace"
    semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
)

// NewJaegerProvider returns a new instance of Jaeger.
func NewJaegerProvider(appVersion string, jaegerEndpoint string, sampleRatio float64) (*tracesdk.TracerProvider, error) {
    // Create the Jaeger exporter
    // TODO: is it good to have the following settings: LocalAgentHostPort, User, Password.
    exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(jaegerEndpoint)))
    if err != nil {
        return nil, err
    }

    tp := tracesdk.NewTracerProvider(
        tracesdk.WithSampler(tracesdk.TraceIDRatioBased(sampleRatio)),
        // Always be sure to batch in production.
        tracesdk.WithBatcher(exp),
        // Record information about this application in a Resource.
        tracesdk.WithResource(resource.NewWithAttributes(
            semconv.SchemaURL,
            semconv.ServiceNameKey.String("go-proxy-cache"),
            attribute.String("service.version", appVersion),
            attribute.String("service.env", os.Getenv("TRACING_ENV")),
        )),
    )
    return tp, nil
}