receiver/splunkenterprisereceiver/config.go (61 lines of code) (raw):
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package splunkenterprisereceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkenterprisereceiver"
import (
"errors"
"net/url"
"strings"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/scraper/scraperhelper"
"go.uber.org/multierr"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkenterprisereceiver/internal/metadata"
)
var (
errBadOrMissingEndpoint = errors.New("missing a valid endpoint")
errBadScheme = errors.New("endpoint scheme must be either http or https")
errMissingAuthExtension = errors.New("auth extension missing from config")
)
type Config struct {
scraperhelper.ControllerConfig `mapstructure:",squash"`
metadata.MetricsBuilderConfig `mapstructure:",squash"`
IdxEndpoint confighttp.ClientConfig `mapstructure:"indexer"`
SHEndpoint confighttp.ClientConfig `mapstructure:"search_head"`
CMEndpoint confighttp.ClientConfig `mapstructure:"cluster_master"`
VersionInfo bool `mapstructure:"build_version_info"`
}
func (cfg *Config) Validate() (errors error) {
var targetURL *url.URL
var err error
endpoints := []string{}
// if no endpoint is set we do not start the receiver. For each set endpoint we go through and Validate
// that it contains an auth setting and a valid endpoint, if its missing either of these the receiver will
// fail to start.
if cfg.IdxEndpoint.Endpoint == "" && cfg.SHEndpoint.Endpoint == "" && cfg.CMEndpoint.Endpoint == "" {
errors = multierr.Append(errors, errBadOrMissingEndpoint)
} else {
if cfg.IdxEndpoint.Endpoint != "" {
if cfg.IdxEndpoint.Auth == nil {
errors = multierr.Append(errors, errMissingAuthExtension)
}
endpoints = append(endpoints, cfg.IdxEndpoint.Endpoint)
}
if cfg.SHEndpoint.Endpoint != "" {
if cfg.SHEndpoint.Auth == nil {
errors = multierr.Append(errors, errMissingAuthExtension)
}
endpoints = append(endpoints, cfg.SHEndpoint.Endpoint)
}
if cfg.CMEndpoint.Endpoint != "" {
if cfg.CMEndpoint.Auth == nil {
errors = multierr.Append(errors, errMissingAuthExtension)
}
endpoints = append(endpoints, cfg.CMEndpoint.Endpoint)
}
for _, e := range endpoints {
targetURL, err = url.Parse(e)
if err != nil {
errors = multierr.Append(errors, errBadOrMissingEndpoint)
continue
}
// note passes for both http and https
if !strings.HasPrefix(targetURL.Scheme, "http") {
errors = multierr.Append(errors, errBadScheme)
}
}
}
return errors
}