-
Notifications
You must be signed in to change notification settings - Fork 486
/
config_http.go
137 lines (110 loc) · 4.44 KB
/
config_http.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package otelcol
import (
"time"
"github.com/alecthomas/units"
"github.com/grafana/agent/component/otelcol/auth"
otelcomponent "go.opentelemetry.io/collector/component"
otelconfig "go.opentelemetry.io/collector/config"
otelconfigauth "go.opentelemetry.io/collector/config/configauth"
otelconfighttp "go.opentelemetry.io/collector/config/confighttp"
)
// HTTPServerArguments holds shared settings for components which launch HTTP
// servers.
type HTTPServerArguments struct {
Endpoint string `river:"endpoint,attr,optional"`
TLS *TLSServerArguments `river:"tls,block,optional"`
CORS *CORSArguments `river:"cors,block,optional"`
// TODO(rfratto): auth
//
// Figuring out how to do authentication isn't very straightforward here. The
// auth section links to an authenticator extension.
//
// We will need to generally figure out how we want to provide common
// authentication extensions to all of our components.
MaxRequestBodySize units.Base2Bytes `river:"max_request_body_size,attr,optional"`
IncludeMetadata bool `river:"include_metadata,attr,optional"`
}
// Convert converts args into the upstream type.
func (args *HTTPServerArguments) Convert() *otelconfighttp.HTTPServerSettings {
if args == nil {
return nil
}
return &otelconfighttp.HTTPServerSettings{
Endpoint: args.Endpoint,
TLSSetting: args.TLS.Convert(),
CORS: args.CORS.Convert(),
MaxRequestBodySize: int64(args.MaxRequestBodySize),
IncludeMetadata: args.IncludeMetadata,
}
}
// CORSArguments holds shared CORS settings for components which launch HTTP
// servers.
type CORSArguments struct {
AllowedOrigins []string `river:"allowed_origins,attr,optional"`
AllowedHeaders []string `river:"allowed_headers,attr,optional"`
MaxAge int `river:"max_age,attr,optional"`
}
// Convert converts args into the upstream type.
func (args *CORSArguments) Convert() *otelconfighttp.CORSSettings {
if args == nil {
return nil
}
return &otelconfighttp.CORSSettings{
AllowedOrigins: args.AllowedOrigins,
AllowedHeaders: args.AllowedHeaders,
MaxAge: args.MaxAge,
}
}
// HTTPClientArguments holds shared HTTP settings for components which launch
// HTTP clients.
type HTTPClientArguments struct {
Endpoint string `river:"endpoint,attr"`
Compression CompressionType `river:"compression,attr,optional"`
TLS TLSClientArguments `river:"tls,block,optional"`
ReadBufferSize units.Base2Bytes `river:"read_buffer_size,attr,optional"`
WriteBufferSize units.Base2Bytes `river:"write_buffer_size,attr,optional"`
Timeout time.Duration `river:"timeout,attr,optional"`
Headers map[string]string `river:"headers,attr,optional"`
// CustomRoundTripper func(next http.RoundTripper) (http.RoundTripper, error) TODO (@tpaschalis)
MaxIdleConns *int `river:"max_idle_conns,attr,optional"`
MaxIdleConnsPerHost *int `river:"max_idle_conns_per_host,attr,optional"`
MaxConnsPerHost *int `river:"max_conns_per_host,attr,optional"`
IdleConnTimeout *time.Duration `river:"idle_conn_timeout,attr,optional"`
// Auth is a binding to an otelcol.auth.* component extension which handles
// authentication.
Auth *auth.Handler `river:"auth,attr,optional"`
}
// Convert converts args into the upstream type.
func (args *HTTPClientArguments) Convert() *otelconfighttp.HTTPClientSettings {
if args == nil {
return nil
}
// Configure the authentication if args.Auth is set.
var auth *otelconfigauth.Authentication
if args.Auth != nil {
auth = &otelconfigauth.Authentication{AuthenticatorID: args.Auth.ID}
}
return &otelconfighttp.HTTPClientSettings{
Endpoint: args.Endpoint,
Compression: args.Compression.Convert(),
TLSSetting: *args.TLS.Convert(),
ReadBufferSize: int(args.ReadBufferSize),
WriteBufferSize: int(args.WriteBufferSize),
Timeout: args.Timeout,
Headers: args.Headers,
// CustomRoundTripper: func(http.RoundTripper) (http.RoundTripper, error) { panic("not implemented") }, TODO (@tpaschalis)
MaxIdleConns: args.MaxIdleConns,
MaxIdleConnsPerHost: args.MaxIdleConnsPerHost,
MaxConnsPerHost: args.MaxConnsPerHost,
IdleConnTimeout: args.IdleConnTimeout,
Auth: auth,
}
}
// Extensions exposes extensions used by args.
func (args *HTTPClientArguments) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {
m := make(map[otelconfig.ComponentID]otelcomponent.Extension)
if args.Auth != nil {
m[args.Auth.ID] = args.Auth.Extension
}
return m
}