Documentation ¶
Overview ¶
Package opensearchtransport provides the transport layer for the OpenSearch client.
It is automatically included in the client provided by the github.com/opensearch-project/opensearch-go package and is not intended for direct use: to configure the client, use the opensearch.Config struct.
The default HTTP transport of the client is http.Transport; use the Transport option to customize it;
The package will automatically retry requests on network-related errors, and on specific response status codes (by default 502, 503, 504). Use the RetryOnStatus option to customize the list. The transport will not retry a timeout network error, unless enabled by setting EnableRetryOnTimeout to true.
Use the MaxRetries option to configure the number of retries, and set DisableRetry to true to disable the retry behaviour altogether.
By default, the retry will be performed without any delay; to configure a backoff interval, implement the RetryBackoff option function; see an example in the package unit tests for information.
When multiple addresses are passed in configuration, the package will use them in a round-robin fashion, and will keep track of live and dead nodes. The status of dead nodes is checked periodically.
To customize the node selection behaviour, provide a Selector implementation in the configuration. To replace the connection pool entirely, provide a custom ConnectionPool implementation via the ConnectionPoolFunc option.
The package defines the Logger interface for logging information about request and response. It comes with several bundled loggers for logging in text and JSON.
Use the EnableDebugLogger option to enable the debugging logger for connection management.
Use the EnableMetrics option to enable metric collection and export.
Index ¶
Constants ¶
const ( // Version returns the package version as a string. Version = version.Client )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
Client represents the HTTP client.
func New ¶
New creates new transport client.
http.DefaultTransport will be used if no transport is passed in the configuration.
func (*Client) DiscoverNodes ¶
DiscoverNodes reloads the client connections by fetching information from the cluster.
type ColorLogger ¶
ColorLogger prints the log message in a terminal-optimized plain text.
func (*ColorLogger) LogRoundTrip ¶
func (l *ColorLogger) LogRoundTrip(req *http.Request, res *http.Response, err error, start time.Time, dur time.Duration) error
LogRoundTrip prints the information about request and response.
func (*ColorLogger) RequestBodyEnabled ¶
func (l *ColorLogger) RequestBodyEnabled() bool
RequestBodyEnabled returns true when the request body should be logged.
func (*ColorLogger) ResponseBodyEnabled ¶
func (l *ColorLogger) ResponseBodyEnabled() bool
ResponseBodyEnabled returns true when the response body should be logged.
type Config ¶
type Config struct { URLs []*url.URL Username string Password string Header http.Header CACert []byte Signer signer.Signer RetryOnStatus []int DisableRetry bool EnableRetryOnTimeout bool MaxRetries int RetryBackoff func(attempt int) time.Duration CompressRequestBody bool EnableMetrics bool EnableDebugLogger bool DiscoverNodesInterval time.Duration Transport http.RoundTripper Logger Logger Selector Selector ConnectionPoolFunc func([]*Connection, Selector) ConnectionPool }
Config represents the configuration of HTTP client.
type Connection ¶
type Connection struct { sync.Mutex URL *url.URL IsDead bool DeadSince time.Time Failures int ID string Name string Roles []string Attributes map[string]interface{} }
Connection represents a connection to a node.
func (*Connection) String ¶
func (c *Connection) String() string
String returns a readable connection representation.
type ConnectionMetric ¶
type ConnectionMetric struct { URL string `json:"url"` Failures int `json:"failures,omitempty"` IsDead bool `json:"dead,omitempty"` DeadSince *time.Time `json:"dead_since,omitempty"` Meta struct { ID string `json:"id"` Name string `json:"name"` Roles []string `json:"roles"` } `json:"meta"` }
ConnectionMetric represents metric information for a connection.
func (ConnectionMetric) String ¶
func (cm ConnectionMetric) String() string
String returns the connection information as a string.
type ConnectionPool ¶
type ConnectionPool interface { Next() (*Connection, error) // Next returns the next available connection. OnSuccess(*Connection) error // OnSuccess reports that the connection was successful. OnFailure(*Connection) error // OnFailure reports that the connection failed. URLs() []*url.URL // URLs returns the list of URLs of available connections. }
ConnectionPool defines the interface for the connection pool.
func NewConnectionPool ¶
func NewConnectionPool(conns []*Connection, selector Selector) (ConnectionPool, error)
NewConnectionPool creates and returns a default connection pool.
type CurlLogger ¶
CurlLogger prints the log message as a runnable curl command.
func (*CurlLogger) LogRoundTrip ¶
func (l *CurlLogger) LogRoundTrip(req *http.Request, res *http.Response, err error, start time.Time, dur time.Duration) error
LogRoundTrip prints the information about request and response.
func (*CurlLogger) RequestBodyEnabled ¶
func (l *CurlLogger) RequestBodyEnabled() bool
RequestBodyEnabled returns true when the request body should be logged.
func (*CurlLogger) ResponseBodyEnabled ¶
func (l *CurlLogger) ResponseBodyEnabled() bool
ResponseBodyEnabled returns true when the response body should be logged.
type DebuggingLogger ¶
type DebuggingLogger interface { Log(a ...interface{}) error Logf(format string, a ...interface{}) error }
DebuggingLogger defines the interface for a debugging logger.
type Discoverable ¶
type Discoverable interface {
DiscoverNodes() error
}
Discoverable defines the interface for transports supporting node discovery.
type JSONLogger ¶
JSONLogger prints the log message as JSON.
func (*JSONLogger) LogRoundTrip ¶
func (l *JSONLogger) LogRoundTrip(req *http.Request, res *http.Response, err error, start time.Time, dur time.Duration) error
LogRoundTrip prints the information about request and response.
func (*JSONLogger) RequestBodyEnabled ¶
func (l *JSONLogger) RequestBodyEnabled() bool
RequestBodyEnabled returns true when the request body should be logged.
func (*JSONLogger) ResponseBodyEnabled ¶
func (l *JSONLogger) ResponseBodyEnabled() bool
ResponseBodyEnabled returns true when the response body should be logged.
type Logger ¶
type Logger interface { // LogRoundTrip should not modify the request or response, except for consuming and closing the body. // Implementations have to check for nil values in request and response. LogRoundTrip(*http.Request, *http.Response, error, time.Time, time.Duration) error // RequestBodyEnabled makes the client pass a copy of request body to the logger. RequestBodyEnabled() bool // ResponseBodyEnabled makes the client pass a copy of response body to the logger. ResponseBodyEnabled() bool }
Logger defines an interface for logging request and response.
type Measurable ¶
Measurable defines the interface for transports supporting metrics.
type Metrics ¶
type Metrics struct { Requests int `json:"requests"` Failures int `json:"failures"` Responses map[int]int `json:"responses"` Connections []fmt.Stringer `json:"connections"` }
Metrics represents the transport metrics.
type Selector ¶
type Selector interface {
Select([]*Connection) (*Connection, error)
}
Selector defines the interface for selecting connections from the pool.
type TextLogger ¶
TextLogger prints the log message in plain text.
func (*TextLogger) LogRoundTrip ¶
func (l *TextLogger) LogRoundTrip(req *http.Request, res *http.Response, err error, start time.Time, dur time.Duration) error
LogRoundTrip prints the information about request and response.
func (*TextLogger) RequestBodyEnabled ¶
func (l *TextLogger) RequestBodyEnabled() bool
RequestBodyEnabled returns true when the request body should be logged.
func (*TextLogger) ResponseBodyEnabled ¶
func (l *TextLogger) ResponseBodyEnabled() bool
ResponseBodyEnabled returns true when the response body should be logged.