rest

package
v2.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 7, 2024 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultRetrySettings = RetrySettings{
	Normal: RetrySetting{
		WaitTime:   time.Second,
		MaxRetries: 15,
	},
	Long: RetrySetting{
		WaitTime:   time.Second,
		MaxRetries: 30,
	},
	VeryLong: RetrySetting{
		WaitTime:   time.Second,
		MaxRetries: 60,
	},
}

Functions

func AddNextPageQueryParams

func AddNextPageQueryParams(u *url.URL, nextPage string) *url.URL

AddNextPageQueryParams handles both Dynatrace v1 and v2 pagination logic. For api/v2 URLs the given next page key will be the only query parameter of the modified URL For any other ULRs the given next page key will be added to existing query parameters

Types

type AddEntriesToResult

type AddEntriesToResult func(body []byte) (receivedEntries int, err error)

AddEntriesToResult is a function which should parse an API response body and append the returned entries to a result slice. Handling the parsing, any possible filtering and owning and filling the result list is left to the caller of ListPaginated, as it might differ notably between client implementations. The function MUST return the number of entries it has parsed from the received API payload body. This is used to validate that the final parsed number matches the reported total count of the API. This receivedEntries count is not necessarily equal to the number of entries added to the result slice, as filtering might exclude some entries that where received from the API.

type Client added in v2.6.0

type Client struct {
	// contains filtered or unexported fields
}

func NewRestClient added in v2.6.0

func NewRestClient(client *http.Client, trafficLogger *trafficlogs.FileBasedLogger, strategy RateLimitStrategy) *Client

func (Client) Client added in v2.6.0

func (c Client) Client() *http.Client

func (Client) Delete added in v2.6.0

func (c Client) Delete(ctx context.Context, url string) (Response, error)

func (Client) Get added in v2.6.0

func (c Client) Get(ctx context.Context, url string) (Response, error)

func (Client) GetWithRetry added in v2.6.0

func (c Client) GetWithRetry(ctx context.Context, url string, settings RetrySetting) (resp Response, err error)

func (Client) Post added in v2.6.0

func (c Client) Post(ctx context.Context, url string, data []byte) (Response, error)

func (Client) PostMultiPartFile added in v2.6.0

func (c Client) PostMultiPartFile(ctx context.Context, url string, data *bytes.Buffer, contentType string) (Response, error)

func (Client) Put added in v2.6.0

func (c Client) Put(ctx context.Context, url string, data []byte) (Response, error)

type RateLimitStrategy added in v2.6.0

type RateLimitStrategy interface {
	ExecuteRequest(timelineProvider timeutils.TimelineProvider, callback func() (Response, error)) (Response, error)
}

RateLimitStrategy ensures that the concrete implementation of the rate limiting strategy can be hidden behind this interface

func CreateRateLimitStrategy added in v2.6.0

func CreateRateLimitStrategy() RateLimitStrategy

CreateRateLimitStrategy creates a RateLimitStrategy. In the future this can be extended to instantiate different rate limiting strategies based on e.g. environment variables. The current implementation always returns the strategy simpleSleepRateLimitStrategy, which suspends the current goroutine until the time in the rate limiting header 'X-RateLimit-Reset' is up.

type RequestInfo

type RequestInfo struct {
	// HTTP Method of the request
	Method string `json:"method"`
	// URL that was called
	URL string `json:"url"`
}

type RespError

type RespError struct {
	// Reason describing what went wrong
	Reason string `json:"reason"`
	// StatusCode is the HTTP status code
	StatusCode int `json:"statusCode"`
	// Body of the HTTP response
	Body string `json:"body"`
	// Err is the underlying error that occurred - maybe be empty
	Err error `json:"error"`
	// Request contains information about the HTTP request that caused the RespError
	Request *RequestInfo `json:"request"`
}

RespError represents a HTTP response error

func NewRespErr

func NewRespErr(reason string, resp Response) RespError

func (RespError) ConcurrentError

func (e RespError) ConcurrentError() string

func (RespError) Error

func (e RespError) Error() string

func (RespError) Unwrap

func (e RespError) Unwrap() error

func (RespError) WithErr

func (e RespError) WithErr(err error) RespError

func (RespError) WithRequestInfo

func (e RespError) WithRequestInfo(reqMethod, reqURL string) RespError

type Response

type Response struct {
	StatusCode  int
	Body        []byte
	Headers     map[string][]string
	NextPageKey string
	TotalCount  int
	PageSize    int
}

func ListPaginated

func ListPaginated(ctx context.Context, client *Client, retrySettings RetrySettings, url *url.URL, logLabel string,
	addToResult AddEntriesToResult) (Response, error)

func SendWithRetry

func SendWithRetry(ctx context.Context, sendWithBody SendRequestWithBody, path string, body []byte, setting RetrySetting) (resp Response, err error)

SendWithRetry will retry to call sendWithBody for a given number of times, waiting a give duration between calls

func SendWithRetryWithInitialTry

func SendWithRetryWithInitialTry(ctx context.Context, sendWithBody SendRequestWithBody, objectName string, path string, body []byte, setting RetrySetting) (resp Response, err error)

SendWithRetryWithInitialTry will try to call sendWithBody and if it didn't succeed call SendWithRetry

func (Response) Is4xxError

func (resp Response) Is4xxError() bool

func (Response) Is5xxError

func (resp Response) Is5xxError() bool

func (Response) IsSuccess

func (resp Response) IsSuccess() bool

type RetrySetting

type RetrySetting struct {
	WaitTime   time.Duration
	MaxRetries int
}

type RetrySettings

type RetrySettings struct {
	Normal   RetrySetting
	Long     RetrySetting
	VeryLong RetrySetting
}

type SendRequestWithBody

type SendRequestWithBody func(ctx context.Context, url string, data []byte) (Response, error)

SendRequestWithBody is a function doing a PUT or POST HTTP request

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL