Documentation ¶
Index ¶
- Constants
- Variables
- func Debugf(format string, v ...interface{})
- func Errorf(format string, v ...interface{})
- func Fatalf(format string, v ...interface{})
- func Noticef(format string, v ...interface{})
- func PrintAndDie(msg string)
- func PrintServerAndExit()
- func RemoveSelfReference(clusterPort int, routes []*url.URL) ([]*url.URL, error)
- func Tracef(format string, v ...interface{})
- func Usage()
- type Auth
- type ClientAuth
- type ConnInfo
- type Connz
- type Info
- type Logger
- type Options
- type RouteInfo
- type Routez
- type Server
- func (s *Server) AcceptLoop()
- func (s *Server) Addr() net.Addr
- func (s *Server) HandleConnz(w http.ResponseWriter, r *http.Request)
- func (s *Server) HandleRoutez(w http.ResponseWriter, r *http.Request)
- func (s *Server) HandleSubsz(w http.ResponseWriter, r *http.Request)
- func (s *Server) HandleVarz(w http.ResponseWriter, r *http.Request)
- func (s *Server) NumClients() int
- func (s *Server) NumRemotes() int
- func (s *Server) NumRoutes() int
- func (s *Server) NumSubscriptions() uint32
- func (s *Server) SetAuthMethod(authMethod Auth)
- func (s *Server) SetLogger(logger Logger, debugFlag, traceFlag bool)
- func (s *Server) Shutdown()
- func (s *Server) Start()
- func (s *Server) StartHTTPMonitoring()
- func (s *Server) StartProfiler()
- func (s *Server) StartRouting()
- type Subsz
- type Varz
Constants ¶
const ( // CLIENT is an end user. CLIENT = iota // ROUTER is another router in the cluster. ROUTER )
Type of client
const ( // VERSION is the current version for the server. VERSION = "0.6.0" // DEFAULT_PORT is the deault port for client connections. DEFAULT_PORT = 4222 // RANDOM_PORT is the value for port that, when supplied, will cause the // server to listen on a randomly-chosen available port. The resolved port // is available via the Addr() method. RANDOM_PORT = -1 // DEFAULT_HOST defaults to all interfaces. DEFAULT_HOST = "0.0.0.0" // MAX_CONTROL_LINE_SIZE is the maximum allowed protocol control line size. // 1k should be plenty since payloads sans connect string are separate MAX_CONTROL_LINE_SIZE = 1024 // MAX_PAYLOAD_SIZE is the maximum allowed payload size. Should be using // something different if > 1MB payloads are needed. MAX_PAYLOAD_SIZE = (1024 * 1024) // MAX_PENDING_SIZE is the maximum outbound size (in bytes) per client. MAX_PENDING_SIZE = (10 * 1024 * 1024) // DEFAULT_MAX_CONNECTIONS is the default maximum connections allowed. DEFAULT_MAX_CONNECTIONS = (64 * 1024) // SSL_TIMEOUT is the TLS/SSL wait time. SSL_TIMEOUT = 500 * time.Millisecond // AUTH_TIMEOUT is the authorization wait time. AUTH_TIMEOUT = 2 * SSL_TIMEOUT // DEFAULT_PING_INTERVAL is how often pings are sent to clients and routes. DEFAULT_PING_INTERVAL = 2 * time.Minute // DEFAULT_PING_MAX_OUT is maximum allowed pings outstanding before disconnect. DEFAULT_PING_MAX_OUT = 2 // CRLF string CR_LF = "\r\n" // LEN_CR_LF hold onto the computed size. LEN_CR_LF = len(CR_LF) // DEFAULT_FLUSH_DEADLINE is the write/flush deadlines. DEFAULT_FLUSH_DEADLINE = 2 * time.Second // DEFAULT_HTTP_PORT is the default monitoring port. DEFAULT_HTTP_PORT = 8333 // ACCEPT_MIN_SLEEP is the minimum acceptable sleep times on temporary errors. ACCEPT_MIN_SLEEP = 10 * time.Millisecond // ACCEPT_MAX_SLEEP is the maximum acceptable sleep times on temporary errors ACCEPT_MAX_SLEEP = 1 * time.Second // DEFAULT_ROUTE_CONNECT Route solicitation intervals. DEFAULT_ROUTE_CONNECT = 1 * time.Second // DEFAULT_ROUTE_RECONNECT Route reconnect intervals. DEFAULT_ROUTE_RECONNECT = 1 * time.Second // DEFAULT_ROUTE_DIAL Route dial timeout. DEFAULT_ROUTE_DIAL = 1 * time.Second // PROTO_SNIPPET_SIZE is the default size of proto to print on parse errors. PROTO_SNIPPET_SIZE = 32 // MAX_MSG_ARGS Maximum possible number of arguments from MSG proto. MAX_MSG_ARGS = 4 // MAX_PUB_ARGS Maximum possible number of arguments from PUB proto. MAX_PUB_ARGS = 3 )
const ( OP_START = iota OP_PLUS OP_PLUS_O OP_PLUS_OK OP_MINUS OP_MINUS_E OP_MINUS_ER OP_MINUS_ERR OP_MINUS_ERR_SPC MINUS_ERR_ARG OP_C OP_CO OP_CON OP_CONN OP_CONNE OP_CONNEC OP_CONNECT CONNECT_ARG OP_P OP_PU OP_PUB OP_PUB_SPC PUB_ARG OP_PI OP_PIN OP_PING OP_PO OP_PON OP_PONG MSG_PAYLOAD MSG_END OP_S OP_SU OP_SUB OP_SUB_SPC SUB_ARG OP_U OP_UN OP_UNS OP_UNSU OP_UNSUB UNSUB_ARG OP_M OP_MS OP_MSG OP_MSG_SPC MSG_ARG OP_I OP_IN OP_INF OP_INFO INFO_ARG )
const ( RSID = "RSID" QRSID = "QRSID" RSID_CID_INDEX = 1 RSID_SID_INDEX = 2 EXPECTED_MATCHES = 3 )
const DefaultConnListSize = 1024
Variables ¶
var ( // ErrConnectionClosed represents error condition on a closed connection. ErrConnectionClosed = errors.New("Connection closed") // ErrAuthorization represents error condition on failed authorization. ErrAuthorization = errors.New("Authorization Error") )
Functions ¶
func PrintAndDie ¶
func PrintAndDie(msg string)
PrintAndDie is exported for access in other packages.
func PrintServerAndExit ¶
func PrintServerAndExit()
PrintServerAndExit will print our version and exit.
func RemoveSelfReference ¶ added in v0.5.6
Types ¶
type Auth ¶ added in v0.6.0
type Auth interface {
Check(c ClientAuth) bool
}
type ClientAuth ¶ added in v0.6.0
type ClientAuth interface {
GetOpts() *clientOpts
}
type ConnInfo ¶
type ConnInfo struct { Cid uint64 `json:"cid"` IP string `json:"ip"` Port int `json:"port"` Pending int `json:"pending_size"` InMsgs int64 `json:"in_msgs"` OutMsgs int64 `json:"out_msgs"` InBytes int64 `json:"in_bytes"` OutBytes int64 `json:"out_bytes"` NumSubs uint32 `json:"subscriptions"` Lang string `json:"lang,omitempty"` Version string `json:"version,omitempty"` Subs []string `json:"subscriptions_list,omitempty"` }
ConnInfo has detailed information on a per connection basis.
type Connz ¶
type Connz struct { NumConns int `json:"num_connections"` Offset int `json:"offset"` Limit int `json:"limit"` Conns []*ConnInfo `json:"connections"` }
Connz represents detailed information on current client connections.
type Info ¶
type Info struct { ID string `json:"server_id"` Version string `json:"version"` Host string `json:"host"` Port int `json:"port"` AuthRequired bool `json:"auth_required"` SslRequired bool `json:"ssl_required"` MaxPayload int `json:"max_payload"` }
Info is the information sent to clients to help them understand information about this server.
type Options ¶
type Options struct { Host string `json:"addr"` Port int `json:"port"` Trace bool `json:"-"` Debug bool `json:"-"` NoLog bool `json:"-"` NoSigs bool `json:"-"` Logtime bool `json:"-"` MaxConn int `json:"max_connections"` Username string `json:"user,omitempty"` Password string `json:"-"` Authorization string `json:"-"` PingInterval time.Duration `json:"ping_interval"` MaxPingsOut int `json:"ping_max"` HTTPPort int `json:"http_port"` SslTimeout float64 `json:"ssl_timeout"` AuthTimeout float64 `json:"auth_timeout"` MaxControlLine int `json:"max_control_line"` MaxPayload int `json:"max_payload"` ClusterHost string `json:"addr"` ClusterPort int `json:"port"` ClusterUsername string `json:"-"` ClusterPassword string `json:"-"` ClusterAuthTimeout float64 `json:"auth_timeout"` Routes []*url.URL `json:"-"` ProfPort int `json:"-"` PidFile string `json:"-"` LogFile string `json:"-"` Syslog bool `json:"-"` RemoteSyslog string `json:"-"` }
Options block for gnatsd server.
func MergeOptions ¶
MergeOptions will merge two options giving preference to the flagOpts if the item is present.
func ProcessConfigFile ¶
ProcessConfigFile processes a configuration file. FIXME(dlc): Hacky
type RouteInfo ¶ added in v0.6.0
type RouteInfo struct { Rid uint64 `json:"rid"` RemoteId string `json:"remote_id"` DidSolicit bool `json:"did_solicit"` IP string `json:"ip"` Port int `json:"port"` Pending int `json:"pending_size"` InMsgs int64 `json:"in_msgs"` OutMsgs int64 `json:"out_msgs"` InBytes int64 `json:"in_bytes"` OutBytes int64 `json:"out_bytes"` NumSubs uint32 `json:"subscriptions"` Subs []string `json:"subscriptions_list,omitempty"` }
RouteInfo has detailed information on a per connection basis.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is our main struct.
func (*Server) AcceptLoop ¶
func (s *Server) AcceptLoop()
AcceptLoop is exported for easier testing.
func (*Server) Addr ¶ added in v0.5.4
Addr will return the net.Addr object for the current listener.
func (*Server) HandleConnz ¶
func (s *Server) HandleConnz(w http.ResponseWriter, r *http.Request)
HandleConnz process HTTP requests for connection information.
func (*Server) HandleRoutez ¶ added in v0.6.0
func (s *Server) HandleRoutez(w http.ResponseWriter, r *http.Request)
HandleRoutez process HTTP requests for route information.
func (*Server) HandleSubsz ¶ added in v0.6.0
func (s *Server) HandleSubsz(w http.ResponseWriter, r *http.Request)
HandleStats process HTTP requests for subjects stats.
func (*Server) HandleVarz ¶
func (s *Server) HandleVarz(w http.ResponseWriter, r *http.Request)
HandleVarz will process HTTP requests for server information.
func (*Server) NumClients ¶
NumClients will report the number of registered clients.
func (*Server) NumRemotes ¶
NumRemotes will report number of registered remotes.
func (*Server) NumSubscriptions ¶
NumSubscriptions will report how many subscriptions are active.
func (*Server) SetAuthMethod ¶ added in v0.6.0
Sets the authentication method
func (*Server) Shutdown ¶
func (s *Server) Shutdown()
Shutdown will shutdown the server instance by kicking out the AcceptLoop and closing all associated clients.
func (*Server) Start ¶
func (s *Server) Start()
Start up the server, this will block. Start via a Go routine if needed.
func (*Server) StartHTTPMonitoring ¶
func (s *Server) StartHTTPMonitoring()
StartHTTPMonitoring will enable the HTTP monitoring port.
func (*Server) StartProfiler ¶
func (s *Server) StartProfiler()
StartProfiler is called to enable dynamic profiling.
func (*Server) StartRouting ¶
func (s *Server) StartRouting()
StartRouting will start the accept loop on the cluster host:port and will actively try to connect to listed routes.
type Varz ¶
type Varz struct { Start time.Time `json:"start"` Options *Options `json:"options"` Mem int64 `json:"mem"` Cores int `json:"cores"` CPU float64 `json:"cpu"` Connections int `json:"connections"` Routes int `json:"routes"` Remotes int `json:"remotes"` InMsgs int64 `json:"in_msgs"` OutMsgs int64 `json:"out_msgs"` InBytes int64 `json:"in_bytes"` OutBytes int64 `json:"out_bytes"` Uptime string `json:"uptime"` }
Varz will output server information on the monitoring port at /varz.