Documentation ¶
Index ¶
- Constants
- func LevelFilter() *logutils.LevelFilter
- func NewLogWriter(buf int) *logWriter
- func ValidateLevelFilter(minLevel logutils.LogLevel, filter *logutils.LevelFilter) bool
- type Agent
- func (a *Agent) DeregisterEventHandler(eh EventHandler)
- func (a *Agent) ForceLeave(node string) error
- func (a *Agent) Join(addrs []string, replay bool) (n int, err error)
- func (a *Agent) Leave() error
- func (a *Agent) Query(name string, payload []byte, params *serf.QueryParam) (*serf.QueryResponse, error)
- func (a *Agent) RegisterEventHandler(eh EventHandler)
- func (a *Agent) Serf() *serf.Serf
- func (a *Agent) SerfConfig() *serf.Config
- func (a *Agent) Shutdown() error
- func (a *Agent) ShutdownCh() <-chan struct{}
- func (a *Agent) Start() error
- func (a *Agent) UserEvent(name string, payload []byte, coalesce bool) error
- type AgentIPC
- type AgentMDNS
- type AppendSliceValue
- type Command
- type Config
- type EventFilter
- type EventHandler
- type EventScript
- type GatedWriter
- type IPCClient
- type LogHandler
- type Member
- type MockEventHandler
- type MockQueryHandler
- type ScriptEventHandler
Constants ¶
const ( MinIPCVersion = 1 MaxIPCVersion = 1 )
const DefaultBindPort int = 7946
This is the default port that we use for Serf communication
Variables ¶
This section is empty.
Functions ¶
func LevelFilter ¶
func LevelFilter() *logutils.LevelFilter
LevelFilter returns a LevelFilter that is configured with the log levels that we use.
func NewLogWriter ¶ added in v0.3.0
func NewLogWriter(buf int) *logWriter
NewLogWriter creates a logWriter with the given buffer capacity
func ValidateLevelFilter ¶
func ValidateLevelFilter(minLevel logutils.LogLevel, filter *logutils.LevelFilter) bool
ValidateLevelFilter verifies that the log levels within the filter are valid.
Types ¶
type Agent ¶
type Agent struct {
// contains filtered or unexported fields
}
Agent starts and manages a Serf instance, adding some niceties on top of Serf such as storing logs that you can later retrieve, and invoking EventHandlers when events occur.
func (*Agent) DeregisterEventHandler ¶ added in v0.3.0
func (a *Agent) DeregisterEventHandler(eh EventHandler)
DeregisterEventHandler removes an EventHandler and prevents more invocations
func (*Agent) ForceLeave ¶ added in v0.3.0
ForceLeave is used to eject a failed node from the cluster
func (*Agent) Leave ¶ added in v0.3.0
Leave prepares for a graceful shutdown of the agent and its processes
func (*Agent) Query ¶ added in v0.5.0
func (a *Agent) Query(name string, payload []byte, params *serf.QueryParam) (*serf.QueryResponse, error)
Query sends a Query on Serf, see Serf.Query.
func (*Agent) RegisterEventHandler ¶ added in v0.3.0
func (a *Agent) RegisterEventHandler(eh EventHandler)
RegisterEventHandler adds an event handler to recieve event notifications
func (*Agent) SerfConfig ¶
Returns the Serf config of the running Agent.
func (*Agent) Shutdown ¶
Shutdown closes this agent and all of its processes. Should be preceeded by a Leave for a graceful shutdown.
func (*Agent) ShutdownCh ¶ added in v0.3.0
func (a *Agent) ShutdownCh() <-chan struct{}
ShutdownCh returns a channel that can be selected to wait for the agent to perform a shutdown.
type AgentIPC ¶ added in v0.3.0
type AgentMDNS ¶ added in v0.4.0
type AgentMDNS struct {
// contains filtered or unexported fields
}
AgentMDNS is used to advertise ourself using mDNS and to attempt to join peers periodically using mDNS queries.
type AppendSliceValue ¶
type AppendSliceValue []string
AppendSliceValue implements the flag.Value interface and allows multiple calls to the same variable to append a list.
func (*AppendSliceValue) Set ¶
func (s *AppendSliceValue) Set(value string) error
func (*AppendSliceValue) String ¶
func (s *AppendSliceValue) String() string
type Command ¶
type Command struct { Ui cli.Ui ShutdownCh <-chan struct{} // contains filtered or unexported fields }
Command is a Command implementation that runs a Serf agent. The command will not end unless a shutdown message is sent on the ShutdownCh. If two messages are sent on the ShutdownCh it will forcibly exit.
type Config ¶
type Config struct { // All the configurations in this section are identical to their // Serf counterparts. See the documentation for Serf.Config for // more info. NodeName string `mapstructure:"node_name"` Role string `mapstructure:"role"` // Tags are used to attach key/value metadata to a node. They have // replaced 'Role' as a more flexible meta data mechanism. For compatibility, // the 'role' key is special, and is used for backwards compatibility. Tags map[string]string `mapstructure:"tags"` // BindAddr is the address that the Serf agent's communication ports // will bind to. Serf will use this address to bind to for both TCP // and UDP connections. If no port is present in the address, the default // port will be used. BindAddr string `mapstructure:"bind"` // AdvertiseAddr is the address that the Serf agent will advertise to // other members of the cluster. Can be used for basic NAT traversal // where both the internal ip:port and external ip:port are known. AdvertiseAddr string `mapstructure:"advertise"` // EncryptKey is the secret key to use for encrypting communication // traffic for Serf. The secret key must be exactly 16-bytes, base64 // encoded. The easiest way to do this on Unix machines is this command: // "head -c16 /dev/urandom | base64". If this is not specified, the // traffic will not be encrypted. EncryptKey string `mapstructure:"encrypt_key"` // LogLevel is the level of the logs to output. // This can be updated during a reload. LogLevel string `mapstructure:"log_level"` // RPCAddr is the address and port to listen on for the agent's RPC // interface. RPCAddr string `mapstructure:"rpc_addr"` // RPCAuthKey is a key that can be set to optionally require that // RPC's provide an authentication key. This is meant to be // a very simple authentication control RPCAuthKey string `mapstructure:"rpc_auth"` // Protocol is the Serf protocol version to use. Protocol int `mapstructure:"protocol"` // ReplayOnJoin tells Serf to replay past user events // when joining based on a `StartJoin`. ReplayOnJoin bool `mapstructure:"replay_on_join"` // StartJoin is a list of addresses to attempt to join when the // agent starts. If Serf is unable to communicate with any of these // addresses, then the agent will error and exit. StartJoin []string `mapstructure:"start_join"` // EventHandlers is a list of event handlers that will be invoked. // These can be updated during a reload. EventHandlers []string `mapstructure:"event_handlers"` // Profile is used to select a timing profile for Serf. The supported choices // are "wan", "lan", and "local". The default is "lan" Profile string `mapstructure:"profile"` // SnapshotPath is used to allow Serf to snapshot important transactional // state to make a more graceful recovery possible. This enables auto // re-joining a cluster on failure and avoids old message replay. SnapshotPath string `mapstructure:"snapshot_path"` // LeaveOnTerm controls if Serf does a graceful leave when receiving // the TERM signal. Defaults false. This can be changed on reload. LeaveOnTerm bool `mapstructure:"leave_on_terminate"` // SkipLeaveOnInt controls if Serf skips a graceful leave when receiving // the INT signal. Defaults false. This can be changed on reload. SkipLeaveOnInt bool `mapstructure:"skip_leave_on_interrupt"` // Discover is used to setup an mDNS Discovery name. When this is set, the // agent will setup an mDNS responder and periodically run an mDNS query // to look for peers. For peers on a network that supports multicast, this // allows Serf agents to join each other with zero configuration. Discover string `mapstructure:"discover"` // Interface is used to provide a binding interface to use. It can be // used instead of providing a bind address, as Serf will discover the // address of the provided interface. It is also used to set the multicast // device used with `-discover`. Interface string `mapstructure:"interface"` // ReconnectIntervalRaw is the string reconnect interval time. This interval // controls how often we attempt to connect to a failed node. ReconnectIntervalRaw string `mapstructure:"reconnect_interval"` ReconnectInterval time.Duration `mapstructure:"-"` // ReconnectTimeoutRaw is the string reconnect timeout. This timeout controls // for how long we attempt to connect to a failed node before removing // it from the cluster. ReconnectTimeoutRaw string `mapstructure:"reconnect_timeout"` ReconnectTimeout time.Duration `mapstructure:"-"` // TombstoneTimeoutRaw is the string tombstone timeout. This timeout controls // for how long we remember a left node before removing it from the cluster. TombstoneTimeoutRaw string `mapstructure:"tombstone_timeout"` TombstoneTimeout time.Duration `mapstructure:"-"` // By default Serf will attempt to resolve name conflicts. This is done by // determining which node the majority believe to be the proper node, and // by having the minority node shutdown. If you want to disable this behavior, // then this flag can be set to true. DisableNameResolution bool `mapstructure:"disable_name_resolution"` }
Config is the configuration that can be set for an Agent. Some of these configurations are exposed as command-line flags to `serf agent`, whereas many of the more advanced configurations can only be set by creating a configuration file.
func DecodeConfig ¶ added in v0.2.0
DecodeConfig reads the configuration from the given reader in JSON format and decodes it into a proper Config structure.
func DefaultConfig ¶ added in v0.2.0
func DefaultConfig() *Config
DefaultConfig contains the defaults for configurations.
func MergeConfig ¶ added in v0.2.0
MergeConfig merges two configurations together to make a single new configuration.
func ReadConfigPaths ¶ added in v0.2.0
ReadConfigPaths reads the paths in the given order to load configurations. The paths can be to files or directories. If the path is a directory, we read one directory deep and read any files ending in ".json" as configuration files.
func (*Config) AddrParts ¶ added in v0.4.0
BindAddrParts returns the parts of the BindAddr that should be used to configure Serf.
func (*Config) EncryptBytes ¶ added in v0.2.0
EncryptBytes returns the encryption key configured.
func (*Config) EventScripts ¶
func (c *Config) EventScripts() []EventScript
EventScripts returns the list of EventScripts associated with this configuration and specified by the "event_handlers" configuration.
type EventFilter ¶ added in v0.3.0
EventFilter is used to filter which events are processed
func ParseEventFilter ¶ added in v0.3.0
func ParseEventFilter(v string) []EventFilter
ParseEventFilter a string with the event type filters and parses it into a series of EventFilters if it can.
func (*EventFilter) Invoke ¶ added in v0.3.0
func (s *EventFilter) Invoke(e serf.Event) bool
Invoke tests whether or not this event script should be invoked for the given Serf event.
func (*EventFilter) Valid ¶ added in v0.3.0
func (s *EventFilter) Valid() bool
Valid checks if this is a valid agent event script.
type EventHandler ¶
EventHandler is a handler that does things when events happen.
type EventScript ¶
type EventScript struct { EventFilter Script string }
EventScript is a single event script that will be executed in the case of an event, and is configured from the command-line or from a configuration file.
func ParseEventScript ¶
func ParseEventScript(v string) []EventScript
ParseEventScript takes a string in the format of "type=script" and parses it into an EventScript struct, if it can.
func (*EventScript) String ¶
func (s *EventScript) String() string
type GatedWriter ¶
GatedWriter is an io.Writer implementation that buffers all of its data into an internal buffer until it is told to let data through.
func (*GatedWriter) Flush ¶
func (w *GatedWriter) Flush()
Flush tells the GatedWriter to flush any buffered data and to stop buffering.
type IPCClient ¶ added in v0.3.0
type IPCClient struct {
// contains filtered or unexported fields
}
func (*IPCClient) RegisterQuery ¶ added in v0.5.0
RegisterQuery is used to register a pending query that may get a response. The ID of the query is returned
type LogHandler ¶ added in v0.3.0
type LogHandler interface {
HandleLog(string)
}
LogHandler interface is used for clients that want to subscribe to logs, for example to stream them over an IPC mechanism
type MockEventHandler ¶
MockEventHandler is an EventHandler implementation that can be used for tests.
func (*MockEventHandler) HandleEvent ¶
func (h *MockEventHandler) HandleEvent(e serf.Event)
type MockQueryHandler ¶ added in v0.5.0
MockQueryHandler is an EventHandler implementation used for tests, it always responds to a query with a given response
func (*MockQueryHandler) HandleEvent ¶ added in v0.5.0
func (h *MockQueryHandler) HandleEvent(e serf.Event)
type ScriptEventHandler ¶
type ScriptEventHandler struct { SelfFunc func() serf.Member Scripts []EventScript Logger *log.Logger // contains filtered or unexported fields }
ScriptEventHandler invokes scripts for the events that it receives.
func (*ScriptEventHandler) HandleEvent ¶
func (h *ScriptEventHandler) HandleEvent(e serf.Event)
func (*ScriptEventHandler) UpdateScripts ¶ added in v0.3.0
func (h *ScriptEventHandler) UpdateScripts(scripts []EventScript)
UpdateScripts is used to safely update the scripts we invoke in a thread safe manner