...

Package registry

import "github.com/gonitro/nitro/app/registry"
Overview
Index
Subdirectories

Overview ▾

Package registry is an interface for service discovery

Constants

const (
    // GlobalDomain indicates any domain
    GlobalDomain = "*"
    // DefaultDomain to use if none was provided in options
    DefaultDomain = "nitro"
)

Variables

var (
    // Not found error when GetApp is called
    ErrNotFound = errors.New("service not found")
    // Watcher stopped error when watcher is stopped
    ErrWatcherStopped = errors.New("watcher stopped")
)

type AddOption

type AddOption func(*AddOptions)

func AddContext

func AddContext(ctx context.Context) AddOption

func AddDomain

func AddDomain(d string) AddOption

func AddTTL

func AddTTL(t time.Duration) AddOption

type AddOptions

type AddOptions struct {
    TTL time.Duration
    // Other options for implementations of the interface
    // can be stored in a context
    Context context.Context
    // Domain to register the service in
    Domain string
}

type App

type App struct {
    Name      string            `json:"name"`
    Version   string            `json:"version"`
    Metadata  map[string]string `json:"metadata"`
    Endpoints []*Endpoint       `json:"endpoints"`
    Instances []*Instance       `json:"instances"`
}

type Endpoint

type Endpoint struct {
    Name     string            `json:"name"`
    Request  *Value            `json:"request"`
    Response *Value            `json:"response"`
    Metadata map[string]string `json:"metadata"`
}

type Event

Event is registry event

type Event struct {
    // Id is registry id
    Id string
    // Type defines type of event
    Type EventType
    // Timestamp is event timestamp
    Timestamp time.Time
    // App is registry service
    App *App
}

type EventType

EventType defines registry event type

type EventType int
const (
    // Create is emitted when a new service is registered
    Create EventType = iota
    // Delete is emitted when an existing service is deregistered
    Delete
    // Update is emitted when an existing service is updated
    Update
)

func (EventType) String

func (t EventType) String() string

String returns human readable event type

type GetOption

type GetOption func(*GetOptions)

func GetContext

func GetContext(ctx context.Context) GetOption

func GetDomain

func GetDomain(d string) GetOption

type GetOptions

type GetOptions struct {
    Context context.Context
    // Domain to scope the request to
    Domain string
}

type Instance

type Instance struct {
    Id       string            `json:"id"`
    Address  string            `json:"address"`
    Metadata map[string]string `json:"metadata"`
}

type ListOption

type ListOption func(*ListOptions)

func ListContext

func ListContext(ctx context.Context) ListOption

func ListDomain

func ListDomain(d string) ListOption

type ListOptions

type ListOptions struct {
    Context context.Context
    // Domain to scope the request to
    Domain string
}

type Option

type Option func(*Options)

func Addrs

func Addrs(addrs ...string) Option

Addrs is the registry addresses to use

func Secure

func Secure(b bool) Option

Secure communication with the registry

func TLSConfig

func TLSConfig(t *tls.Config) Option

Specify TLS Config

func Timeout

func Timeout(t time.Duration) Option

type Options

type Options struct {
    Addrs     []string
    Timeout   time.Duration
    Secure    bool
    TLSConfig *tls.Config
    // Other options for implementations of the interface
    // can be stored in a context
    Context context.Context
}

type RemoveOption

type RemoveOption func(*RemoveOptions)

func RemoveContext

func RemoveContext(ctx context.Context) RemoveOption

func RemoveDomain

func RemoveDomain(d string) RemoveOption

type RemoveOptions

type RemoveOptions struct {
    Context context.Context
    // Domain the service was registered in
    Domain string
}

type Result

Result is returned by a call to Next on the watcher. Actions can be create, update, delete

type Result struct {
    Action string
    App    *App
}

type Table

The registry provides an interface for service discovery and an abstraction over varying implementations {consul, etcd, zookeeper, ...}

type Table interface {
    Init(...Option) error
    Options() Options
    Add(*App, ...AddOption) error
    Remove(*App, ...RemoveOption) error
    Get(string, ...GetOption) ([]*App, error)
    List(...ListOption) ([]*App, error)
    Watch(...WatchOption) (Watcher, error)
    String() string
}

type Value

type Value struct {
    Name   string   `json:"name"`
    Type   string   `json:"type"`
    Values []*Value `json:"values"`
}

type WatchOption

type WatchOption func(*WatchOptions)

func WatchApp

func WatchApp(name string) WatchOption

Watch a service

func WatchContext

func WatchContext(ctx context.Context) WatchOption

func WatchDomain

func WatchDomain(d string) WatchOption

type WatchOptions

type WatchOptions struct {
    // Specify a service to watch
    // If blank, the watch is for all services
    App string
    // Other options for implementations of the interface
    // can be stored in a context
    Context context.Context
    // Domain to watch
    Domain string
}

type Watcher

Watcher is an interface that returns updates about services within the registry.

type Watcher interface {
    // Next is a blocking call
    Next() (*Result, error)
    Stop()
}

Subdirectories

Name Synopsis
..
memory Package memory provides an in-memory registry