From 39592e63b35dbb428d2e0dd07d581aa5adc02a00 Mon Sep 17 00:00:00 2001 From: Ryan Uber Date: Fri, 11 Sep 2015 15:19:26 -0700 Subject: [PATCH] command: convert members so we get a descriptive status --- command/agent/agent_endpoint.go | 48 ++++++++++++++++++++++++---- command/agent/agent_endpoint_test.go | 4 +-- command/agent_members.go | 2 +- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/command/agent/agent_endpoint.go b/command/agent/agent_endpoint.go index 3b5798b72..73e73e799 100644 --- a/command/agent/agent_endpoint.go +++ b/command/agent/agent_endpoint.go @@ -1,27 +1,57 @@ package agent import ( + "net" "net/http" "github.com/hashicorp/serf/serf" ) +type Member struct { + Name string + Addr net.IP + Port uint16 + Tags map[string]string + Status string + ProtocolMin uint8 + ProtocolMax uint8 + ProtocolCur uint8 + DelegateMin uint8 + DelegateMax uint8 + DelegateCur uint8 +} + +func nomadMember(m serf.Member) Member { + return Member{ + Name: m.Name, + Addr: m.Addr, + Port: m.Port, + Tags: m.Tags, + Status: m.Status.String(), + ProtocolMin: m.ProtocolMin, + ProtocolMax: m.ProtocolMax, + ProtocolCur: m.ProtocolCur, + DelegateMin: m.DelegateMin, + DelegateMax: m.DelegateMax, + DelegateCur: m.DelegateCur, + } +} + func (s *HTTPServer) AgentSelfRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) { if req.Method != "GET" { return nil, CodedError(405, ErrInvalidMethod) } // Get the member as a server - var member *serf.Member + var member serf.Member srv := s.agent.Server() if srv != nil { - mem := srv.LocalMember() - member = &mem + member = srv.LocalMember() } self := agentSelf{ Config: s.agent.config, - Member: member, + Member: nomadMember(member), Stats: s.agent.Stats(), } return self, nil @@ -60,7 +90,13 @@ func (s *HTTPServer) AgentMembersRequest(resp http.ResponseWriter, req *http.Req if srv == nil { return nil, CodedError(501, ErrInvalidMethod) } - return srv.Members(), nil + + serfMembers := srv.Members() + members := make([]Member, len(serfMembers)) + for i, mem := range serfMembers { + members[i] = nomadMember(mem) + } + return members, nil } func (s *HTTPServer) AgentForceLeaveRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) { @@ -85,7 +121,7 @@ func (s *HTTPServer) AgentForceLeaveRequest(resp http.ResponseWriter, req *http. type agentSelf struct { Config *Config `json:"config"` - Member *serf.Member `json:"member,omitempty"` + Member Member `json:"member,omitempty"` Stats map[string]map[string]string `json:"stats"` } diff --git a/command/agent/agent_endpoint_test.go b/command/agent/agent_endpoint_test.go index 2f372e2e4..f498f3c6d 100644 --- a/command/agent/agent_endpoint_test.go +++ b/command/agent/agent_endpoint_test.go @@ -5,8 +5,6 @@ import ( "net/http" "net/http/httptest" "testing" - - "github.com/hashicorp/serf/serf" ) func TestHTTP_AgentSelf(t *testing.T) { @@ -85,7 +83,7 @@ func TestHTTP_AgentMembers(t *testing.T) { } // Check the job - members := obj.([]serf.Member) + members := obj.([]Member) if len(members) != 1 { t.Fatalf("bad: %#v", members) } diff --git a/command/agent_members.go b/command/agent_members.go index 56758d89d..024ca5a28 100644 --- a/command/agent_members.go +++ b/command/agent_members.go @@ -93,7 +93,7 @@ func standardOutput(mem []*api.AgentMember) []string { members := make([]string, len(mem)+1) members[0] = "Name|Addr|Port|Status|Proto|Build|DC|Region" for i, member := range mem { - line := fmt.Sprintf("%s|%s|%d|%d|%d|%s|%s|%s", + line := fmt.Sprintf("%s|%s|%d|%s|%d|%s|%s|%s", member.Name, member.Addr, member.Port,