package client import ( "net" "time" "basic.com/valib/serf.git/coordinate" "basic.com/valib/serf.git/serf" ) const ( maxIPCVersion = 1 ) const ( handshakeCommand = "handshake" eventCommand = "event" forceLeaveCommand = "force-leave" joinCommand = "join" membersCommand = "members" membersFilteredCommand = "members-filtered" streamCommand = "stream" stopCommand = "stop" monitorCommand = "monitor" leaveCommand = "leave" installKeyCommand = "install-key" useKeyCommand = "use-key" removeKeyCommand = "remove-key" listKeysCommand = "list-keys" tagsCommand = "tags" queryCommand = "query" respondCommand = "respond" authCommand = "auth" statsCommand = "stats" getCoordinateCommand = "get-coordinate" ) const ( unsupportedCommand = "Unsupported command" unsupportedIPCVersion = "Unsupported IPC version" duplicateHandshake = "Handshake already performed" handshakeRequired = "Handshake required" monitorExists = "Monitor already exists" invalidFilter = "Invalid event filter" streamExists = "Stream with given sequence exists" invalidQueryID = "No pending queries matching ID" authRequired = "Authentication required" invalidAuthToken = "Invalid authentication token" ) const ( queryRecordAck = "ack" queryRecordResponse = "response" queryRecordDone = "done" ) // Request header is sent before each request type requestHeader struct { Command string Seq uint64 } // Response header is sent before each response type responseHeader struct { Seq uint64 Error string } type handshakeRequest struct { Version int32 } type authRequest struct { AuthKey string } type coordinateRequest struct { Node string } type coordinateResponse struct { Coord coordinate.Coordinate Ok bool } type eventRequest struct { Name string Payload []byte Coalesce bool } type forceLeaveRequest struct { Node string Prune bool } type joinRequest struct { Existing []string Replay bool } type joinResponse struct { Num int32 } type membersFilteredRequest struct { Tags map[string]string Status string Name string } type membersResponse struct { Members []Member } type keyRequest struct { Key string } type keyResponse struct { Messages map[string]string Keys map[string]int NumNodes int NumErr int NumResp int } type monitorRequest struct { LogLevel string } type streamRequest struct { Type string } type stopRequest struct { Stop uint64 } type tagsRequest struct { Tags map[string]string DeleteTags []string } type queryRequest struct { FilterNodes []string FilterTags map[string]string RequestAck bool RelayFactor uint8 Timeout time.Duration Name string Payload []byte } type respondRequest struct { ID uint64 Payload []byte } type queryRecord struct { Type string From string Payload []byte } // NodeResponse is used to return the response of a query type NodeResponse struct { From string Payload []byte } type logRecord struct { Log string } type userEventRecord struct { Event string LTime serf.LamportTime Name string Payload []byte Coalesce bool } // Member is used to represent a single member of the // Serf cluster type Member struct { Name string // Node name Addr net.IP // Address of the Serf node Port uint16 // Gossip port used by Serf Tags map[string]string Status string ProtocolMin uint8 // Minimum supported Memberlist protocol ProtocolMax uint8 // Maximum supported Memberlist protocol ProtocolCur uint8 // Currently set Memberlist protocol DelegateMin uint8 // Minimum supported Serf protocol DelegateMax uint8 // Maximum supported Serf protocol DelegateCur uint8 // Currently set Serf protocol } type memberEventRecord struct { Event string Members []Member }