command: convert members so we get a descriptive status

This commit is contained in:
Ryan Uber
2015-09-11 15:19:26 -07:00
parent f76e26906d
commit 39592e63b3
3 changed files with 44 additions and 10 deletions

View File

@@ -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"`
}

View File

@@ -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)
}

View File

@@ -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,