commit - f8031e6577708de406336a0d73dcb1bb922238bc
commit + 46ca0f68f521c66d60a5d6646a0a15350533c9b8
blob - 94490ea828a33c5e3bf0357e49e8ad88408bec62
blob + b9c107d451f578dab92dc014b6f35ec92d069336
--- host.go
+++ host.go
// Host represents a Host object. To create a Host, the Name and CheckCommand
// fields must be set.
type Host struct {
- Name string `json:"name"`
+ Name string `json:"-"`
Address string `json:"address"`
Address6 string `json:"address6"`
- Groups []string `json:"groups"`
- State HostState `json:"state"`
- StateType StateType `json:"state_type"`
+ Groups []string `json:"groups,omitempty"`
+ State HostState `json:"state,omitempty"`
+ StateType StateType `json:"state_type,omitempty"`
CheckCommand string `json:"check_command"`
- DisplayName string `json:"display_name"`
- Acknowledgement bool
+ DisplayName string `json:"display_name,omitempty"`
+ Acknowledgement bool `json:",omitempty"`
}
type HostGroup struct {
- Name string `json:"name"`
+ Name string `json:"-"`
DisplayName string `json:"display_name"`
}
}
func (h Host) MarshalJSON() ([]byte, error) {
- attrs := make(map[string]interface{})
- attrs["address"] = h.Address
- attrs["address6"] = h.Address6
- if len(h.Groups) > 0 {
- attrs["groups"] = h.Groups
- }
- attrs["check_command"] = h.CheckCommand
- attrs["display_name"] = h.DisplayName
- m := make(map[string]interface{})
- m["attrs"] = attrs
- return json.Marshal(m)
+ type alias Host
+ a := alias(h)
+ return json.Marshal(map[string]interface{}{"attrs": a})
}
// UnmarhsalJSON unmarshals host attributes into more meaningful Host field types.
}
func (hg HostGroup) MarshalJSON() ([]byte, error) {
- type attrs struct {
- DisplayName string `json:"display_name"`
- }
- type group struct {
- Attrs attrs `json:"attrs"`
- }
- return json.Marshal(&group{
- Attrs: attrs{
- DisplayName: hg.DisplayName,
- },
- })
+ type alias HostGroup
+ a := alias(hg)
+ return json.Marshal(map[string]interface{}{"attrs": a})
}
blob - 509bcdc19a2f9c3bf4251153eae6b2788452af53
blob + 158940542dafee9f573ab77e19866a464b348d17
--- host_test.go
+++ host_test.go
)
func TestHostMarshal(t *testing.T) {
- s := `{"attrs":{"address":"192.0.2.1","address6":"2001:db8::","groups":["test"],"check_command":"dummy","display_name":"Example host"}}`
+ b := []byte(`{"attrs":{"address":"192.0.2.1","address6":"2001:db8::","check_command":"dummy","display_name":"Example host","groups":["test"]}}`)
want := make(map[string]interface{})
- if err := json.Unmarshal([]byte(s), &want); err != nil {
+ if err := json.Unmarshal(b, &want); err != nil {
t.Fatal(err)
}
Address: "192.0.2.1",
Address6: "2001:db8::",
Groups: []string{"test"},
- State: HostDown,
StateType: StateSoft,
CheckCommand: "dummy",
DisplayName: "Example host",
if err != nil {
t.Fatal(err)
}
+ t.Log(string(p))
got := make(map[string]interface{})
if err := json.Unmarshal(p, &got); err != nil {
t.Fatal(err)
}
-
if !reflect.DeepEqual(want, got) {
t.Fail()
}
blob - f80e37d055df98e1df88ffe8fd5fb1f9d518b6e0
blob + c2a79861f1e2ae314c22000331bd19aef8938768
--- response.go
+++ response.go
switch r.Type {
case "Host":
var h Host
+ h.Name = r.Name
if err := json.Unmarshal(r.Attrs, &h); err != nil {
return nil, err
}
resp.Results = append(resp.Results, h)
case "Service":
var s Service
+ s.Name = r.Name
if err := json.Unmarshal(r.Attrs, &s); err != nil {
return nil, err
}
resp.Results = append(resp.Results, s)
case "User":
var u User
+ u.Name = r.Name
if err := json.Unmarshal(r.Attrs, &u); err != nil {
return nil, err
}
resp.Results = append(resp.Results, u)
case "HostGroup":
var h HostGroup
+ h.Name = r.Name
if err := json.Unmarshal(r.Attrs, &h); err != nil {
return nil, err
}
blob - 80355e873fde10b9bfc9c2dbb9447ffd185142a1
blob + 4affd0ebef13449176ad6412031ea66e8d13b778
--- service.go
+++ service.go
// Service represents a Service object.
type Service struct {
- Name string `json:"__name"`
- Groups []string
+ Name string `json:"-"`
+ Groups []string `json:"groups,omitempty"`
State ServiceState
StateType StateType `json:"state_type"`
CheckCommand string `json:"check_command"`
- DisplayName string `json:"display_name"`
- LastCheckResult CheckResult `json:"last_check_result"`
- Acknowledgement bool
+ DisplayName string `json:"display_name,omitempty"`
+ LastCheckResult CheckResult `json:"last_check_result,omitempty"`
+ Acknowledgement bool `json:",omitempty"`
}
type CheckResult struct {
blob - d53ca084c2e18c3b56dc38d0e727c36e48fef4a5
blob + 740b452988d7f0b545fbfb14b7880844d4cf5edb
--- user.go
+++ user.go
// User represents a User object.
// Note that this is different from an ApiUser.
type User struct {
- Name string
- Email string
- Groups []string
+ Name string `json:"-"`
+ Email string `json:"email,omitempty"`
+ Groups []string `json:"groups,omitempty"`
}
func (u User) MarshalJSON() ([]byte, error) {
- type attrs struct {
- Email string `json:"email"`
- Groups []string `json:"groups,omitempty"`
- }
- return json.Marshal(&struct {
- Attrs attrs `json:"attrs"`
- }{
- Attrs: attrs{
- Email: u.Email,
- Groups: u.Groups,
- },
- })
+ type alias User
+ a := alias(u)
+ return json.Marshal(map[string]interface{}{"attrs": a})
}
func (u User) name() string {