Documentation ¶
Index ¶
- Constants
- Variables
- func CallRpcEndpoint(e string, p any) (res any, err error)
- func Custom(v uint16) uint16
- func EnsureDir(c string) error
- func GetSelfsignedCertificate(n string) (*tls.Certificate, error)
- func IsReady() bool
- func SetCustomHandler(pc uint16, h CustomHandler)
- func SetRpcEndpoint(e string, f RpcEndpoint)
- func UniqueTimestamp() uint64
- type Agent
- func (a *Agent) AddService(service string) (net.Listener, error)
- func (a *Agent) AllRPC(ctx context.Context, endpoint string, data any) ([]any, error)
- func (a *Agent) AllRpcRequest(ctx context.Context, endpoint string, data []byte) ([]any, error)
- func (a *Agent) AltNames() []string
- func (a *Agent) AnyRpc(ctx context.Context, division string, endpoint string, data any) error
- func (a *Agent) BroadcastPacket(ctx context.Context, pc uint16, data []byte) error
- func (a *Agent) BroadcastRpc(ctx context.Context, endpoint string, data any) error
- func (a *Agent) BroadcastRpcBin(ctx context.Context, endpoint string, pkt []byte) (n int, err error)
- func (a *Agent) CacheDir() string
- func (a *Agent) Close()
- func (a *Agent) ConfigureTlsServer(cfg *tls.Config)
- func (a *Agent) Connect(id string, service string) (net.Conn, error)
- func (a *Agent) CountPeers() int
- func (a *Agent) DbDelete(key string) error
- func (a *Agent) DbGet(key string) ([]byte, error)
- func (a *Agent) DbKeys(bucket, prefix []byte) func(yield func(k, v []byte) bool)
- func (a *Agent) DbSet(key string, value []byte) error
- func (a *Agent) DbWatch(key string, cb func(string, []byte))
- func (a *Agent) DebugLocks(w io.Writer)
- func (a *Agent) Dial(network, addr string) (net.Conn, error)
- func (a *Agent) DialContext(c context.Context, network, addr string) (net.Conn, error)
- func (a *Agent) Division() string
- func (a *Agent) DivisionPrefixRpc(ctx context.Context, divMatch string, endpoint string, data any) error
- func (a *Agent) DivisionRpc(ctx context.Context, division int, endpoint string, data any) error
- func (a *Agent) DumpInfo(w io.Writer)
- func (a *Agent) ExternalKey() (crypto.PrivateKey, error)
- func (a *Agent) GenInternalCert() (tls.Certificate, error)
- func (a *Agent) GetCA() (*x509.CertPool, error)
- func (a *Agent) GetClientTlsConfig() (*tls.Config, error)
- func (a *Agent) GetInternalCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error)
- func (a *Agent) GetInternalTlsConfig() (*tls.Config, error)
- func (a *Agent) GetPeer(id string) *Peer
- func (a *Agent) GetPeerByName(name string) *Peer
- func (a *Agent) GetPeers() []*Peer
- func (a *Agent) GetPeersCount() uint32
- func (a *Agent) GetPublicCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error)
- func (a *Agent) GetStatus() int
- func (a *Agent) GetStringSetting(v string) string
- func (a *Agent) GetTlsConfig() (*tls.Config, error)
- func (a *Agent) Id() string
- func (a *Agent) InternalKey() (crypto.Signer, error)
- func (a *Agent) IsConnected(id string) bool
- func (a *Agent) KeyShake128(N []byte) (sha3.ShakeHash, error)deprecated
- func (a *Agent) KeyShake256(N []byte) (sha3.ShakeHash, error)deprecated
- func (a *Agent) Lock(ctx context.Context, name string) (*LocalLock, error)
- func (a *Agent) MetaSet(key string, value any)
- func (a *Agent) Name() (string, string)
- func (a *Agent) NewRpcInstance(name string) (RPC, error)
- func (a *Agent) RPC(ctx context.Context, id string, endpoint string, data any) (any, error)
- func (a *Agent) RoundTripper() http.RoundTripper
- func (a *Agent) RpcRequest(ctx context.Context, id string, endpoint string, data []byte) ([]byte, error)
- func (a *Agent) RpcSend(ctx context.Context, id string, endpoint string, data []byte) error
- func (a *Agent) SeedCrypt(in []byte) ([]byte, error)
- func (a *Agent) SeedDecrypt(in []byte) ([]byte, error)
- func (a *Agent) SeedId() uuid.UUID
- func (a *Agent) SeedShake128(N []byte) sha3.ShakeHash
- func (a *Agent) SeedShake256(N []byte) sha3.ShakeHash
- func (a *Agent) SeedSign(in []byte) []byte
- func (a *Agent) SeedTlsConfig(c *tls.Config)
- func (a *Agent) SendPacketTo(ctx context.Context, target string, pc uint16, data []byte) error
- func (a *Agent) SendTo(ctx context.Context, target string, pkt any) error
- func (a *Agent) Settings() (map[string]any, error)
- func (a *Agent) Spot() *spotlib.Client
- func (a *Agent) SwitchChannel(channel string) error
- func (a *Agent) WaitReady()
- type AgentOption
- type CustomHandler
- type DbStamp
- func (t DbStamp) After(t2 DbStamp) bool
- func (t DbStamp) Bytes() []byte
- func (t *DbStamp) GobDecode(data []byte) error
- func (t DbStamp) GobEncode() ([]byte, error)
- func (t DbStamp) MarshalBinary() ([]byte, error)
- func (t DbStamp) String() string
- func (t DbStamp) Unix() int64
- func (t DbStamp) UnixNano() int64
- func (t *DbStamp) UnmarshalBinary(data []byte) error
- type DbWatchCallback
- type GetFileFunc
- type LocalLock
- type Packet
- type PacketAnnounce
- type PacketDbRecord
- type PacketDbRequest
- type PacketDbVersions
- type PacketDbVersionsEntry
- type PacketHandshake
- type PacketRpc
- type PacketRpcResponse
- type Peer
- func (p *Peer) Addr() net.Addr
- func (p *Peer) Agent() *Agent
- func (p *Peer) Close(reason string) error
- func (p *Peer) Division() string
- func (p *Peer) Id() string
- func (p *Peer) IsAlive() bool
- func (p *Peer) Meta() map[string]any
- func (p *Peer) Name() string
- func (p *Peer) RemoteAddr() net.Addr
- func (p *Peer) Send(ctx context.Context, pkt Packet) error
- func (p *Peer) String() string
- func (p *Peer) WritePacket(ctx context.Context, pc uint16, data []byte) error
- type RPC
- type RpcEndpoint
Constants ¶
const ( PacketMaxLen = 32 * 1024 * 1024 // 32MB PacketHeaderSize = 6 // 2 bytes packet code, 4 bytes packet length PacketMaxBody = PacketMaxLen - PacketHeaderSize PacketLegacy = 0xffff // legacy gob-encoded packet PacketPing = 0x1001 PacketPong = 0x3001 PacketLockReq = 0x1002 // request for lock PacketLockRes = 0x3002 // response (aye or nay) PacketLockConfirm = 0x1003 // lock is confirmed (or re-confirmed) → status = 1 PacketLockRelease = 0x1004 // lock is released PacketSeed = 0x1005 // seed data PacketRpcBinReq = 0x1006 PacketRpcBinRes = 0x3006 PacketClose = 0x1fff PacketCustom = 0xa000 // 0xa000 ~ 0xafff are custom channels PacketCustomMax = 0xafff Aye = 1 Nay = 0 )
const UUID_SEEDID_SPACE = "da736663-83ec-46ef-9c29-3f9102c5c519"
Variables ¶
var ( ErrWriteQueueFull = errors.New("peer write queue is full") ErrPeerNoRoute = errors.New("no route to peer") ErrConnectionClosed = errors.New("connection has been closed") ErrInvalidLegacy = errors.New("invalid operation on legacy peer") ErrInvalidLockName = errors.New("invalid lock name") ErrCancelledLock = errors.New("lock request has been cancelled") ErrEndpointNameLen = errors.New("RPC endpoint name length too long") )
Functions ¶
func CallRpcEndpoint ¶ added in v0.3.23
CallRpcEndpoint will call the named RPC endpoint on the local machine
func Custom ¶ added in v0.5.12
Custom returns a packet id for a given custom packet Typically you will define your custom packet as follow:
var MyCustomPacket = fleet.Custom(0)
func GetSelfsignedCertificate ¶ added in v0.8.3
func GetSelfsignedCertificate(n string) (*tls.Certificate, error)
GetSelfsignedCertificate is a utility function that returns a self-signed certificate for any given host name
All generated certificates are cached, and calling this method multiple times with the same name will return the same certificate for a few days, and will then generate a new certificate.
func IsReady ¶ added in v0.11.8
func IsReady() bool
IsReady returns true if the fleet is initiated and configured properly
func SetCustomHandler ¶ added in v0.5.12
func SetCustomHandler(pc uint16, h CustomHandler)
func SetRpcEndpoint ¶
func SetRpcEndpoint(e string, f RpcEndpoint)
func UniqueTimestamp ¶ added in v0.6.15
func UniqueTimestamp() uint64
UniqueTimestamp returns a uint64 timestamp in microsecond that is unique, so that even if called multiple times in the same millisecond each call will return a different value.
This can be safely called from multiple threads, it does not lock.
Types ¶
type Agent ¶
type Agent struct { IP string // ip as seen from outside Events *emitter.Hub // getfile callback GetFile GetFileFunc // contains filtered or unexported fields }
func New ¶ added in v0.5.0
func New(opts ...AgentOption) *Agent
New will just initialize a basic agent without any settings
func Self ¶ added in v0.5.0
func Self() *Agent
Self returns the Agent instance returned by New() (or similar), and will wait if instance has not been instanciated yet. As such, Self() should not be used in func init(), but only in separate goroutines or after instance has been created.
func WithGetFile ¶ added in v0.5.0
func WithGetFile(f GetFileFunc, opts ...AgentOption) *Agent
return a new agent using the provided GetFile method
func WithIssuer ¶ added in v0.5.0
func WithIssuer(url string, opts ...AgentOption) *Agent
func (*Agent) AddService ¶ added in v0.5.0
func (*Agent) AllRpcRequest ¶ added in v0.9.5
func (*Agent) AltNames ¶ added in v0.11.19
AltNames will attempt to return alternative names from the certificate issued to this node
func (*Agent) BroadcastPacket ¶ added in v0.5.12
func (*Agent) BroadcastRpc ¶ added in v0.5.0
BroadcastRpc broadcasts the given data to the specified endpoint
func (*Agent) BroadcastRpcBin ¶ added in v0.9.5
func (*Agent) ConfigureTlsServer ¶ added in v0.5.0
func (*Agent) Connect ¶ added in v0.5.0
connect to given peer under specified protocol (if supported)
func (*Agent) CountPeers ¶ added in v0.6.8
func (*Agent) DbDelete ¶ added in v0.8.2
DbDelete will remove a value from the shared fleet database
func (*Agent) DbWatch ¶ added in v0.5.0
DbWatch will trigger the cb function upon updates of the given key Special key "*" covers all keys (can only be one callback for a key) If the value is nil, it means it is being deleted
func (*Agent) DebugLocks ¶ added in v0.6.21
func (*Agent) DialContext ¶ added in v0.5.0
func (*Agent) Division ¶ added in v0.11.22
Division returns the division (locality) of the local node
func (*Agent) DivisionPrefixRpc ¶ added in v0.5.0
func (*Agent) DivisionRpc ¶ added in v0.5.0
func (*Agent) ExternalKey ¶ added in v0.11.12
func (a *Agent) ExternalKey() (crypto.PrivateKey, error)
ExternalKey returns the key associated with the cluster, if any. If this host hasn't joined a cluster or the cluster has no shared key, this will return fs.ErrNotExist
func (*Agent) GenInternalCert ¶ added in v0.5.0
func (a *Agent) GenInternalCert() (tls.Certificate, error)
func (*Agent) GetClientTlsConfig ¶ added in v0.5.0
func (*Agent) GetInternalCertificate ¶ added in v0.7.0
func (a *Agent) GetInternalCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error)
return internal certificate (cached)
func (*Agent) GetInternalTlsConfig ¶ added in v0.5.11
func (*Agent) GetPeerByName ¶ added in v0.5.0
func (*Agent) GetPeersCount ¶ added in v0.6.12
GetPeersCount return the number of existing peers, connected or not. The value may be more than the number of entries GetPeers will return as some peers may be down or unavailable.
func (*Agent) GetPublicCertificate ¶ added in v0.7.0
func (a *Agent) GetPublicCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error)
func (*Agent) GetStringSetting ¶ added in v0.10.7
func (*Agent) GetTlsConfig ¶ added in v0.5.0
GetTlsConfig returns TLS config suitable for making public facing ssl servers.
func (*Agent) InternalKey ¶ added in v0.11.12
InternalKey returns the key associated with the local host, possibly a TPM key if the host has a functioning tpm.
func (*Agent) IsConnected ¶ added in v0.5.0
func (*Agent) NewRpcInstance ¶ added in v0.9.4
func (*Agent) RoundTripper ¶ added in v0.5.0
func (a *Agent) RoundTripper() http.RoundTripper
func (*Agent) RpcRequest ¶ added in v0.9.5
func (*Agent) RpcSend ¶ added in v0.9.5
RpcSend sends a request but expects no response, failure will only reported if the request failed to be sent, and failure on the other side will not be reported
func (*Agent) SeedTlsConfig ¶ added in v0.5.0
func (*Agent) SendPacketTo ¶ added in v0.5.12
func (*Agent) Settings ¶ added in v0.10.0
Settings fetches the current settings from the global system and returns these if the system is initializing, this will block until initialization is done
func (*Agent) SwitchChannel ¶ added in v0.8.7
SwitchChannel will signal the whole fleet to switch to the given channel for the currently running software. This can be used to switch between stable and beta versions and the like. Attempting to switch to a non-existing channel will trigger errors across the fleet.
type AgentOption ¶ added in v0.6.12
type AgentOption interface {
// contains filtered or unexported methods
}
type CustomHandler ¶ added in v0.5.12
type DbWatchCallback ¶ added in v0.3.16
type LocalLock ¶ added in v0.6.12
type LocalLock struct {
// contains filtered or unexported fields
}
type PacketAnnounce ¶
type PacketDbRecord ¶
type PacketDbRequest ¶ added in v0.3.14
type PacketDbRequest struct { TargetId string SourceId string Bucket []byte // typically "app" Key []byte }
PacketDbRequest requests a specific record, response will be a PacketDbRecord
type PacketDbVersions ¶ added in v0.3.14
type PacketDbVersions struct {
Info []*PacketDbVersionsEntry
}
PacketDbVersions signals what records are available in a peer, typically sent on connection established
type PacketDbVersionsEntry ¶ added in v0.3.14
type PacketHandshake ¶
type PacketRpcResponse ¶
type Peer ¶
func (*Peer) Id ¶ added in v0.5.12
Id returns the peer's internal ID, which is unique and can be used to send packets to this peer specifically in the future.
func (*Peer) RemoteAddr ¶ added in v0.8.11
type RPC ¶ added in v0.9.4
type RPC interface { // All will send a given data object to all other RPC instances on the fleet // and will collect responses All(ctx context.Context, data []byte) ([]any, error) // Broadcast will do the same as All but will not wait for responses Broadcast(ctx context.Context, data []byte) error // Request will send a given object to a specific peer and return the response Request(ctx context.Context, id string, data []byte) ([]byte, error) // Send will send a given object to a specific peer but ignore the response Send(ctx context.Context, id string, data []byte) error // Self will return the id of the local peer, can be used for other instances // to contact here with Send(). Self() string // ListOnlinePeers returns a list of connected peers ListOnlinePeers() []string // CountAllPeers return the number of known connected or offline peers CountAllPeers() int // Connect connects this RPC instance incoming events to a given function // that will be called each time an event is received. Connect(cb func(context.Context, []byte) ([]byte, error)) }
type RpcEndpoint ¶
RpcEndpoint represents a callback function for the legacy RPC system