Commit Diff


commit - 562d5c1eb8a76a65d49d14b36edefb846f747494
commit + 64e18a8d1ef9f178f91aed840a371f3785c4d188
blob - b9feba78821be80819231914337efeb72971926a
blob + 779711b252a08733adaad116d0cc3e7242ca061d
--- checker.go
+++ checker.go
@@ -82,7 +82,7 @@ func (c *Client) CheckServices(filter string) error {
 		Expr: filter,
 	}
 	if err := scheduleCheck(c, f); err != nil {
-		return fmt.Errorf("check services %q: %w", filter, err)
+		return fmt.Errorf("check services %s: %w", filter, err)
 	}
 	return nil
 }
@@ -95,7 +95,7 @@ func (c *Client) CheckHosts(filter string) error {
 		Expr: filter,
 	}
 	if err := scheduleCheck(c, f); err != nil {
-		return fmt.Errorf("check hosts %q: %w", filter, err)
+		return fmt.Errorf("check hosts %s: %w", filter, err)
 	}
 	return nil
 }
blob - 80a024bcecbca0755bbb780f1fc35472380a6206
blob + 36b12a496a825ccc2aef75a719a123d76ce3879a
--- crud.go
+++ crud.go
@@ -10,13 +10,13 @@ import "fmt"
 func (c *Client) Hosts(filter string) ([]Host, error) {
 	objects, err := c.filterObjects("/objects/hosts", filter)
 	if err != nil {
-		return nil, fmt.Errorf("get hosts filter %q: %w", filter, err)
+		return nil, fmt.Errorf("get hosts filter %s: %w", filter, err)
 	}
 	var hosts []Host
 	for _, o := range objects {
 		v, ok := o.(Host)
 		if !ok {
-			return nil, fmt.Errorf("get hosts filter %q: %T in response", filter, v)
+			return nil, fmt.Errorf("get hosts filter %s: %T in response", filter, v)
 		}
 		hosts = append(hosts, v)
 	}
@@ -61,13 +61,13 @@ func (c *Client) DeleteHost(name string, cascade bool)
 func (c *Client) Services(filter string) ([]Service, error) {
 	objects, err := c.filterObjects("/objects/services", filter)
 	if err != nil {
-		return nil, fmt.Errorf("get services filter %q: %w", filter, err)
+		return nil, fmt.Errorf("get services filter %s: %w", filter, err)
 	}
 	var services []Service
 	for _, o := range objects {
 		v, ok := o.(Service)
 		if !ok {
-			return nil, fmt.Errorf("get services filter %q: %T in response", filter, v)
+			return nil, fmt.Errorf("get services filter %s: %T in response", filter, v)
 		}
 		services = append(services, v)
 	}
@@ -112,13 +112,13 @@ func (c *Client) DeleteService(name string, cascade bo
 func (c *Client) Users(filter string) ([]User, error) {
 	objects, err := c.filterObjects("/objects/users", filter)
 	if err != nil {
-		return nil, fmt.Errorf("get users filter %q: %w", filter, err)
+		return nil, fmt.Errorf("get users filter %s: %w", filter, err)
 	}
 	var users []User
 	for _, o := range objects {
 		v, ok := o.(User)
 		if !ok {
-			return nil, fmt.Errorf("get users filter %q: %T in response", filter, v)
+			return nil, fmt.Errorf("get users filter %s: %T in response", filter, v)
 		}
 		users = append(users, v)
 	}
@@ -163,13 +163,13 @@ func (c *Client) DeleteUser(name string, cascade bool)
 func (c *Client) HostGroups(filter string) ([]HostGroup, error) {
 	objects, err := c.filterObjects("/objects/hostgroups", filter)
 	if err != nil {
-		return nil, fmt.Errorf("get hostgroups filter %q: %w", filter, err)
+		return nil, fmt.Errorf("get hostgroups filter %s: %w", filter, err)
 	}
 	var hostgroups []HostGroup
 	for _, o := range objects {
 		v, ok := o.(HostGroup)
 		if !ok {
-			return nil, fmt.Errorf("get hostgroups filter %q: %T in response", filter, v)
+			return nil, fmt.Errorf("get hostgroups filter %s: %T in response", filter, v)
 		}
 		hostgroups = append(hostgroups, v)
 	}
blob - 0aed23206f89c7a23d04fe9bc52bdfa190ae4b18
blob + 98555ec48091ac0edc461dbba2a34659164d40b9
--- crud.skel
+++ crud.skel
@@ -4,13 +4,13 @@
 func (c *Client) TYPEs(filter string) ([]TYPE, error) {
 	objects, err := c.filterObjects("/objects/PLURAL", filter)
 	if err != nil {
-		return nil, fmt.Errorf("get PLURAL filter %q: %w", filter, err)
+		return nil, fmt.Errorf("get PLURAL filter %s: %w", filter, err)
 	}
 	var PLURAL []TYPE
 	for _, o := range objects {
 		v, ok := o.(TYPE)
 		if !ok {
-			return nil, fmt.Errorf("get PLURAL filter %q: %T in response", filter, v)
+			return nil, fmt.Errorf("get PLURAL filter %s: %T in response", filter, v)
 		}
 		PLURAL = append(PLURAL, v)
 	}
blob - 6706b881d34f7c9f765071850524e5c24304ee91
blob + e6e5d8c1eac900a0fce5682be080cdc969454f7e
--- icinga_test.go
+++ icinga_test.go
@@ -188,3 +188,18 @@ func TestCreateService(t *testing.T) {
 		t.Error(err)
 	}
 }
+
+func TestNonExistentService(t *testing.T) {
+	client, err := newTestClient()
+	if err != nil {
+		t.Skipf("no local test icinga? got: %v", err)
+	}
+
+	filter := `match("blablabla", service.name)`
+	service, err := client.Services(filter)
+	if err == nil {
+		t.Fail()
+	}
+	t.Logf("lookup %s: %v", name, err)
+	t.Logf("%+v", service)
+}
blob - fef3e9de2d177ab3cfb246a54ca271d1a65bf22f
blob + faef3a21b4d7a2dd7c852d98da51a75a11c30355
--- object.go
+++ object.go
@@ -42,18 +42,16 @@ func (c *Client) filterObjects(objpath, expr string) (
 		return nil, err
 	}
 	defer resp.Body.Close()
-	if expr != "" && resp.StatusCode == http.StatusNotFound {
+	iresp, err := parseResponse(resp.Body)
+	if err != nil {
+		return nil, fmt.Errorf("parse response: %v", err)
+	} else if iresp.Error != nil {
+		return nil, iresp.Error
+	} else if resp.StatusCode != http.StatusOK {
+		return nil, errors.New(resp.Status)
+	} else if len(iresp.Results) == 0 {
 		return nil, ErrNoMatch
-
 	}
-	iresp, err := parseResponse(resp.Body)
-	if err != nil {
-		return nil, fmt.Errorf("parse response: %v", 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
 }