informer

package
v0.2.5 Latest Latest
Warning

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

Go to latest
Published: May 2, 2022 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewBufferedChannel

func NewBufferedChannel[V any](initBufferSize int) *bufferedChannel[V]

func WaitFirstSynced

func WaitFirstSynced[ObjectContent any](stopCh <-chan struct{}, informer Informer[ObjectContent]) bool

func WaitFirstSyncedWithTimeout

func WaitFirstSyncedWithTimeout[ObjectContent any](stopCh <-chan struct{}, timeout time.Duration, informer Informer[ObjectContent]) bool

Types

type Clock

type Clock interface {
	Now() time.Time
}

type Config

type Config struct {
	ResyncPeriod time.Duration `validate:"required"`

	// OnListError will be called when List error
	// it will block list
	// can be nil, will ignore list error
	OnListError func(err error, continuousCount int)

	// Clock use to mock time-related functions
	// can be nil, will use realClock
	Clock Clock
}

type Event

type Event[ObjectContent any] struct {
	Type EventType

	OldObject *Object[ObjectContent] // nil if create
	NewObject *Object[ObjectContent] // nil if delete
}

type EventDispatcher

type EventDispatcher[ObjectContent any] interface {
	Run(stopCh <-chan struct{})
	Push(event Event[ObjectContent])

	// should never call AddHandler and deleteHandler after Run
	AddHandler(handler EventHandler[ObjectContent]) (deleteHandler func())
}

func NewEventDispatcher

func NewEventDispatcher[ObjectContent any]() EventDispatcher[ObjectContent]

type EventHandler

type EventHandler[ObjectContent any] interface {
	Handle(event Event[ObjectContent])
}

type EventHandlerFunc

type EventHandlerFunc[ObjectContent any] func(event Event[ObjectContent])

func (EventHandlerFunc[ObjectContent]) Handle

func (ehf EventHandlerFunc[ObjectContent]) Handle(event Event[ObjectContent])

type EventType

type EventType string
const (
	CreateEvent EventType = "CREATE"
	UpdateEvent EventType = "UPDATE"
	DeleteEvent EventType = "DELETE"
)

type Informer

type Informer[ObjectContent any] interface {
	Run(ctx context.Context)

	// LastSyncTime return last successful sync time, update after List returned
	LastSyncTime() time.Time

	Interface() Interface[ObjectContent]

	Lister[ObjectContent]
	// todo[maybe]: Indexer
	AddHandler(handler EventHandler[ObjectContent]) (deleteHandler func())
}

func New

func New[ObjectContent any](config Config, intf Interface[ObjectContent]) (Informer[ObjectContent], error)

type Interface

type Interface[ObjectContent any] interface {
	Create(ctx context.Context, object Object[ObjectContent]) (Object[ObjectContent], error)

	// List return all objects
	List(ctx context.Context) ([]Object[ObjectContent], error)
	Get(ctx context.Context, name string) (Object[ObjectContent], error)

	Update(ctx context.Context, object Object[ObjectContent]) (Object[ObjectContent], error)

	Delete(ctx context.Context, name string) error
}

Interface is used to access remote resources. may implmented by HTTP API or MySQL, etc.

type Lister

type Lister[ObjectContent any] interface {
	List() []*Object[ObjectContent]
	Get(name string) *Object[ObjectContent] // return nil, if not exist
}

type Object

type Object[Content any] struct {
	ObjectMeta

	Content Content
}

type ObjectMeta

type ObjectMeta struct {
	Name            string
	ResourceVersion string
}

type TypedEventHandler

type TypedEventHandler[ObjectContent any] struct {
	OnCreate EventHandlerFunc[ObjectContent]
	OnUpdate EventHandlerFunc[ObjectContent]
	OnDelete EventHandlerFunc[ObjectContent]
}

func (TypedEventHandler[ObjectContent]) Handle

func (teh TypedEventHandler[ObjectContent]) Handle(event Event[ObjectContent])

Jump to

Keyboard shortcuts

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