util

package
v0.9.0 Latest Latest
Warning

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

Go to latest
Published: Mar 4, 2024 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultBackoff = Backoff{
	Steps:    4,
	Duration: 10 * time.Millisecond,
	Factor:   5.0,
	Jitter:   0.1,
}

DefaultBackoff is the recommended backoff for a conflict where a client may be attempting to make an unrelated modification to a resource under active management by one or more controllers.

View Source
var DefaultRetry = Backoff{
	Steps:    5,
	Duration: 10 * time.Millisecond,
	Factor:   1.0,
	Jitter:   0.1,
}

DefaultRetry is the recommended retry for a conflict where multiple clients are making changes to the same resource.

View Source
var (
	ErrValidation = errors.New("validation error")
)
View Source
var ErrWaitTimeout = errors.New("timed out waiting for the condition")

ErrWaitTimeout is returned when the condition exited without success.

View Source
var FetchFileBackoff = Backoff{
	Steps:    4,
	Duration: 500 * time.Millisecond,
	Factor:   2.0,
	Jitter:   0.1,
}

Functions

func APIErrorIs added in v0.7.0

func APIErrorIs(err error, kind ErrorKind) bool

func BoolP

func BoolP(b bool) *bool

func ByteP

func ByteP(b byte) *byte

func CommonElements

func CommonElements(a []string, b []string) []string

CommonElements return the common elements in two slices of strings

func CompareHashAndPassword

func CompareHashAndPassword(passwordHash, password string) (bool, error)

func CompareStringSlice

func CompareStringSlice(a []string, b []string) bool

CompareStringSlice compares two slices of strings, a nil slice is considered an empty one

func CompareStringSliceNoOrder

func CompareStringSliceNoOrder(a []string, b []string) bool

CompareStringSliceNoOrder compares two slices of strings regardless of their order, a nil slice is considered an empty one

func CountLines

func CountLines(s string) (uint, error)

func Difference

func Difference(a []string, b []string) []string

Difference returns elements in a - b

func Dump

func Dump(data interface{}) *dump

func DurationP

func DurationP(d time.Duration) *time.Duration

func EncodeSha1Hex

func EncodeSha1Hex(str string) string

EncodeSha1Hex generates sha1 from string and returns its hex encoding

func EncodeSha256Hex

func EncodeSha256Hex(str string) string

EncodeSha1Hex generates sha1 from string and returns its hex encoding

func ErrFromRemote added in v0.7.0

func ErrFromRemote(resp *http.Response) error

func ExponentialBackoff

func ExponentialBackoff(ctx context.Context, backoff Backoff, condition ConditionFunc) error

ExponentialBackoff repeats a condition check with exponential backoff.

It checks the condition up to Steps times, increasing the wait by multiplying the previous duration by Factor.

If Jitter is greater than zero, a random amount of each duration is added (between duration and duration*(1+jitter)).

If the condition never returns true, ErrWaitTimeout is returned. All other errors terminate immediately.

func ExtractPublicKey

func ExtractPublicKey(privateKeyPEM []byte) ([]byte, error)

ExtraxtPublicKey extracts the public key from a ssh private key in pem format

func GenSSHKeyPair

func GenSSHKeyPair(bits int) ([]byte, []byte, error)

GenSSHKeyPair generate an ssh keypair in rsa format, returning the private key (in pem encoding) and the public key (in the OpenSSH base64 format)

func GoWait added in v0.2.0

func GoWait(wg *sync.WaitGroup, f func())

func HTTPError added in v0.7.0

func HTTPError(w http.ResponseWriter, err error) bool

func HTTPResponse added in v0.7.0

func HTTPResponse(w http.ResponseWriter, code int, res interface{}) error

func Int16P

func Int16P(i int16) *int16

func Int32P

func Int32P(i int32) *int32

func Int64P

func Int64P(i int64) *int64

func Int8P

func Int8P(i int8) *int8

func IntP

func IntP(i int) *int

func IsParentPath

func IsParentPath(parent, p string) bool

IsParentPath returns if the provided parent is parent of p parent and p paths must use slash "/" separators and must be absolute paths

func IsSameOrParentPath

func IsSameOrParentPath(parent, p string) bool

IsParentPath returns if the provided parent the same path as p or a parent of p parent and p paths must use slash "/" separators

func Jitter

func Jitter(duration time.Duration, maxFactor float64) time.Duration

Jitter returns a time.Duration between duration and duration + maxFactor * duration.

This allows clients to avoid converging on periodic behavior. If maxFactor is 0.0, a suggested default value will be chosen.

func NewAPIError added in v0.7.0

func NewAPIError(kind ErrorKind, err error, options ...APIErrorOption) error

func NewRemoteError added in v0.7.0

func NewRemoteError(kind ErrorKind, code string, message string) error

func NewTLSConfig

func NewTLSConfig(certFile, keyFile, caFile string, insecureSkipVerify bool) (*tls.Config, error)

func ParseGitURL

func ParseGitURL(us string) (*url.URL, error)

func PasswordHash

func PasswordHash(password string) (string, error)

func PathHierarchy

func PathHierarchy(p string) []string

func PathList

func PathList(p string) []string

PathList return a slice of paths from the base path (root exluded as . or / ). I.E. for a path like "path/to/file" or "/path/to/file" it'll return a slice of these elements: "path", "to", "file"

func RemoteErrorIs added in v0.7.0

func RemoteErrorIs(err error, kind ErrorKind) bool

func StringInSlice

func StringInSlice(s []string, e string) bool

func StringP

func StringP(s string) *string

func TimeP

func TimeP(t time.Time) *time.Time

func Uint16P

func Uint16P(u uint16) *uint16

func Uint32P

func Uint32P(u uint32) *uint32

func Uint64P

func Uint64P(u uint64) *uint64

func Uint8P

func Uint8P(u uint8) *uint8

func UintP

func UintP(u uint) *uint

func ValidateName

func ValidateName(s string) bool

Types

type APIError added in v0.7.0

type APIError struct {
	*WrapperError

	Kind    ErrorKind
	Code    ErrorCode
	Message string
}

func AsAPIError added in v0.7.0

func AsAPIError(err error) (*APIError, bool)

type APIErrorOption added in v0.7.0

type APIErrorOption func(e *APIError)

func WithCode added in v0.7.0

func WithCode(code ErrorCode) APIErrorOption

func WithMessage added in v0.7.0

func WithMessage(message string) APIErrorOption

type Backoff

type Backoff struct {
	Duration time.Duration // the base duration
	Factor   float64       // Duration is multiplied by factor each iteration
	Jitter   float64       // The amount of jitter applied each iteration
	Steps    int           // Exit with error after this many steps
}

Backoff holds parameters applied to a Backoff function.

type ConditionFunc

type ConditionFunc func() (done bool, err error)

ConditionFunc returns true if the condition is satisfied, or an error if the loop should be aborted.

type DefaultUUIDGenerator

type DefaultUUIDGenerator struct{}

func (DefaultUUIDGenerator) New

type ErrGitKeyNotFound

type ErrGitKeyNotFound struct {
	Key string
}

func (*ErrGitKeyNotFound) Error

func (e *ErrGitKeyNotFound) Error() string

type ErrorCode added in v0.7.0

type ErrorCode string

type ErrorKind added in v0.7.0

type ErrorKind int
const (
	ErrBadRequest ErrorKind = iota
	ErrNotExist
	ErrForbidden
	ErrUnauthorized
	ErrInternal
)

func KindFromRemoteError added in v0.7.0

func KindFromRemoteError(err error) ErrorKind

func (ErrorKind) String added in v0.7.0

func (k ErrorKind) String() string

type ErrorResponse added in v0.7.0

type ErrorResponse struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

func ErrorResponseFromError added in v0.7.0

func ErrorResponseFromError(err error) *ErrorResponse

type Errors

type Errors struct {
	Errs []error
}

Errors is an error that contains multiple errors

func (*Errors) Append

func (e *Errors) Append(err error)

func (*Errors) Equal

func (e *Errors) Equal(e2 error) bool

func (*Errors) Error

func (e *Errors) Error() string

func (*Errors) IsErr

func (e *Errors) IsErr() bool

type Git

type Git struct {
	GitDir string
	Env    []string
}

func (*Git) ConfigGet

func (g *Git) ConfigGet(ctx context.Context, args ...string) (string, error)

func (*Git) ConfigSet

func (g *Git) ConfigSet(ctx context.Context, args ...string) (string, error)

func (*Git) Output

func (g *Git) Output(ctx context.Context, stdin io.Reader, args ...string) ([]byte, error)

func (*Git) OutputLines

func (g *Git) OutputLines(ctx context.Context, stdin io.Reader, args ...string) ([]string, error)

func (*Git) Pipe

func (g *Git) Pipe(ctx context.Context, w io.Writer, r io.Reader, args ...string) error

type LimitedBuffer

type LimitedBuffer struct {
	*bytes.Buffer
	// contains filtered or unexported fields
}

func NewLimitedBuffer

func NewLimitedBuffer(cap int) *LimitedBuffer

func (*LimitedBuffer) Write

func (b *LimitedBuffer) Write(p []byte) (int, error)

type RemoteError added in v0.7.0

type RemoteError struct {
	Kind    ErrorKind
	Code    string
	Message string
}

RemoteError is an error received from a remote call. It's similar to APIError but with another type so it can be distinguished and won't be propagated to the api response.

func AsRemoteError added in v0.7.0

func AsRemoteError(err error) (*RemoteError, bool)

func (*RemoteError) Error added in v0.7.0

func (e *RemoteError) Error() string

type TestPrefixUUIDGenerator

type TestPrefixUUIDGenerator struct{ Prefix string }

func (TestPrefixUUIDGenerator) New

type TestUUIDGenerator

type TestUUIDGenerator struct{}

func (TestUUIDGenerator) New

func (u TestUUIDGenerator) New(s string) uuid.UUID

type UUIDGenerator

type UUIDGenerator interface {
	New(s string) uuid.UUID
}

type WrapperError added in v0.8.0

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

Wrapper error is an helper error type that (optionally) wrap an error and add stack information starting at the frame where the error has been created It's meant to be embedded in custom errors to avoid the need to redefine the Error, Unwrap and StackTrace methods.

Example usage:

type CustomError struct {
	*WrapperError
}

func NewCustomError(err error) error {
	return &CustomError{
		util.NewWrapperError(err, "connection error"),
	}
}

Create the error

if err != nil {
	return NewCustomError(err)
}

Create the error without wrapping another error

return NewCustomError(nil)

Detect error type

var werr *CustomError
if errors.As(err, &werr) {
	fmt.Println("this is a CustomError")
}

func NewWrapperError added in v0.8.0

func NewWrapperError(err error, format string, args ...interface{}) *WrapperError

func (*WrapperError) Error added in v0.8.0

func (w *WrapperError) Error() string

func (*WrapperError) StackTrace added in v0.8.0

func (w *WrapperError) StackTrace() errors.StackTrace

func (*WrapperError) Unwrap added in v0.8.0

func (w *WrapperError) Unwrap() error

Jump to

Keyboard shortcuts

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