commit 60c115fb1c7683cea9553380eddaeb0033dd17bf from: Oliver Lowe date: Wed Jan 12 01:13:19 2022 UTC Merge filter and all objects methods Getting all objects is the same as getting objects with a zero filter. commit - fc8956331f70b23ffe89c8307de77bbc0ecccb39 commit + 60c115fb1c7683cea9553380eddaeb0033dd17bf blob - 6a3c6313b97f01ce8acaec5a60fe3dda545aaa67 blob + 4cf94afd9784ee9e129e44fc674ca65474ae77d8 --- host.go +++ host.go @@ -71,7 +71,7 @@ func (h Host) MarshalJSON() ([]byte, error) { // Hosts returns all Hosts in the Icinga2 configuration. func (c *Client) Hosts() ([]Host, error) { - objects, err := c.allObjects("/objects/hosts") + objects, err := c.filterObjects("/objects/hosts", "") if err != nil { return nil, fmt.Errorf("get all hosts: %w", err) } blob - 8eab274f60264d83154651d4f6b979dbfe720fd7 blob + 9d5a0c2381a0143335a58d3df926952fba06f30b --- object.go +++ object.go @@ -35,35 +35,24 @@ func (c *Client) lookupObject(objpath string) (object, return objectFromLookup(iresp) } -func (c *Client) allObjects(objpath string) ([]object, error) { - resp, err := c.get(objpath) - if err != nil { - return nil, err - } - defer resp.Body.Close() - iresp, err := parseResponse(resp.Body) - if err != nil { - return nil, err - } else if iresp.Error != nil { - return nil, iresp.Error - } else if resp.StatusCode != http.StatusOK { - return nil, errors.New(resp.Status) - } - return iresp.Results, nil -} - func (c *Client) filterObjects(objpath, expr string) ([]object, error) { - resp, err := c.getFilter(objpath, expr) + var resp *http.Response + var err error + if expr == "" { + resp, err = c.get(objpath) + } else { + resp, err = c.getFilter(objpath, expr) + if resp.StatusCode == http.StatusNotFound { + return nil, ErrNoMatch + } + } if err != nil { return nil, err } defer resp.Body.Close() - if resp.StatusCode == http.StatusNotFound { - return nil, ErrNoMatch - } iresp, err := parseResponse(resp.Body) if err != nil { - return nil, err + return nil, fmt.Errorf("parse response: %v", err) } else if iresp.Error != nil { return nil, iresp.Error } else if resp.StatusCode != http.StatusOK { blob - 3a95a2a727cb7f5b20f7c920e4a44f4a2ba5fc19 blob + 1ad4fa1f9efbf7d447b2dbac6ea29dbda6992300 --- user.go +++ user.go @@ -49,7 +49,7 @@ func (u User) attrs() map[string]interface{} { } func (c *Client) Users() ([]User, error) { - objects, err := c.allObjects("/objects/users") + objects, err := c.filterObjects("/objects/users", "") if err != nil { return nil, fmt.Errorf("get all users: %w", err) }