kit

package module
v0.36.0 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2024 License: MIT Imports: 43 Imported by: 0

README

kit Integration Publication Go Reference

Highly opinionated Go backend kit.

  • TODO: TODOS INSIDE THE CODE
  • TODO: A TABLE WITH EVERY GO PROGRAMMING ASPECT AND THE kit.

Documentation

Overview

Package kit implements a highly opinionated Go backend kit.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrCacheGeneric   = errors.New("cache failed")
	ErrCacheTimedOut  = errors.New("cache timed out")
	ErrCacheUnhealthy = errors.New("cache unhealthy")
	ErrCacheMiss      = errors.New("cache key not found")
)
View Source
var (
	ErrDatabaseGeneric            = errors.New("database failed")
	ErrDatabaseTimedOut           = errors.New("database timed out")
	ErrDatabaseUnhealthy          = errors.New("database unhealthy")
	ErrDatabaseTransactionFailed  = errors.New("database transaction failed")
	ErrDatabaseNoRows             = errors.New("database no rows in result set")
	ErrDatabaseIntegrityViolation = errors.New("database integrity constraint violation")
	ErrDatabaseUnexpectedEffect   = errors.New("database affected %d out of %d expected rows")
)
View Source
var (
	ErrEnqueuerGeneric  = errors.New("enqueuer failed")
	ErrEnqueuerTimedOut = errors.New("enqueuer timed out")
)
View Source
var (
	ErrHTTPClientGeneric     = errors.New("http client failed")
	ErrHTTPClientTimedOut    = errors.New("http client timed out")
	ErrHTTPClientBadStatus   = errors.New("http client bad status (%d)")
	ErrHTTPClientRateLimited = errors.New("http client rate limited (%d)")
)
View Source
var (
	ErrHTTPServerGeneric  = errors.New("http server failed")
	ErrHTTPServerTimedOut = errors.New("http server timed out")
)
View Source
var (
	HTTPErrServerGeneric     = NewHTTPError("ERR_SERVER_GENERIC", http.StatusInternalServerError)
	HTTPErrServerUnavailable = NewHTTPError("ERR_SERVER_UNAVAILABLE", http.StatusServiceUnavailable)
	HTTPErrRequestTimeout    = NewHTTPError("ERR_REQUEST_TIMEOUT", http.StatusGatewayTimeout)
	HTTPErrClientGeneric     = NewHTTPError("ERR_CLIENT_GENERIC", http.StatusBadRequest)
	HTTPErrInvalidRequest    = NewHTTPError("ERR_INVALID_REQUEST", http.StatusBadRequest)
	HTTPErrNotFound          = NewHTTPError("ERR_NOT_FOUND", http.StatusNotFound)
	HTTPErrUnauthorized      = NewHTTPError("ERR_UNAUTHORIZED", http.StatusUnauthorized)
)
View Source
var (
	ErrLoggerGeneric  = errors.New("logger failed")
	ErrLoggerTimedOut = errors.New("logger timed out")
)
View Source
var (
	ErrMigratorGeneric  = errors.New("migrator failed")
	ErrMigratorTimedOut = errors.New("migrator timed out")
)
View Source
var (
	ErrObserverGeneric  = errors.New("observer failed")
	ErrObserverTimedOut = errors.New("observer timed out")
)
View Source
var (
	ErrRunnerGeneric  = errors.New("runner failed")
	ErrRunnerTimedOut = errors.New("runner timed out")
)
View Source
var (
	ErrWorkerGeneric  = errors.New("worker failed")
	ErrWorkerTimedOut = errors.New("worker timed out")
)
View Source
var (
	ErrBinderGeneric = errors.New("binder failed")
)
View Source
var (
	ErrErrorHandlerGeneric = errors.New("error handler failed")
)
View Source
var (
	ErrLocalizerGeneric = errors.New("localizer failed")
)
View Source
var (
	ErrRendererGeneric = errors.New("renderer failed")
)
View Source
var (
	ErrSerializerGeneric = errors.New("serializer failed")
)

Functions

This section is empty.

Types

type Binder

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

func NewBinder

func NewBinder(observer *Observer, config BinderConfig) *Binder

func (*Binder) Bind

func (self *Binder) Bind(i any, c echo.Context) error

type BinderConfig

type BinderConfig struct {
}

type Cache

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

func NewCache

func NewCache(ctx context.Context, observer *Observer, config CacheConfig, retry ...RetryConfig) (*Cache, error)

func (*Cache) Close

func (self *Cache) Close(ctx context.Context) error

func (*Cache) Delete

func (self *Cache) Delete(ctx context.Context, key string) error

func (*Cache) Get

func (self *Cache) Get(ctx context.Context, key string, dest any) error

func (*Cache) Health

func (self *Cache) Health(ctx context.Context) error

func (*Cache) Set

func (self *Cache) Set(ctx context.Context, key string, value any, ttl *time.Duration) error

type CacheConfig

type CacheConfig struct {
	Host            string
	Port            int
	SSLMode         bool
	Password        string
	MinConns        *int
	MaxConns        *int
	MaxConnIdleTime *time.Duration
	MaxConnLifeTime *time.Duration
	ReadTimeout     *time.Duration
	WriteTimeout    *time.Duration
	DialTimeout     *time.Duration
}

type Database

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

func NewDatabase

func NewDatabase(ctx context.Context, observer *Observer, config DatabaseConfig,
	retry ...RetryConfig) (*Database, error)

func (*Database) Close

func (self *Database) Close(ctx context.Context) error

func (*Database) Exec

func (self *Database) Exec(ctx context.Context, stmt *sqlf.Stmt) (int, error)

func (*Database) Health

func (self *Database) Health(ctx context.Context) error

func (*Database) Query

func (self *Database) Query(ctx context.Context, stmt *sqlf.Stmt) error

func (*Database) Transaction

func (self *Database) Transaction(
	ctx context.Context, level *IsolationLevel, fn func(ctx context.Context) error) error

type DatabaseConfig

type DatabaseConfig struct {
	Host                  string
	Port                  int
	SSLMode               string
	User                  string
	Password              string
	Database              string
	Service               string
	MinConns              *int
	MaxConns              *int
	MaxConnIdleTime       *time.Duration
	MaxConnLifeTime       *time.Duration
	DialTimeout           *time.Duration
	StatementTimeout      *time.Duration
	DefaultIsolationLevel *IsolationLevel
}

type Enqueuer added in v0.8.0

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

func NewEnqueuer added in v0.8.0

func NewEnqueuer(observer *Observer, config EnqueuerConfig) *Enqueuer

func (*Enqueuer) Close added in v0.8.0

func (self *Enqueuer) Close(ctx context.Context) error

func (*Enqueuer) Enqueue added in v0.8.0

func (self *Enqueuer) Enqueue(ctx context.Context, task string, params any, options ...asynq.Option) error

type EnqueuerConfig added in v0.8.0

type EnqueuerConfig struct {
	CacheHost         string
	CachePort         int
	CacheSSLMode      bool
	CachePassword     string
	CacheMaxConns     *int
	CacheReadTimeout  *time.Duration
	CacheWriteTimeout *time.Duration
	CacheDialTimeout  *time.Duration
	TaskDefaultRetry  *int
}

type Environment added in v0.4.0

type Environment string
var (
	EnvDevelopment Environment = "dev"
	EnvIntegration Environment = "ci"
	EnvProduction  Environment = "prod"
)

type ErrorHandler added in v0.16.0

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

func NewErrorHandler added in v0.16.0

func NewErrorHandler(observer *Observer, config ErrorHandlerConfig) *ErrorHandler

func (*ErrorHandler) HandleCommand added in v0.16.0

func (self *ErrorHandler) HandleCommand(next RunnerHandler) RunnerHandler

func (*ErrorHandler) HandleRequest added in v0.16.0

func (self *ErrorHandler) HandleRequest(err error, ctx echo.Context)

func (*ErrorHandler) HandleTask added in v0.16.0

func (self *ErrorHandler) HandleTask(ctx context.Context, _ *asynq.Task, err error)

type ErrorHandlerConfig added in v0.16.0

type ErrorHandlerConfig struct {
	Environment        Environment
	MinStatusCodeToLog *int
}

type HTTPClient added in v0.16.0

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

func NewHTTPClient added in v0.16.0

func NewHTTPClient(observer *Observer, config HTTPClientConfig) *HTTPClient

func (*HTTPClient) Close added in v0.16.0

func (self *HTTPClient) Close(ctx context.Context) error

func (*HTTPClient) Do added in v0.16.0

func (self *HTTPClient) Do(request *http.Request) (*http.Response, error)

func (*HTTPClient) Request added in v0.16.0

func (self *HTTPClient) Request(
	ctx context.Context, method string, url string,
	body []byte, headers map[string]string, retry ...RetryConfig) (*http.Response, error)

type HTTPClientConfig added in v0.16.0

type HTTPClientConfig struct {
	Timeout          time.Duration
	BaseURL          *string
	Headers          *map[string]string
	RaiseForStatus   *bool
	AllowedRedirects *int
	DefaultRetry     *RetryConfig
}

type HTTPError added in v0.16.0

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

func NewHTTPError added in v0.16.0

func NewHTTPError(code string, status int) HTTPError

func (HTTPError) Cause added in v0.16.0

func (self HTTPError) Cause(err error) *HTTPError

func (HTTPError) Code added in v0.16.0

func (self HTTPError) Code() string

func (HTTPError) Error added in v0.16.0

func (self HTTPError) Error() string

func (HTTPError) Format added in v0.16.0

func (self HTTPError) Format(format fmt.State, verb rune)

func (HTTPError) Has added in v0.16.0

func (self HTTPError) Has(err error) bool

func (HTTPError) Is added in v0.16.0

func (self HTTPError) Is(err error) bool

func (HTTPError) MarshalJSON added in v0.16.0

func (self HTTPError) MarshalJSON() ([]byte, error)

func (HTTPError) MarshalText added in v0.16.0

func (self HTTPError) MarshalText() ([]byte, error)

func (*HTTPError) Redact added in v0.16.0

func (self *HTTPError) Redact()

func (HTTPError) Status added in v0.16.0

func (self HTTPError) Status() int

func (HTTPError) String added in v0.16.0

func (self HTTPError) String() string

func (HTTPError) Unwrap added in v0.16.0

func (self HTTPError) Unwrap() error

type HTTPServer added in v0.16.0

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

func NewHTTPServer added in v0.16.0

func NewHTTPServer(observer *Observer, serializer *Serializer, binder *Binder,
	renderer *Renderer, errorHandler *ErrorHandler, config HTTPServerConfig) *HTTPServer

func (*HTTPServer) Close added in v0.16.0

func (self *HTTPServer) Close(ctx context.Context) error

func (*HTTPServer) Default added in v0.16.0

func (self *HTTPServer) Default(middleware ...echo.MiddlewareFunc) *echo.Group

func (*HTTPServer) Host added in v0.16.0

func (self *HTTPServer) Host(host string, middleware ...echo.MiddlewareFunc) *echo.Group

func (*HTTPServer) Run added in v0.16.0

func (self *HTTPServer) Run(ctx context.Context) error

func (*HTTPServer) Use added in v0.16.0

func (self *HTTPServer) Use(middleware ...echo.MiddlewareFunc)

type HTTPServerConfig added in v0.16.0

type HTTPServerConfig struct {
	Environment              Environment
	Port                     int
	RequestHeaderMaxSize     *int
	RequestBodyMaxSize       *int
	RequestFileMaxSize       *int
	RequestFilePattern       *string
	RequestKeepAliveTimeout  *time.Duration
	RequestReadTimeout       *time.Duration
	RequestReadHeaderTimeout *time.Duration
	RequestIPExtractor       *func(*http.Request) string
	ResponseWriteTimeout     *time.Duration
}

type IsolationLevel added in v0.16.0

type IsolationLevel int
var (
	IsoLvlReadUncommitted IsolationLevel = 0
	IsoLvlReadCommitted   IsolationLevel = 1
	IsoLvlRepeatableRead  IsolationLevel = 2
	IsoLvlSerializable    IsolationLevel = 3
)

type Key added in v0.2.0

type Key string
var KeyBase Key = "kit:"
var (
	KeyDatabaseTransaction Key = KeyBase + "database:transaction"
)
var (
	KeyLocalizerLocale Key = KeyBase + "localizer:locale"
)
var (
	KeyTraceID Key = KeyBase + "trace:id"
)

type Level added in v0.4.0

type Level int
var (
	LvlTrace Level = -5
	LvlDebug Level = -4
	LvlInfo  Level = -3
	LvlWarn  Level = -2
	LvlError Level = -1
	LvlNone  Level = 0
)

type Localizer

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

func NewLocalizer

func NewLocalizer(observer *Observer, config LocalizerConfig) (*Localizer, error)

func (Localizer) GetLocale

func (self Localizer) GetLocale(ctx context.Context) language.Tag

func (Localizer) Localize

func (self Localizer) Localize(ctx context.Context, copy string, i ...any) string

func (*Localizer) Refresh

func (self *Localizer) Refresh() error

func (Localizer) SetLocale

func (self Localizer) SetLocale(ctx context.Context, locale language.Tag) context.Context

type LocalizerConfig

type LocalizerConfig struct {
	DefaultLocale     language.Tag
	LocalesPath       *string
	LocaleFilePattern *string
}

type Logger

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

func NewLogger

func NewLogger(config LoggerConfig) *Logger

func (Logger) Close

func (self Logger) Close(ctx context.Context) error

func (Logger) Debug

func (self Logger) Debug(i ...any)

func (Logger) Debugf

func (self Logger) Debugf(format string, i ...any)

func (Logger) Error

func (self Logger) Error(i ...any)

func (Logger) Errorf

func (self Logger) Errorf(format string, i ...any)

func (Logger) Fatal

func (self Logger) Fatal(i ...any)

func (Logger) Fatalf

func (self Logger) Fatalf(format string, i ...any)

func (Logger) Flush

func (self Logger) Flush(ctx context.Context) error

func (*Logger) Header

func (self *Logger) Header() string

func (Logger) Info

func (self Logger) Info(i ...any)

func (Logger) Infof

func (self Logger) Infof(format string, i ...any)

func (Logger) Level

func (self Logger) Level() Level

func (Logger) Logger

func (self Logger) Logger() *zerolog.Logger

func (Logger) Output

func (self Logger) Output() io.Writer

func (Logger) Panic

func (self Logger) Panic(i ...any)

func (Logger) Panicf

func (self Logger) Panicf(format string, i ...any)

func (Logger) Prefix

func (self Logger) Prefix() string

func (Logger) Print

func (self Logger) Print(i ...any)

func (Logger) Printf

func (self Logger) Printf(format string, i ...any)

func (*Logger) SetHeader

func (self *Logger) SetHeader(h string)

func (*Logger) SetLevel

func (self *Logger) SetLevel(l Level)

func (*Logger) SetOutput

func (self *Logger) SetOutput(w io.Writer)

func (*Logger) SetPrefix

func (self *Logger) SetPrefix(p string)

func (*Logger) SetVerbose

func (self *Logger) SetVerbose(v bool)

func (Logger) Verbose

func (self Logger) Verbose() bool

func (Logger) Warn

func (self Logger) Warn(i ...any)

func (Logger) Warnf

func (self Logger) Warnf(format string, i ...any)

func (Logger) WithLevel

func (self Logger) WithLevel(level Level, i ...any)

func (Logger) WithLevelf

func (self Logger) WithLevelf(level Level, format string, i ...any)

type LoggerConfig

type LoggerConfig struct {
	Level          Level
	Service        string
	SkipFrameCount *int
}

type Migrator

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

func NewMigrator

func NewMigrator(ctx context.Context, observer *Observer, config MigratorConfig,
	retry ...RetryConfig) (*Migrator, error)

func (*Migrator) Apply

func (self *Migrator) Apply(ctx context.Context, schemaVersion int) error

TODO: concurrent-safe

func (*Migrator) Assert

func (self *Migrator) Assert(ctx context.Context, schemaVersion int) error

TODO: concurrent-safe

func (*Migrator) Close

func (self *Migrator) Close(ctx context.Context) error

func (*Migrator) Rollback

func (self *Migrator) Rollback(ctx context.Context, schemaVersion int) error

TODO: concurrent-safe nolint:gocognit,revive

func (*Migrator) Version added in v0.22.0

func (self *Migrator) Version(ctx context.Context) (int, bool, error)

TODO: concurrent-safe

type MigratorConfig

type MigratorConfig struct {
	DatabaseHost     string
	DatabasePort     int
	DatabaseSSLMode  string
	DatabaseUser     string
	DatabasePassword string
	DatabaseName     string
	MigrationsPath   *string
}

type Observer

type Observer struct {
	Logger
	// contains filtered or unexported fields
}

func NewObserver

func NewObserver(ctx context.Context, config ObserverConfig, retry ...RetryConfig) (*Observer, error)

func (Observer) Close

func (self Observer) Close(ctx context.Context) error

func (Observer) Debug

func (self Observer) Debug(_ context.Context, i ...any)

func (Observer) Debugf

func (self Observer) Debugf(_ context.Context, format string, i ...any)

func (Observer) Error

func (self Observer) Error(ctx context.Context, i ...any)

func (Observer) Errorf

func (self Observer) Errorf(ctx context.Context, format string, i ...any)

func (Observer) Fatal

func (self Observer) Fatal(ctx context.Context, i ...any)

func (Observer) Fatalf

func (self Observer) Fatalf(ctx context.Context, format string, i ...any)

func (Observer) Flush

func (self Observer) Flush(ctx context.Context) error

func (Observer) GetTrace

func (self Observer) GetTrace(ctx context.Context) string

func (Observer) Info

func (self Observer) Info(_ context.Context, i ...any)

func (Observer) Infof

func (self Observer) Infof(_ context.Context, format string, i ...any)

func (Observer) Panic

func (self Observer) Panic(ctx context.Context, i ...any)

func (Observer) Panicf

func (self Observer) Panicf(ctx context.Context, format string, i ...any)

func (Observer) Print

func (self Observer) Print(_ context.Context, i ...any)

func (Observer) Printf

func (self Observer) Printf(_ context.Context, format string, i ...any)

func (Observer) SetTrace

func (self Observer) SetTrace(ctx context.Context, traceID string) context.Context

func (Observer) TraceClientRequest added in v0.16.0

func (self Observer) TraceClientRequest(ctx context.Context, request *http.Request) (context.Context, func())

func (Observer) TraceCommand added in v0.16.0

func (self Observer) TraceCommand(ctx context.Context, command *cli.Context) (context.Context, func())

func (Observer) TraceQuery

func (self Observer) TraceQuery(ctx context.Context, sql string, args ...any) (context.Context, func())

func (Observer) TraceServerRequest added in v0.16.0

func (self Observer) TraceServerRequest(ctx context.Context, request *http.Request) (context.Context, func())

func (Observer) TraceSpan

func (self Observer) TraceSpan(ctx context.Context, name ...string) (context.Context, func())

func (Observer) TraceTask added in v0.11.0

func (self Observer) TraceTask(ctx context.Context, task *asynq.Task) (context.Context, func())

func (Observer) Warn

func (self Observer) Warn(_ context.Context, i ...any)

func (Observer) Warnf

func (self Observer) Warnf(_ context.Context, format string, i ...any)

func (Observer) WithLevel

func (self Observer) WithLevel(ctx context.Context, level Level, i ...any)

func (Observer) WithLevelf

func (self Observer) WithLevelf(ctx context.Context, level Level, format string, i ...any)

type ObserverConfig

type ObserverConfig struct {
	Environment Environment
	Release     string
	Service     string
	Level       Level
	Sentry      *ObserverSentryConfig
	Gilk        *ObserverGilkConfig
}

type ObserverGilkConfig

type ObserverGilkConfig struct {
	Port int
}

type ObserverSentryConfig

type ObserverSentryConfig struct {
	Dsn string
}

type Renderer

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

func NewRenderer

func NewRenderer(observer *Observer, config RendererConfig) (*Renderer, error)

func (*Renderer) Render

func (self *Renderer) Render(w io.Writer, name string, data any, _ echo.Context) error

func (*Renderer) RenderBytes

func (self *Renderer) RenderBytes(template string, data any) ([]byte, error)

func (*Renderer) RenderString

func (self *Renderer) RenderString(template string, data any) (string, error)

func (*Renderer) RenderWriter

func (self *Renderer) RenderWriter(w io.Writer, template string, data any) error

type RendererConfig

type RendererConfig struct {
	TemplatesPath       *string
	TemplateFilePattern *string
}

type RetryConfig added in v0.16.0

type RetryConfig struct {
	Attempts     int
	InitialDelay time.Duration
	LimitDelay   time.Duration
	Retriables   []error
}

type Runner added in v0.16.0

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

func NewRunner added in v0.16.0

func NewRunner(observer *Observer, errorHandler *ErrorHandler, config RunnerConfig) *Runner

func (*Runner) Close added in v0.16.0

func (self *Runner) Close(ctx context.Context) error

func (*Runner) Register added in v0.16.0

func (self *Runner) Register(command string, handler RunnerHandler, args any, description ...string)

func (*Runner) Run added in v0.16.0

func (self *Runner) Run(ctx context.Context) error

func (*Runner) Use added in v0.16.0

func (self *Runner) Use(middleware ...func(RunnerHandler) RunnerHandler)

type RunnerConfig added in v0.16.0

type RunnerConfig struct {
	Service string
	Release string
}

type RunnerHandler added in v0.16.0

type RunnerHandler func(context.Context, *cli.Context) error

type Serializer

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

func NewSerializer

func NewSerializer(observer *Observer, config SerializerConfig) *Serializer

func (*Serializer) Deserialize

func (self *Serializer) Deserialize(c echo.Context, i any) error

func (*Serializer) Serialize

func (self *Serializer) Serialize(c echo.Context, i any, indent string) error

type SerializerConfig

type SerializerConfig struct {
}

type Worker

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

func NewWorker added in v0.8.0

func NewWorker(observer *Observer, errorHandler *ErrorHandler, config WorkerConfig) *Worker

func (*Worker) Close added in v0.8.0

func (self *Worker) Close(ctx context.Context) error

func (*Worker) Register added in v0.8.0

func (self *Worker) Register(task string, handler func(context.Context, *asynq.Task) error)

func (*Worker) Run added in v0.8.0

func (self *Worker) Run(ctx context.Context) error

func (*Worker) Schedule added in v0.8.0

func (self *Worker) Schedule(task string, params any, cron string, options ...asynq.Option)

func (*Worker) Use added in v0.8.0

func (self *Worker) Use(middleware ...asynq.MiddlewareFunc)

type WorkerConfig added in v0.8.0

type WorkerConfig struct {
	Queues               map[string]int
	Concurrency          *int
	StrictPriority       *bool
	StopTimeout          *time.Duration
	TimeZone             *time.Location
	ScheduleDefaultRetry *int
	CacheHost            string
	CachePort            int
	CacheSSLMode         bool
	CachePassword        string
	CacheMaxConns        *int
	CacheReadTimeout     *time.Duration
	CacheWriteTimeout    *time.Duration
	CacheDialTimeout     *time.Duration
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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