Blame


1 76669f9b 2022-01-11 o package icinga
2 76669f9b 2022-01-11 o
3 76669f9b 2022-01-11 o import (
4 76669f9b 2022-01-11 o "encoding/json"
5 76669f9b 2022-01-11 o "fmt"
6 76669f9b 2022-01-11 o )
7 76669f9b 2022-01-11 o
8 76669f9b 2022-01-11 o func (s Service) name() string {
9 76669f9b 2022-01-11 o return s.Name
10 76669f9b 2022-01-11 o }
11 76669f9b 2022-01-11 o
12 76669f9b 2022-01-11 o func (s Service) path() string {
13 76669f9b 2022-01-11 o return "/objects/services/" + s.Name
14 76669f9b 2022-01-11 o }
15 76669f9b 2022-01-11 o
16 76669f9b 2022-01-11 o func (s Service) attrs() map[string]interface{} {
17 76669f9b 2022-01-11 o m := make(map[string]interface{})
18 76669f9b 2022-01-11 o m["display_name"] = s.DisplayName
19 76669f9b 2022-01-11 o return m
20 76669f9b 2022-01-11 o }
21 76669f9b 2022-01-11 o
22 76669f9b 2022-01-11 o // Service represents a Service object.
23 76669f9b 2022-01-11 o type Service struct {
24 76669f9b 2022-01-11 o Name string `json:"__name"`
25 76669f9b 2022-01-11 o Groups []string
26 76669f9b 2022-01-11 o State ServiceState
27 76669f9b 2022-01-11 o CheckCommand string `json:"check_command"`
28 76669f9b 2022-01-11 o DisplayName string `json:"display_name:"`
29 76669f9b 2022-01-11 o }
30 76669f9b 2022-01-11 o
31 76669f9b 2022-01-11 o type ServiceState int
32 76669f9b 2022-01-11 o
33 76669f9b 2022-01-11 o const (
34 76669f9b 2022-01-11 o ServiceOK ServiceState = 0 + iota
35 76669f9b 2022-01-11 o ServiceWarning
36 76669f9b 2022-01-11 o ServiceCritical
37 76669f9b 2022-01-11 o ServiceUnknown
38 76669f9b 2022-01-11 o )
39 76669f9b 2022-01-11 o
40 76669f9b 2022-01-11 o func (s ServiceState) String() string {
41 76669f9b 2022-01-11 o switch s {
42 76669f9b 2022-01-11 o case ServiceOK:
43 76669f9b 2022-01-11 o return "ServiceOK"
44 76669f9b 2022-01-11 o case ServiceWarning:
45 76669f9b 2022-01-11 o return "ServiceWarning"
46 76669f9b 2022-01-11 o case ServiceCritical:
47 76669f9b 2022-01-11 o return "ServiceCritical"
48 76669f9b 2022-01-11 o case ServiceUnknown:
49 76669f9b 2022-01-11 o return "ServiceUnknown"
50 76669f9b 2022-01-11 o }
51 76669f9b 2022-01-11 o return "unhandled service state"
52 76669f9b 2022-01-11 o }
53 76669f9b 2022-01-11 o
54 76669f9b 2022-01-11 o func (s Service) MarshalJSON() ([]byte, error) {
55 76669f9b 2022-01-11 o attrs := make(map[string]interface{})
56 76669f9b 2022-01-11 o if len(s.Groups) > 0 {
57 76669f9b 2022-01-11 o attrs["groups"] = s.Groups
58 76669f9b 2022-01-11 o }
59 76669f9b 2022-01-11 o attrs["check_command"] = s.CheckCommand
60 76669f9b 2022-01-11 o attrs["display_name"] = s.DisplayName
61 76669f9b 2022-01-11 o jservice := &struct {
62 76669f9b 2022-01-11 o Attrs map[string]interface{} `json:"attrs"`
63 76669f9b 2022-01-11 o }{Attrs: attrs}
64 76669f9b 2022-01-11 o return json.Marshal(jservice)
65 76669f9b 2022-01-11 o }
66 76669f9b 2022-01-11 o
67 76669f9b 2022-01-11 o func (c *Client) CreateService(service Service) error {
68 76669f9b 2022-01-11 o if err := c.createObject(service); err != nil {
69 76669f9b 2022-01-11 o return fmt.Errorf("create service %s: %w", service.Name, err)
70 76669f9b 2022-01-11 o }
71 76669f9b 2022-01-11 o return nil
72 76669f9b 2022-01-11 o }
73 76669f9b 2022-01-11 o
74 76669f9b 2022-01-11 o func (c *Client) LookupService(name string) (Service, error) {
75 76669f9b 2022-01-11 o obj, err := c.lookupObject("/objects/services/" + name)
76 76669f9b 2022-01-11 o if err != nil {
77 76669f9b 2022-01-11 o return Service{}, fmt.Errorf("lookup %s: %w", name, err)
78 76669f9b 2022-01-11 o }
79 76669f9b 2022-01-11 o v, ok := obj.(Service)
80 76669f9b 2022-01-11 o if !ok {
81 76669f9b 2022-01-11 o return Service{}, fmt.Errorf("lookup %s: result type %T is not service", name, obj)
82 76669f9b 2022-01-11 o }
83 76669f9b 2022-01-11 o return v, nil
84 76669f9b 2022-01-11 o }