mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-21 01:16:57 +00:00
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
|
|
package config
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"go.opentelemetry.io/collector/confmap"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Provides the configuration for signoz.
|
||
|
|
type Provider interface {
|
||
|
|
// Get returns the configuration, or error otherwise.
|
||
|
|
Get(ctx context.Context) (*Config, error)
|
||
|
|
}
|
||
|
|
|
||
|
|
type provider struct {
|
||
|
|
resolver *confmap.Resolver
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProviderSettings are the settings to configure the behavior of the Provider.
|
||
|
|
type ProviderSettings struct {
|
||
|
|
// ResolverSettings are the settings to configure the behavior of the confmap.Resolver.
|
||
|
|
ResolverSettings confmap.ResolverSettings
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewProvider returns a new Provider that provides the entire configuration.
|
||
|
|
// See https://github.com/open-telemetry/opentelemetry-collector/blob/main/otelcol/configprovider.go for
|
||
|
|
// more details
|
||
|
|
func NewProvider(settings ProviderSettings) (Provider, error) {
|
||
|
|
resolver, err := confmap.NewResolver(settings.ResolverSettings)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return &provider{
|
||
|
|
resolver: resolver,
|
||
|
|
}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (provider *provider) Get(ctx context.Context) (*Config, error) {
|
||
|
|
conf, err := provider.resolver.Resolve(ctx)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("cannot resolve configuration: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
config, err := unmarshal(conf)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("cannot unmarshal configuration: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return config, nil
|
||
|
|
}
|