func()

in providers/datadog/datadog_provider.go [42:121]


func (p *DatadogProvider) Init(args []string) error {

	if args[3] != "" {
		validate, validateErr := strconv.ParseBool(args[3])
		if validateErr != nil {
			return fmt.Errorf(`invalid validate arg : %v`, validateErr)
		}
		p.validate = validate
	} else if os.Getenv("DATADOG_VALIDATE") != "" {
		validate, validateErr := strconv.ParseBool(os.Getenv("DATADOG_VALIDATE"))
		if validateErr != nil {
			return fmt.Errorf(`invalid DATADOG_VALIDATE env var : %v`, validateErr)
		}
		p.validate = validate
	} else {
		p.validate = true
	}

	if args[0] != "" {
		p.apiKey = args[0]
	} else {
		if apiKey := os.Getenv("DATADOG_API_KEY"); apiKey != "" {
			p.apiKey = apiKey
		} else if p.validate {
			return errors.New("api-key requirement")
		}
	}

	if args[1] != "" {
		p.appKey = args[1]
	} else {
		if appKey := os.Getenv("DATADOG_APP_KEY"); appKey != "" {
			p.appKey = appKey
		} else if p.validate {
			return errors.New("app-key requirement")
		}
	}

	if args[2] != "" {
		p.apiURL = args[2]
	} else if v := os.Getenv("DATADOG_HOST"); v != "" {
		p.apiURL = v
	}

	// Initialize the Datadog V1 API client
	auth := context.WithValue(
		context.Background(),
		datadog.ContextAPIKeys,
		map[string]datadog.APIKey{
			"apiKeyAuth": {
				Key: p.apiKey,
			},
			"appKeyAuth": {
				Key: p.appKey,
			},
		},
	)
	if p.apiURL != "" {
		parsedAPIURL, parseErr := url.Parse(p.apiURL)
		if parseErr != nil {
			return fmt.Errorf(`invalid API Url : %v`, parseErr)
		}
		if parsedAPIURL.Host == "" || parsedAPIURL.Scheme == "" {
			return fmt.Errorf(`missing protocol or host : %v`, p.apiURL)
		}
		// If api url is passed, set and use the api name and protocol on ServerIndex{1}
		auth = context.WithValue(auth, datadog.ContextServerIndex, 1)
		auth = context.WithValue(auth, datadog.ContextServerVariables, map[string]string{
			"name":     parsedAPIURL.Host,
			"protocol": parsedAPIURL.Scheme,
		})
	}
	configV1 := datadog.NewConfiguration()
	datadogClient := datadog.NewAPIClient(configV1)

	p.auth = auth
	p.datadogClient = datadogClient

	return nil
}