github.com/maier/nomad@v0.4.1-0.20161110003312-a9e3d0b8549d/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 := 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 done, err := s.srv.forward("Status.Peers", args, args, reply); done {
    53  		return err
    54  	}
    55  
    56  	peers, err := s.srv.raftPeers.Peers()
    57  	if err != nil {
    58  		return err
    59  	}
    60  
    61  	*reply = peers
    62  	return nil
    63  }
    64  
    65  // Members return the list of servers in a cluster that a particular server is
    66  // aware of
    67  func (s *Status) Members(args *structs.GenericRequest, reply *structs.ServerMembersResponse) error {
    68  	serfMembers := s.srv.Members()
    69  	members := make([]*structs.ServerMember, len(serfMembers))
    70  	for i, mem := range serfMembers {
    71  		members[i] = &structs.ServerMember{
    72  			Name:        mem.Name,
    73  			Addr:        mem.Addr,
    74  			Port:        mem.Port,
    75  			Tags:        mem.Tags,
    76  			Status:      mem.Status.String(),
    77  			ProtocolMin: mem.ProtocolMin,
    78  			ProtocolMax: mem.ProtocolMax,
    79  			ProtocolCur: mem.ProtocolCur,
    80  			DelegateMin: mem.DelegateMin,
    81  			DelegateMax: mem.DelegateMax,
    82  			DelegateCur: mem.DelegateCur,
    83  		}
    84  	}
    85  	*reply = structs.ServerMembersResponse{
    86  		ServerName:   s.srv.config.NodeName,
    87  		ServerRegion: s.srv.config.Region,
    88  		ServerDC:     s.srv.config.Datacenter,
    89  		Members:      members,
    90  	}
    91  	return nil
    92  }