-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
78 lines (60 loc) · 2.03 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"context"
"encoding/json"
"fmt"
"net/http"
"strings"
"time"
"github.com/opensearch-project/opensearch-go/v2"
"github.com/opensearch-project/opensearch-go/v2/opensearchapi"
)
func buildClientConfig(clibanaConfig ClibanaConfig) opensearch.Config {
var opensearchConfig opensearch.Config
switch strings.ToLower(clibanaConfig.AuthType) {
case AuthTypeAWS:
opensearchConfig = buildAWSAuthClientConfig()
case AuthTypeBasic:
opensearchConfig = buildBasicAuthClientConfig(clibanaConfig)
default:
FatalError(fmt.Errorf("unsupported authentication type: %s", clibanaConfig.AuthType))
}
opensearchConfig.Addresses = []string{clibanaConfig.Host}
opensearchConfig.Transport = &http.Transport{
ResponseHeaderTimeout: ResponseTimeout * time.Second,
}
return opensearchConfig
}
func createClient(clibanaConfig ClibanaConfig) (*opensearch.Client, error) {
if strings.HasPrefix(clibanaConfig.Host, "aws://") {
domainName := strings.TrimPrefix(clibanaConfig.Host, "aws://")
clibanaConfig.Host = resolveAWSDomainEndpoint(domainName)
}
return opensearch.NewClient(buildClientConfig(clibanaConfig))
}
func buildBasicAuthClientConfig(config ClibanaConfig) opensearch.Config {
if config.Username == "" || config.Password == "" {
FatalError(fmt.Errorf("uusername and password must be provided for basic authentication"))
}
return opensearch.Config{
Username: config.Username,
Password: config.Password,
}
}
func doRequest[T any](client *opensearch.Client, request opensearchapi.Request) T {
DebugLogger.Printf("Request: %+v\n", request)
response, err := request.Do(context.TODO(), client)
if err != nil {
FatalError(fmt.Errorf("request failed: %w", err))
}
defer response.Body.Close()
DebugLogger.Printf("Response: %+v\n", response)
if response.IsError() {
FatalError(fmt.Errorf("request error: %s", response.String()))
}
var responseObj T
if err := json.NewDecoder(response.Body).Decode(&responseObj); err != nil {
FatalError(fmt.Errorf("error decoding response: %w", err))
}
return responseObj
}