This commit is contained in:
Max 2025-04-16 21:23:12 +03:00
parent ae40c918e8
commit 5e65f062d4

View File

@ -1,6 +1,7 @@
package routes package routes
import ( import (
"context"
"enshi/middleware" "enshi/middleware"
"enshi/middleware/getters" "enshi/middleware/getters"
"enshi/routes/authRoutes" "enshi/routes/authRoutes"
@ -10,16 +11,28 @@ import (
"enshi/routes/userProfileRoutes" "enshi/routes/userProfileRoutes"
userroutes "enshi/routes/userRoutes" userroutes "enshi/routes/userRoutes"
voteroutes "enshi/routes/voteRoutes" voteroutes "enshi/routes/voteRoutes"
"io"
"log" "log"
"net/http" "net/http"
"os"
"strings" "strings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/opentracing-contrib/go-gin/ginhttp"
"github.com/opentracing/opentracing-go" "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
"github.com/uber/jaeger-client-go" "go.opentelemetry.io/otel"
jaegercfg "github.com/uber/jaeger-client-go/config" "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"google.golang.org/grpc/credentials"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
)
var (
serviceName = os.Getenv("SERVICE_NAME")
collectorURL = os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
insecure = os.Getenv("INSECURE_MODE")
) )
func testCookie(c *gin.Context) { func testCookie(c *gin.Context) {
@ -48,40 +61,55 @@ func testAuth(c *gin.Context) {
) )
} }
func initJaeger(service string) (opentracing.Tracer, io.Closer, error) { func initTracer() func(context.Context) error {
cfg := jaegercfg.Configuration{
ServiceName: service, var secureOption otlptracegrpc.Option
Sampler: &jaegercfg.SamplerConfig{
Type: jaeger.SamplerTypeConst, // sample every trace; for production consider probabilistic sampling if strings.ToLower(insecure) == "false" || insecure == "0" || strings.ToLower(insecure) == "f" {
Param: 1, secureOption = otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, ""))
}, } else {
Reporter: &jaegercfg.ReporterConfig{ secureOption = otlptracegrpc.WithInsecure()
LogSpans: true,
LocalAgentHostPort: "localhost:6831", // make sure this matches your Docker settings
},
} }
tracer, closer, err := cfg.NewTracer() exporter, err := otlptrace.New(
return tracer, closer, err context.Background(),
otlptracegrpc.NewClient(
secureOption,
otlptracegrpc.WithEndpoint(collectorURL),
),
)
if err != nil {
log.Fatalf("Failed to create exporter: %v", err)
}
resources, err := resource.New(
context.Background(),
resource.WithAttributes(
attribute.String("service.name", serviceName),
attribute.String("library.language", "go"),
),
)
if err != nil {
log.Fatalf("Could not set resources: %v", err)
}
otel.SetTracerProvider(
sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithBatcher(exporter),
sdktrace.WithResource(resources),
),
)
return exporter.Shutdown
} }
func SetupRotes(g *gin.Engine) error { func SetupRotes(g *gin.Engine) error {
InitMiddlewareProvider() InitMiddlewareProvider()
// Initialize Jaeger Tracer cleanup := initTracer()
tracer, closer, err := initJaeger("go-gin-jaeger-example") defer cleanup(context.Background())
if err != nil {
log.Fatalf("Could not initialize jaeger tracer: %s", err.Error())
}
defer closer.Close()
// Set the global tracer (thread-safe and available everywhere)
opentracing.SetGlobalTracer(tracer)
// Attach the OpenTracing middleware to Gin.
// This middleware will extract any incoming tracing information and start a server span.
g.Use(ginhttp.Middleware(tracer))
g.Use(otelgin.Middleware(serviceName))
g.Use(middleware.CORSMiddleware()) g.Use(middleware.CORSMiddleware())
g.Use(middleware.TargetMiddleware()) g.Use(middleware.TargetMiddleware())