func startEventMonitor(sc *serfclient.RPCClient, errch chan<- error) { ch := make(chan map[string]interface{}, 10) sh, err := sc.Stream("*", ch) if err != nil { errch <- err return } errch <- nil defer sc.Stop(sh) // watch the events and queries for e := range ch { logger.Debugf("Got an event: %v", e) eName, _ := e["Name"] switch eName { case "node_status": jsonPayload := make(map[string]string) err = json.Unmarshal(e["Payload"].([]byte), &jsonPayload) if err != nil { logger.Errorf(err.Error()) continue } n, _ := node.Get(jsonPayload["node"]) if n == nil { logger.Errorf("No node %s", jsonPayload["node"]) continue } err = n.UpdateStatus(jsonPayload["status"]) if err != nil { logger.Errorf(err.Error()) continue } r := map[string]string{"response": "ok"} response, _ := json.Marshal(r) var id uint64 switch t := e["ID"].(type) { case int64: id = uint64(t) case uint64: id = t default: logger.Errorf("node_status ID %v type %T not int64 or uint64", e["ID"], e["ID"]) continue } sc.Respond(id, response) } } return }
func getSerfMembers(client *serf_client.RPCClient, filter serfFilter) ([]serf_client.Member, error) { return client.MembersFiltered(filter.Tags, filter.Status, filter.Name) }
func closeSerfConnection(client *serf_client.RPCClient) { if client != nil { client.Close() } }