Add some tracing to service
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
)
|
||||
|
||||
func (s *UserServer) MiddlewareLogging(next http.Handler) http.Handler {
|
||||
@@ -24,3 +26,11 @@ func (s *UserServer) MiddlewareLogging(next http.Handler) http.Handler {
|
||||
}
|
||||
return http.HandlerFunc(fn)
|
||||
}
|
||||
|
||||
func (s *UserServer) MiddlewareTracing(next http.Handler) http.Handler {
|
||||
fn := func(w http.ResponseWriter, r *http.Request) {
|
||||
h := otelhttp.NewHandler(next, fmt.Sprintf("%s %s", r.Method, r.URL.Path))
|
||||
h.ServeHTTP(w, r)
|
||||
}
|
||||
return http.HandlerFunc(fn)
|
||||
}
|
||||
|
@@ -2,11 +2,13 @@ package server
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.t-juice.club/microfilm/auth"
|
||||
"git.t-juice.club/microfilm/auth/authmw"
|
||||
@@ -15,6 +17,12 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/google/uuid"
|
||||
"github.com/nats-io/nats.go"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
|
||||
"go.opentelemetry.io/otel/propagation"
|
||||
"go.opentelemetry.io/otel/sdk/resource"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
|
||||
)
|
||||
|
||||
type UserServer struct {
|
||||
@@ -28,6 +36,13 @@ type UserServer struct {
|
||||
func NewServer(config *Config) (*UserServer, error) {
|
||||
r := chi.NewRouter()
|
||||
srv := &UserServer{}
|
||||
|
||||
tp, err := tracerProvider("jaeger:4318")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
otel.SetTracerProvider(tp)
|
||||
|
||||
srv.config = config
|
||||
|
||||
srv.Logger = slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
||||
@@ -35,6 +50,7 @@ func NewServer(config *Config) (*UserServer, error) {
|
||||
}))
|
||||
|
||||
r.Use(srv.MiddlewareLogging)
|
||||
r.Use(srv.MiddlewareTracing)
|
||||
|
||||
verifyAdmin := authmw.VerifyToken("http://mf-auth:8082", []string{auth.RoleAdmin})
|
||||
|
||||
@@ -71,6 +87,26 @@ func NewServer(config *Config) (*UserServer, error) {
|
||||
return srv, nil
|
||||
}
|
||||
|
||||
func tracerProvider(url string) (*sdktrace.TracerProvider, error) {
|
||||
exp, err := otlptracehttp.New(context.Background(), otlptracehttp.WithEndpoint(url), otlptracehttp.WithInsecure())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res := resource.NewWithAttributes(semconv.SchemaURL,
|
||||
semconv.ServiceName("mf-users"),
|
||||
semconv.ServiceVersion(users.Version),
|
||||
)
|
||||
tp := sdktrace.NewTracerProvider(
|
||||
sdktrace.WithBatcher(exp, sdktrace.WithBatchTimeout(time.Second)),
|
||||
sdktrace.WithResource(res),
|
||||
)
|
||||
otel.SetTracerProvider(tp)
|
||||
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
|
||||
|
||||
return tp, nil
|
||||
}
|
||||
|
||||
func InfoHandler(w http.ResponseWriter, r *http.Request) {
|
||||
enc := json.NewEncoder(w)
|
||||
|
||||
|
Reference in New Issue
Block a user