package recorder import ( "context" "sync" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/trace" "gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel" "gitea.libretechconsulting.com/rmcguire/ambient-local-exporter/pkg/weather/recorder/recorders" ) type WeatherRecorder struct { recorder recorders.Recorder ctx context.Context tracer trace.Tracer meter metric.Meter *sync.RWMutex } type Opts struct { Ctx context.Context Recorder recorders.Recorder // If nil, will use memory recorder KeepLast int } func MustNewWeatherRecorder(opts *Opts) *WeatherRecorder { if opts.KeepLast < 1 { opts.KeepLast = 1 } if opts.Recorder == nil { panic("no recorder provided") } opts.Recorder.Init(opts.Ctx, &recorders.RecorderOpts{ RetainLast: opts.KeepLast, BaseCtx: opts.Ctx, }) return &WeatherRecorder{ ctx: opts.Ctx, recorder: opts.Recorder, tracer: otel.GetTracer(opts.Ctx, "weatherRecorder"), meter: otel.GetMeter(opts.Ctx, "weatherRecorder"), RWMutex: &sync.RWMutex{}, } }