signoz/pkg/factory/settings.go
2025-02-19 00:35:53 +05:30

60 lines
1.5 KiB
Go

package factory
import (
"log/slog"
"github.com/prometheus/client_golang/prometheus"
sdkmetric "go.opentelemetry.io/otel/metric"
sdktrace "go.opentelemetry.io/otel/trace"
)
type ProviderSettings struct {
// SlogLogger is the slog logger.
Logger *slog.Logger
// MeterProvider is the meter provider.
MeterProvider sdkmetric.MeterProvider
// TracerProvider is the tracer provider.
TracerProvider sdktrace.TracerProvider
// PrometheusRegistry is the prometheus registry.
PrometheusRegisterer prometheus.Registerer
}
type ScopedProviderSettings interface {
Logger() *slog.Logger
Meter() sdkmetric.Meter
Tracer() sdktrace.Tracer
PrometheusRegisterer() prometheus.Registerer
}
type scoped struct {
logger *slog.Logger
meter sdkmetric.Meter
tracer sdktrace.Tracer
prometheusRegisterer prometheus.Registerer
}
func NewScopedProviderSettings(settings ProviderSettings, pkgName string) *scoped {
return &scoped{
logger: settings.Logger.With("logger", pkgName),
meter: settings.MeterProvider.Meter(pkgName),
tracer: settings.TracerProvider.Tracer(pkgName),
prometheusRegisterer: settings.PrometheusRegisterer,
}
}
func (s *scoped) Logger() *slog.Logger {
return s.logger
}
func (s *scoped) Meter() sdkmetric.Meter {
return s.meter
}
func (s *scoped) Tracer() sdktrace.Tracer {
return s.tracer
}
func (s *scoped) PrometheusRegisterer() prometheus.Registerer {
return s.prometheusRegisterer
}