in apmproxy/client.go [74:116]
func NewClient(opts ...Option) (*Client, error) {
c := Client{
bufferPool: sync.Pool{New: func() interface{} {
return &bytes.Buffer{}
}},
AgentDataChannel: make(chan accumulator.APMData, defaultAgentBufferSize),
LambdaDataChannel: make(chan []byte, defaultLambdaBufferSize),
client: &http.Client{
Transport: http.DefaultTransport.(*http.Transport).Clone(),
},
ReconnectionCount: -1,
Status: Started,
receiver: &http.Server{
Addr: defaultReceiverAddr,
ReadTimeout: defaultDataReceiverTimeout,
WriteTimeout: defaultDataReceiverTimeout,
MaxHeaderBytes: 1 << 20,
},
sendStrategy: SyncFlush,
flushCh: make(chan struct{}),
}
c.client.Timeout = defaultDataForwarderTimeout
for _, opt := range opts {
opt(&c)
}
if c.serverURL == "" {
return nil, errors.New("APM Server URL cannot be empty")
}
if c.logger == nil {
return nil, errors.New("logger cannot be empty")
}
// normalize server URL
if !strings.HasSuffix(c.serverURL, "/") {
c.serverURL += "/"
}
return &c, nil
}