github.com/hhrutter/nomad@v0.6.0-rc2.0.20170723054333-80c4b03f0705/nomad/status_endpoint.go (about) 1 package nomad 2 3 import "github.com/hashicorp/nomad/nomad/structs" 4 5 // Status endpoint is used to check on server status 6 type Status struct { 7 srv *Server 8 } 9 10 // Version is used to allow clients to determine the capabilities 11 // of the server 12 func (s *Status) Version(args *structs.GenericRequest, reply *structs.VersionResponse) error { 13 if done, err := s.srv.forward("Status.Version", args, args, reply); done { 14 return err 15 } 16 17 conf := s.srv.config 18 reply.Build = conf.Build 19 reply.Versions = map[string]int{ 20 structs.ProtocolVersion: int(conf.ProtocolVersion), 21 structs.APIMajorVersion: structs.ApiMajorVersion, 22 structs.APIMinorVersion: structs.ApiMinorVersion, 23 } 24 return nil 25 } 26 27 // Ping is used to just check for connectivity 28 func (s *Status) Ping(args struct{}, reply *struct{}) error { 29 return nil 30 } 31 32 // Leader is used to get the address of the leader 33 func (s *Status) Leader(args *structs.GenericRequest, reply *string) error { 34 if args.Region == "" { 35 args.Region = s.srv.config.Region 36 } 37 if done, err := s.srv.forward("Status.Leader", args, args, reply); done { 38 return err 39 } 40 41 leader := string(s.srv.raft.Leader()) 42 if leader != "" { 43 *reply = leader 44 } else { 45 *reply = "" 46 } 47 return nil 48 } 49 50 // Peers is used to get all the Raft peers 51 func (s *Status) Peers(args *structs.GenericRequest, reply *[]string) error { 52 if args.Region == "" { 53 args.Region = s.srv.config.Region 54 } 55 if done, err := s.srv.forward("Status.Peers", args, args, reply); done { 56 return err 57 } 58 59 future := s.srv.raft.GetConfiguration() 60 if err := future.Error(); err != nil { 61 return err 62 } 63 64 for _, server := range future.Configuration().Servers { 65 *reply = append(*reply, string(server.Address)) 66 } 67 return nil 68 } 69 70 // Members return the list of servers in a cluster that a particular server is 71 // aware of 72 func (s *Status) Members(args *structs.GenericRequest, reply *structs.ServerMembersResponse) error { 73 serfMembers := s.srv.Members() 74 members := make([]*structs.ServerMember, len(serfMembers)) 75 for i, mem := range serfMembers { 76 members[i] = &structs.ServerMember{ 77 Name: mem.Name, 78 Addr: mem.Addr, 79 Port: mem.Port, 80 Tags: mem.Tags, 81 Status: mem.Status.String(), 82 ProtocolMin: mem.ProtocolMin, 83 ProtocolMax: mem.ProtocolMax, 84 ProtocolCur: mem.ProtocolCur, 85 DelegateMin: mem.DelegateMin, 86 DelegateMax: mem.DelegateMax, 87 DelegateCur: mem.DelegateCur, 88 } 89 } 90 *reply = structs.ServerMembersResponse{ 91 ServerName: s.srv.config.NodeName, 92 ServerRegion: s.srv.config.Region, 93 ServerDC: s.srv.config.Datacenter, 94 Members: members, 95 } 96 return nil 97 }