1package api
2
3// Status can be used to query the Status endpoints
4type Status struct {
5	c *Client
6}
7
8// Status returns a handle to the status endpoints
9func (c *Client) Status() *Status {
10	return &Status{c}
11}
12
13// Leader is used to query for a known leader
14func (s *Status) LeaderWithQueryOptions(q *QueryOptions) (string, error) {
15	r := s.c.newRequest("GET", "/v1/status/leader")
16
17	if q != nil {
18		r.setQueryOptions(q)
19	}
20
21	_, resp, err := requireOK(s.c.doRequest(r))
22	if err != nil {
23		return "", err
24	}
25	defer closeResponseBody(resp)
26
27	var leader string
28	if err := decodeBody(resp, &leader); err != nil {
29		return "", err
30	}
31	return leader, nil
32}
33
34func (s *Status) Leader() (string, error) {
35	return s.LeaderWithQueryOptions(nil)
36}
37
38// Peers is used to query for a known raft peers
39func (s *Status) PeersWithQueryOptions(q *QueryOptions) ([]string, error) {
40	r := s.c.newRequest("GET", "/v1/status/peers")
41
42	if q != nil {
43		r.setQueryOptions(q)
44	}
45
46	_, resp, err := requireOK(s.c.doRequest(r))
47	if err != nil {
48		return nil, err
49	}
50	defer closeResponseBody(resp)
51
52	var peers []string
53	if err := decodeBody(resp, &peers); err != nil {
54		return nil, err
55	}
56	return peers, nil
57}
58
59func (s *Status) Peers() ([]string, error) {
60	return s.PeersWithQueryOptions(nil)
61}
62