circuitbreaking

package
v2.0.2 Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2026 License: AGPL-3.0 Imports: 11 Imported by: 0

Documentation

Overview

Package circuitbreaking implements the circuit breaker pattern for managing service availability and preventing cascading failures.

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrCircuitBroken = errors.New("service circuit broken")

ErrCircuitBroken is returned when a circuit breaker has tripped.

View Source
var (
	Providers = wire.NewSet(
		ProvideCircuitBreaker,
	)
)

Functions

func RegisterCircuitBreaker

func RegisterCircuitBreaker(i do.Injector)

RegisterCircuitBreaker registers a CircuitBreaker with the injector.

Types

type CircuitBreaker

type CircuitBreaker interface {
	Failed()
	Succeeded()
	CanProceed() bool
	CannotProceed() bool
}

CircuitBreaker tracks failures and successes to determine whether an operation should proceed.

func EnsureCircuitBreaker

func EnsureCircuitBreaker(breaker CircuitBreaker) CircuitBreaker

EnsureCircuitBreaker ensures a valid CircuitBreaker is made available.

func NewNoopCircuitBreaker

func NewNoopCircuitBreaker() CircuitBreaker

NewNoopCircuitBreaker returns a CircuitBreaker that always allows operations to proceed.

Example
package main

import (
	"fmt"

	"github.com/verygoodsoftwarenotvirus/platform/v2/circuitbreaking"
)

func main() {
	cb := circuitbreaking.NewNoopCircuitBreaker()

	fmt.Println(cb.CanProceed())

	cb.Failed()
	fmt.Println(cb.CanProceed())
}
Output:

true
true

func ProvideCircuitBreaker

func ProvideCircuitBreaker(ctx context.Context, cfg *Config, logger logging.Logger, metricsProvider metrics.Provider) (CircuitBreaker, error)

type Config

type Config struct {
	Name                   string  `env:"NAME"                     json:"name"`
	ErrorRate              float64 `env:"ERROR_RATE"               json:"circuitBreakerErrorPercentage"`
	MinimumSampleThreshold uint64  `env:"MINIMUM_SAMPLE_THRESHOLD" json:"circuitBreakerMinimumOccurrenceThreshold"`
}

func (*Config) EnsureDefaults

func (cfg *Config) EnsureDefaults()

func (*Config) ProvideCircuitBreaker

func (cfg *Config) ProvideCircuitBreaker(ctx context.Context, logger logging.Logger, metricsProvider metrics.Provider) (CircuitBreaker, error)

ProvideCircuitBreaker provides a CircuitBreaker.

func (*Config) ValidateWithContext

func (cfg *Config) ValidateWithContext(ctx context.Context) error

type NoopCircuitBreaker

type NoopCircuitBreaker struct{}

NoopCircuitBreaker is a no-op implementation that always allows operations to proceed.

func (*NoopCircuitBreaker) CanProceed

func (n *NoopCircuitBreaker) CanProceed() bool

func (*NoopCircuitBreaker) CannotProceed

func (n *NoopCircuitBreaker) CannotProceed() bool

func (*NoopCircuitBreaker) Failed

func (n *NoopCircuitBreaker) Failed()

func (*NoopCircuitBreaker) Succeeded

func (n *NoopCircuitBreaker) Succeeded()

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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