Adding more HTTP endpoints

This commit is contained in:
Armon Dadgar 2014-01-03 17:15:51 -08:00
parent 1e3adb54f3
commit 5a087809dc
3 changed files with 55 additions and 3 deletions

View File

@ -0,0 +1,47 @@
package agent
import (
"net/http"
"strings"
)
func (s *HTTPServer) AgentServices(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
// TODO
return nil, nil
}
func (s *HTTPServer) AgentMembers(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
// Check if the WAN is being queried
wan := false
if other := req.URL.Query().Get("wan"); other != "" {
wan = true
}
if wan {
return s.agent.WANMembers(), nil
} else {
return s.agent.LANMembers(), nil
}
}
func (s *HTTPServer) AgentJoin(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
// Check if the WAN is being queried
wan := false
if other := req.URL.Query().Get("wan"); other != "" {
wan = true
}
// Get the address
addr := strings.TrimPrefix(req.URL.Path, "/v1/agent/join/")
if wan {
_, err := s.agent.JoinWAN([]string{addr})
return err, nil
} else {
_, err := s.agent.JoinLAN([]string{addr})
return err, nil
}
}
func (s *HTTPServer) AgentForceLeave(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
addr := strings.TrimPrefix(req.URL.Path, "/v1/agent/force-leave/")
return s.agent.ForceLeave(addr), nil
}

View File

@ -64,6 +64,11 @@ func (s *HTTPServer) registerHandlers() {
s.mux.HandleFunc("/v1/catalog/services", s.wrap(s.CatalogServices)) s.mux.HandleFunc("/v1/catalog/services", s.wrap(s.CatalogServices))
s.mux.HandleFunc("/v1/catalog/service/", s.wrap(s.CatalogServiceNodes)) s.mux.HandleFunc("/v1/catalog/service/", s.wrap(s.CatalogServiceNodes))
s.mux.HandleFunc("/v1/catalog/node/", s.wrap(s.CatalogNodeServices)) s.mux.HandleFunc("/v1/catalog/node/", s.wrap(s.CatalogNodeServices))
s.mux.HandleFunc("/v1/agent/services", s.wrap(s.AgentServices))
s.mux.HandleFunc("/v1/agent/members", s.wrap(s.AgentMembers))
s.mux.HandleFunc("/v1/agent/join/", s.wrap(s.AgentJoin))
s.mux.HandleFunc("/v1/agent/force-leave/", s.wrap(s.AgentForceLeave))
} }
// wrap is used to wrap functions to make them more convenient // wrap is used to wrap functions to make them more convenient

View File

@ -29,9 +29,9 @@ The current URLs supported are:
* /v1/status/leader : Returns the current Raft leader * /v1/status/leader : Returns the current Raft leader
* /v1/status/peers : Returns the current Raft peer set * /v1/status/peers : Returns the current Raft peer set
* /v1/agent/services : Returns the services local agent is attempting to register
* /v1/agent/health: Returns the health info from the local agent (future) * /v1/agent/health: Returns the health info from the local agent (future)
* /v1/agent/services : Returns the services local agent is attempting to register
* /v1/agent/members : Returns the members as seen by the local serf agent * /v1/agent/members : Returns the members as seen by the local serf agent
* /v1/agent/join : Instructs the local agent to join a node * /v1/agent/join/<node> : Instructs the local agent to join a node
* /v1/agent/force-leave: Instructs the agent to force a node into the left state * /v1/agent/force-leave/<node>: Instructs the agent to force a node into the left state