Merged in feature/movetocfg (pull request #44)
Move OTEL to Config * move
This commit is contained in:
@@ -1,8 +0,0 @@
|
||||
package objectstorage
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
func Get(ctx context.Context) {
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package otel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"queryorchestration/internal/serviceconfig/observability"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
)
|
||||
|
||||
func New(ctx context.Context, cfg observability.ConfigProvider) func() error {
|
||||
if !cfg.IsOtelEnabled() {
|
||||
slog.Warn("OpenTelemetry is disabled. Set ENABLE_OTEL to true to enable.")
|
||||
return func() error { return nil }
|
||||
}
|
||||
|
||||
exporter, err := otlptracegrpc.New(ctx)
|
||||
if err != nil {
|
||||
return func() error { return nil }
|
||||
}
|
||||
|
||||
tp := sdktrace.NewTracerProvider(
|
||||
sdktrace.WithBatcher(exporter),
|
||||
)
|
||||
|
||||
otel.SetTracerProvider(tp)
|
||||
|
||||
return func() error {
|
||||
err := tp.Shutdown(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package otel_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"queryorchestration/internal/server/otel"
|
||||
"queryorchestration/internal/serviceconfig/observability"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestNew(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &observability.ObsConfig{
|
||||
EnableOtel: true,
|
||||
}
|
||||
clean := otel.New(ctx, cfg)
|
||||
assert.NotNil(t, clean)
|
||||
defer func() {
|
||||
if err := clean(); err != nil {
|
||||
// Log cleanup error but don't panic since we're shutting down
|
||||
fmt.Printf("Error during clean: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package server
|
||||
import (
|
||||
"context"
|
||||
"queryorchestration/internal/database/migrations"
|
||||
"queryorchestration/internal/server/otel"
|
||||
"queryorchestration/internal/serviceconfig"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
@@ -30,7 +29,7 @@ func (c *BaseConfig) GetValidator() *validator.Validate {
|
||||
}
|
||||
|
||||
func New(ctx context.Context, cfg Config) (func() error, error) {
|
||||
closeTracer := otel.New(ctx, cfg)
|
||||
closeTracer := cfg.SetOtel(ctx)
|
||||
|
||||
err := migrations.Run(ctx, cfg)
|
||||
if err != nil {
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
package observability
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
)
|
||||
|
||||
type ConfigProvider interface {
|
||||
IsOtelEnabled() bool
|
||||
SetOtel(context.Context) func() error
|
||||
}
|
||||
|
||||
type ObsConfig struct {
|
||||
@@ -11,3 +21,29 @@ type ObsConfig struct {
|
||||
func (o *ObsConfig) IsOtelEnabled() bool {
|
||||
return o.EnableOtel
|
||||
}
|
||||
|
||||
func (o *ObsConfig) SetOtel(ctx context.Context) func() error {
|
||||
if !o.EnableOtel {
|
||||
slog.Warn("OpenTelemetry is disabled. Set ENABLE_OTEL to true to enable.")
|
||||
return func() error { return nil }
|
||||
}
|
||||
|
||||
exporter, err := otlptracegrpc.New(ctx)
|
||||
if err != nil {
|
||||
return func() error { return nil }
|
||||
}
|
||||
|
||||
tp := sdktrace.NewTracerProvider(
|
||||
sdktrace.WithBatcher(exporter),
|
||||
)
|
||||
|
||||
otel.SetTracerProvider(tp)
|
||||
|
||||
return func() error {
|
||||
err := tp.Shutdown(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package observability_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"queryorchestration/internal/serviceconfig/observability"
|
||||
"testing"
|
||||
|
||||
@@ -13,3 +15,19 @@ func TestIsOtelEnabled(t *testing.T) {
|
||||
c.EnableOtel = true
|
||||
assert.True(t, c.IsOtelEnabled())
|
||||
}
|
||||
|
||||
func TestSetOtel(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &observability.ObsConfig{
|
||||
EnableOtel: true,
|
||||
}
|
||||
clean := cfg.SetOtel(ctx)
|
||||
assert.NotNil(t, clean)
|
||||
defer func() {
|
||||
if err := clean(); err != nil {
|
||||
// Log cleanup error but don't panic since we're shutting down
|
||||
fmt.Printf("Error during clean: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user