8 50558780 2022-01-06 o // Host represents a Host object.
9 6e415953 2022-01-06 o type Host struct {
10 76669f9b 2022-01-11 o Name string `json:"name"`
11 76669f9b 2022-01-11 o Address string `json:"address"`
12 76669f9b 2022-01-11 o Address6 string `json:"address6"`
13 76669f9b 2022-01-11 o Groups []string `json:"groups"`
14 76669f9b 2022-01-11 o State HostState `json:"state"`
15 76669f9b 2022-01-11 o CheckCommand string `json:"check_command"`
16 76669f9b 2022-01-11 o DisplayName string `json:"display_name"`
19 76669f9b 2022-01-11 o type HostState int
22 76669f9b 2022-01-11 o HostUp HostState = 0 + iota
24 76669f9b 2022-01-11 o HostUnreachable
27 76669f9b 2022-01-11 o func (s HostState) String() string {
30 76669f9b 2022-01-11 o return "HostUp"
32 76669f9b 2022-01-11 o return "HostDown"
33 76669f9b 2022-01-11 o case HostUnreachable:
34 76669f9b 2022-01-11 o return "HostUnreachable"
36 76669f9b 2022-01-11 o return "unhandled host state"
39 76669f9b 2022-01-11 o func (h Host) name() string {
43 76669f9b 2022-01-11 o func (h Host) path() string {
44 76669f9b 2022-01-11 o return "/objects/hosts/" + h.Name
47 76669f9b 2022-01-11 o func (h Host) attrs() map[string]interface{} {
48 76669f9b 2022-01-11 o m := make(map[string]interface{})
49 76669f9b 2022-01-11 o m["display_name"] = h.DisplayName
53 50558780 2022-01-06 o func (h Host) MarshalJSON() ([]byte, error) {
54 50558780 2022-01-06 o type Attrs struct {
55 50558780 2022-01-06 o Address string `json:"address"`
56 50558780 2022-01-06 o CheckCommand string `json:"check_command"`
57 50558780 2022-01-06 o DisplayName string `json:"display_name"`
59 50558780 2022-01-06 o type host struct {
60 50558780 2022-01-06 o Attrs Attrs `json:"attrs"`
62 50558780 2022-01-06 o jhost := &host{
64 50558780 2022-01-06 o Address: h.Address,
65 50558780 2022-01-06 o CheckCommand: h.CheckCommand,
66 50558780 2022-01-06 o DisplayName: h.DisplayName,
69 50558780 2022-01-06 o return json.Marshal(jhost)
72 50558780 2022-01-06 o // Hosts returns all Hosts in the Icinga2 configuration.
73 6e415953 2022-01-06 o func (c *Client) Hosts() ([]Host, error) {
74 76669f9b 2022-01-11 o objects, err := c.allObjects("/objects/hosts")
75 6e415953 2022-01-06 o if err != nil {
76 76669f9b 2022-01-11 o return nil, fmt.Errorf("get all hosts: %w", err)
78 76669f9b 2022-01-11 o var hosts []Host
79 76669f9b 2022-01-11 o for _, o := range objects {
80 76669f9b 2022-01-11 o v, ok := o.(Host)
82 76669f9b 2022-01-11 o return nil, fmt.Errorf("get all hosts: %T in response", v)
84 76669f9b 2022-01-11 o hosts = append(hosts, v)
86 76669f9b 2022-01-11 o return hosts, nil
89 76669f9b 2022-01-11 o // FilterHosts returns any matching hosts after applying the filter
90 76669f9b 2022-01-11 o // expression expr. If no hosts match, an empty slice and an error wrapping
91 76669f9b 2022-01-11 o // ErrNoMatch is returned.
92 76669f9b 2022-01-11 o func (c *Client) FilterHosts(expr string) ([]Host, error) {
93 76669f9b 2022-01-11 o objects, err := c.filterObjects("/objects/hosts", expr)
94 76669f9b 2022-01-11 o if err != nil {
95 76669f9b 2022-01-11 o return nil, fmt.Errorf("filter hosts %q: %w", expr, err)
97 50558780 2022-01-06 o var hosts []Host
98 76669f9b 2022-01-11 o for _, o := range objects {
99 76669f9b 2022-01-11 o v, ok := o.(Host)
101 76669f9b 2022-01-11 o return nil, fmt.Errorf("filter hosts %q: %T in response", expr, v)
103 76669f9b 2022-01-11 o hosts = append(hosts, v)
105 50558780 2022-01-06 o return hosts, nil
108 76669f9b 2022-01-11 o // LookupHost returns the Host identified by name. If no Host is found,
109 76669f9b 2022-01-11 o // error wraps ErrNotExist.
110 6e415953 2022-01-06 o func (c *Client) LookupHost(name string) (Host, error) {
111 76669f9b 2022-01-11 o obj, err := c.lookupObject("/objects/hosts/" + name)
112 6e415953 2022-01-06 o if err != nil {
113 76669f9b 2022-01-11 o return Host{}, fmt.Errorf("lookup %s: %w", name, err)
115 76669f9b 2022-01-11 o v, ok := obj.(Host)
117 76669f9b 2022-01-11 o return Host{}, fmt.Errorf("lookup %s: result type %T is not host", name, obj)
122 50558780 2022-01-06 o // CreateHost creates the Host host.
123 50558780 2022-01-06 o // The Name and CheckCommand fields of host must be non-zero.
124 50558780 2022-01-06 o func (c *Client) CreateHost(host Host) error {
125 76669f9b 2022-01-11 o if err := c.createObject(host); err != nil {
126 50558780 2022-01-06 o return fmt.Errorf("create host %s: %w", host.Name, err)
131 50558780 2022-01-06 o // DeleteHost deletes the Host identified by name.
132 76669f9b 2022-01-11 o // If no Host is found, error wraps ErrNotExist.
133 6e415953 2022-01-06 o func (c *Client) DeleteHost(name string) error {
134 76669f9b 2022-01-11 o if err := c.deleteObject("/objects/hosts/" + name); err != nil {
135 6e415953 2022-01-06 o return fmt.Errorf("delete host %s: %w", name, err)