// sendUserEvent is used to send a single user event func (es *eventStream) sendUserEvent(ue serf.UserEvent) error { header := responseHeader{ Seq: es.seq, Error: "", } rec := userEventRecord{ Event: ue.EventType().String(), LTime: ue.LTime, Name: ue.Name, Payload: ue.Payload, Coalesce: ue.Coalesce, } return es.client.Send(&header, &rec) }
// localEvent is called when we receive an event on the local Serf func (c *Client) localEvent(event serf.UserEvent) { // Handle only consul events if !strings.HasPrefix(event.Name, "consul:") { return } switch name := event.Name; { case name == newLeaderEvent: c.logger.Printf("[INFO] consul: New leader elected: %s", event.Payload) // Trigger the callback if c.config.ServerUp != nil { c.config.ServerUp() } case isUserEvent(name): event.Name = rawUserEventName(name) c.logger.Printf("[DEBUG] consul: user event: %s", event.Name) // Trigger the callback if c.config.UserEventHandler != nil { c.config.UserEventHandler(event) } default: c.logger.Printf("[WARN] consul: Unhandled local event: %v", event) } }
// handleUserEvent is called when a user event is received from both local and remote nodes. func (s *SerfEventHandler) handleUserEvent(event serf.UserEvent) { switch name := event.Name; { // Handles leader election events case s.IsLeaderEvent(name): s.Logger.Info("serfer: New leader elected: %s", event.Payload) // Process leader election event if s.LeaderElectionHandler != nil { s.LeaderElectionHandler.HandleLeaderElection(event) } // Handle service events case s.isServiceEvent(name): event.Name = s.getRawEventName(name) s.Logger.Debug("serfer: user event: %s", event.Name) // Process user event if s.UserEvent != nil { s.UserEvent.HandleUserEvent(event) } // Handle unknown user events default: s.Logger.Warn("serfer: unknown event: %v", event) // Process unknown event if s.UnknownEventHandler != nil { s.UnknownEventHandler.HandleUnknownEvent(event) } } }