in kibana/client.go [145:217]
func NewClientWithConfigDefault(config *ClientConfig, defaultPort int, binaryName, version, commit, buildtime string) (*Client, error) {
if err := config.Validate(); err != nil {
return nil, err
}
p := config.Path
if config.SpaceID != "" {
p = path.Join(p, "s", config.SpaceID)
}
kibanaURL, err := MakeURL(config.Protocol, p, config.Host, defaultPort)
if err != nil {
return nil, fmt.Errorf("invalid Kibana host: %w", err)
}
u, err := url.Parse(kibanaURL)
if err != nil {
return nil, fmt.Errorf("failed to parse the Kibana URL: %w", err)
}
username := config.Username
password := config.Password
if u.User != nil {
username = u.User.Username()
password, _ = u.User.Password()
u.User = nil
if config.APIKey != "" && (username != "" || password != "") {
return nil, fmt.Errorf("cannot set api_key with username/password in Kibana URL")
}
// Re-write URL without credentials.
kibanaURL = u.String()
}
log := logp.NewLogger("kibana")
log.Infof("Kibana url: %s", kibanaURL)
headers := make(http.Header)
for k, v := range config.Headers {
headers.Set(k, v)
}
if binaryName == "" {
binaryName = "Libbeat"
}
userAgent := useragent.UserAgent(binaryName, version, commit, buildtime)
rt, err := config.Transport.Client(httpcommon.WithHeaderRoundTripper(map[string]string{"User-Agent": userAgent}))
if err != nil {
return nil, err
}
client := &Client{
Connection: Connection{
URL: kibanaURL,
Username: username,
Password: password,
APIKey: config.APIKey,
ServiceToken: config.ServiceToken,
Headers: headers,
HTTP: rt,
},
log: log,
}
if !config.IgnoreVersion {
if err = client.readVersion(); err != nil {
return nil, fmt.Errorf("fail to get the Kibana version: %w", err)
}
}
return client, nil
}