-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
93 lines (75 loc) · 3.3 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package client
import (
"crypto/tls"
"github.com/D3rus/go-library/configurator"
"github.com/D3rus/go-library/logger"
"net/http"
"strconv"
)
//go:generate mockgen -package=client -destination=mock_configurator_test.go github.com/D3rus/go-library/configurator Configurator
func NewWithConfigurator(configurator configurator.Configurator, config *Config, informer logger.Informer) *Client {
return New(Configuration(config, configurator), informer)
}
func Configuration(config *Config, configurator configurator.Configurator) *Config {
if config.Timeout == 0 || config.Timeout == TimeoutDefault {
configurator.SetDefault(TimeoutFieldName, TimeoutDefault)
config.Timeout = configurator.GetDuration(TimeoutFieldName)
}
if config.MaxIdleConnections == 0 || config.MaxIdleConnections == MaxIdleConnectionsDefault {
configurator.SetDefault(MaxIdleConnectionsFieldName, MaxIdleConnectionsDefault)
config.MaxIdleConnections = configurator.GetUint16(MaxIdleConnectionsFieldName)
}
if config.MaxIdleConnectionsPerHost == 0 || config.MaxIdleConnectionsPerHost == MaxIdleConnectionsPerHostDefault {
configurator.SetDefault(MaxIdleConnectionsPerHostFieldName, MaxIdleConnectionsPerHostDefault)
config.MaxIdleConnectionsPerHost = configurator.GetUint16(MaxIdleConnectionsPerHostFieldName)
}
if config.MaxConnectionsPerHost == 0 || config.MaxConnectionsPerHost == MaxConnectionsPerHostDefault {
configurator.SetDefault(MaxConnectionsPerHostFieldName, MaxConnectionsPerHostDefault)
config.MaxConnectionsPerHost = configurator.GetUint16(MaxConnectionsPerHostFieldName)
}
if !config.SecureVerify || config.SecureVerify == SecureVerifyDefault {
configurator.SetDefault(SecureVerifyFieldName, SecureVerifyDefault)
config.SecureVerify = configurator.GetBool(SecureVerifyFieldName)
}
return config
}
type Client struct {
client *http.Client
originalTransport *http.Transport
}
func (client *Client) Do(request *http.Request) (*http.Response, error) {
return client.client.Do(request)
}
func (client *Client) Client() *http.Client {
return client.client
}
func NewClient(client *http.Client, originalTransport *http.Transport) *Client {
return &Client{client: client, originalTransport: originalTransport}
}
func (client *Client) Use(middlewares ...Middleware) {
for _, middleware := range middlewares {
client.client.Transport = middleware.Middleware(client.client.Transport)
}
}
func New(config *Config, informer logger.Informer) *Client {
informer.Infof("http.client: timeout - %s", config.Timeout)
informer.Infof("http.client: maxIdleConnections - %d", config.MaxIdleConnections)
informer.Infof("http.client: maxIdleConnectionsPerHost - %d", config.MaxIdleConnectionsPerHost)
informer.Infof("http.client: maxConnectionsPerHost - %d", config.MaxConnectionsPerHost)
informer.Infof("http.client: tls secure verify - %s", strconv.FormatBool(config.SecureVerify))
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.MaxIdleConns = int(config.MaxIdleConnections)
transport.MaxIdleConnsPerHost = int(config.MaxIdleConnectionsPerHost)
transport.MaxConnsPerHost = int(config.MaxConnectionsPerHost)
transport.TLSClientConfig = &tls.Config{
InsecureSkipVerify: !config.SecureVerify,
}
c := NewClient(
&http.Client{
Timeout: config.Timeout,
Transport: transport,
},
transport,
)
return c
}