stats

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Mar 11, 2021 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ReadyEndpoint   = "/health/ready"
	AliveEndpoint   = "/health/alive"
	MetricsEndpoint = "/metrics"

	ProvidersName = "statistics"
)

Variables

View Source
var (
	ErrEmptyStatistics     = errors.New("empty statistics")
	ErrEmptyDependencyName = errors.New("empty dependency name")
	ErrCheckFuncIsNil      = errors.New("pointer to checkFunc is nil")
	ErrEmptyMetricName     = errors.New("empty metric name")
)

Functions

func ErrInvalidMetricOptions

func ErrInvalidMetricOptions(iface interface{}) error

func ErrInvalidProviderOptions

func ErrInvalidProviderOptions(iface interface{}) error

func Registrate

func Registrate(ctx context.Context) context.Context

func RegistrateProvider

func RegistrateProvider(ctx context.Context, name string, p Provider) (context.Context, error)

Types

type BaseAnswer

type BaseAnswer struct {
	StatusCode int    `json:"statusCode"`
	Details    string `json:"details"`
}

Body of error answer

type CheckFunc

type CheckFunc func() (bool, string)

Checking function should accept no parameters and return boolean value which will be interpreted as dependency service readiness and a string which should provide error text if dependency service isn't ready and something else if dependency service is ready (for example, dependency service's version).

type ErrorAnswer

type ErrorAnswer struct {
	Body ErrorAnswerBody `json:"error"`
}

Send error answer.

func (ErrorAnswer) WriteJSON

func (answ ErrorAnswer) WriteJSON(w http.ResponseWriter) error

type ErrorAnswerBody

type ErrorAnswerBody struct {
	Code string `json:"code"`
	BaseAnswer
}

Body of error answer

type IProviderMetrics

type IProviderMetrics interface {
	// GetMetrics return map of the metrics from provider
	GetMetrics(prefix string) MapMetricsOptions
	// GetAliveHandlers return array of the aliveHandlers from provider
	GetAliveHandlers(prefix string) MapCheckFunc
	// GetReadyHandlers return array of the readyHandlers from provider
	GetReadyHandlers(prefix string) MapCheckFunc
}

type IProvidersMetrics

type IProvidersMetrics interface {
	// GetMetrics return map of the metrics from provider
	GetAllMetrics(out MapMetricsOptions) (MapMetricsOptions, error)
	// GetAliveHandlers return array of the aliveHandlers from provider
	GetAllAliveHandlers(out MapCheckFunc) (MapCheckFunc, error)
	// GetReadyHandlers return array of the readyHandlers from provider
	GetAllReadyHandlers(out MapCheckFunc) (MapCheckFunc, error)
}

type MapCheckFunc

type MapCheckFunc map[string]CheckFunc

func (MapCheckFunc) Fill

func (mcf MapCheckFunc) Fill(src MapCheckFunc)

func (MapCheckFunc) RegistrateHandler

func (mcf MapCheckFunc) RegistrateHandler(prov Provider) error

type MapMetricsOptions

type MapMetricsOptions map[string]*MetricOptions

func (MapMetricsOptions) Fill

func (mmo MapMetricsOptions) Fill(src MapMetricsOptions)

func (MapMetricsOptions) RegistrateMetric

func (mmo MapMetricsOptions) RegistrateMetric(prov Provider) error

type MetricOptions

type MetricOptions struct {
	// Metric is a metric
	Metric interface{}
	// MetricFunc is a func for update metric
	MetricFunc func(metric interface{})
}

MetricOptions descrbes struct with options for metrics

type Provider

type Provider interface {
	provider.IProvider
	provider.IEniter
	// RegisterAliveCheck should register a function for /health/alive
	// endpoint.
	// Checks registered via RegisterReadyCheck can appear in random order
	// in response.
	RegisterAliveCheck(dependencyName string, checkFunc CheckFunc) error
	// RegisterMetric should register a metric of defined type. Passed
	// metricName should be used only as internal identifier. Provider
	// should provide instructions for using metricOptions as well as
	// cast to appropriate type.
	RegisterMetric(metricName string, metricOptions interface{}) error
	// RegisterReadyCheck should register a function for /health/ready
	// endpoint.
	// Checks registered via RegisterReadyCheck can appear in random order
	// in response.
	RegisterReadyCheck(dependencyName string, checkFunc CheckFunc) error
}

Provider is an interface which every statistics provider should conform. Every provider should be able to respond on alive checks, ready checks and metrics request. It is up to provider to decide protocol for all things, but HTTP is preferred.

func GetProvider

func GetProvider(ctx context.Context, name string) (Provider, error)

type ResultAnswer

type ResultAnswer struct {
	Body interface{} `json:"result"`
}

func (ResultAnswer) WriteJSON

func (answ ResultAnswer) WriteJSON(w http.ResponseWriter) error

type Service

type Service struct {
	// Connection metrics
	Metrics MapMetricsOptions
	// Connection alive handlers
	AliveHandlers MapCheckFunc
	// Connection ready handlers
	ReadyHandlers MapCheckFunc
}

func (*Service) GetAliveHandlers

func (s *Service) GetAliveHandlers(prefix string) MapCheckFunc

GetAliveHandlers return array of the aliveHandlers from service

func (*Service) GetMetrics

func (s *Service) GetMetrics(prefix string) MapMetricsOptions

GetMetrics return map of the metrics from cache connection

func (*Service) GetReadyHandlers

func (s *Service) GetReadyHandlers(prefix string) MapCheckFunc

GetReadyHandlers return array of the readyHandlers from cache connection

type Statistics

type Statistics struct {
	*providers.BaseProviders
}

Statistics is a controlling structure for all statistics providers.

func Get

func Get(ctx context.Context) *Statistics

func NewStatistics

func NewStatistics(ctx context.Context) *Statistics

func (*Statistics) GetProvider

func (st *Statistics) GetProvider(providerName string) (Provider, error)

GetProvider returns provider interface to caller. Returns error if provider isn't registered.

func (*Statistics) RegisterAliveCheck

func (st *Statistics) RegisterAliveCheck(providerName, dependencyName string, checkFunc func() (bool, string)) error

RegisterAliveCheck registers check function for /health/alive endpoint in designated provider.

func (*Statistics) RegisterMetric

func (st *Statistics) RegisterMetric(providerName, metricName string, metricOptions interface{}) error

RegisterMetric registers metric in designated provider. It is up to provider to provide instructions on metrics registration.

func (*Statistics) RegisterReadyCheck

func (st *Statistics) RegisterReadyCheck(providerName, dependencyName string, checkFunc func() (bool, string)) error

RegisterReadyCheck registers check function for /health/ready endpoint in designated provider.

func (*Statistics) Start

func (st *Statistics) Start(metrics MapMetricsOptions, aliveHandlers, readyHandlers MapCheckFunc) error

Start sends start signal to all Statistic providers.

func (*Statistics) StartProvider

func (st *Statistics) StartProvider(providerName string, metrics MapMetricsOptions, aliveHandlers, readyHandlers MapCheckFunc) error

Start sends start signal to selected Statistic provider.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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