mirror of
https://github.com/kemko/nomad.git
synced 2026-01-07 10:55:42 +03:00
command: convert members so we get a descriptive status
This commit is contained in:
@@ -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"`
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user