Support wildcard for check lookup. Fixes #152

This commit is contained in:
Armon Dadgar 2014-05-21 12:45:12 -07:00
parent de309057ff
commit e55a6fb6d6
5 changed files with 29 additions and 2 deletions

View File

@ -13,6 +13,7 @@ IMPROVEMENTS:
* Allow raw key value lookup [GH-150] * Allow raw key value lookup [GH-150]
* Log encryption enabled [GH-151] * Log encryption enabled [GH-151]
* Support `-rejoin` to rejoin a cluster after a previous leave. [GH-110] * Support `-rejoin` to rejoin a cluster after a previous leave. [GH-110]
* Support the "any" wildcard for v1/health/state/ [GH-152]
## 0.2.1 (May 20, 2014) ## 0.2.1 (May 20, 2014)

View File

@ -766,7 +766,15 @@ func (s *StateStore) ServiceChecks(service string) (uint64, structs.HealthChecks
// CheckInState is used to get all the checks for a service in a given state // CheckInState is used to get all the checks for a service in a given state
func (s *StateStore) ChecksInState(state string) (uint64, structs.HealthChecks) { func (s *StateStore) ChecksInState(state string) (uint64, structs.HealthChecks) {
return s.parseHealthChecks(s.checkTable.Get("status", state)) var idx uint64
var res []interface{}
var err error
if state == structs.HealthAny {
idx, res, err = s.checkTable.Get("id")
} else {
idx, res, err = s.checkTable.Get("status", state)
}
return s.parseHealthChecks(idx, res, err)
} }
// parseHealthChecks is used to handle the resutls of a Get against // parseHealthChecks is used to handle the resutls of a Get against

View File

@ -889,6 +889,20 @@ func TestEnsureCheck(t *testing.T) {
if !reflect.DeepEqual(checks[0], check2) { if !reflect.DeepEqual(checks[0], check2) {
t.Fatalf("bad: %v", checks[0]) t.Fatalf("bad: %v", checks[0])
} }
idx, checks = store.ChecksInState(structs.HealthAny)
if idx != 4 {
t.Fatalf("bad: %v", idx)
}
if len(checks) != 2 {
t.Fatalf("bad: %v", checks)
}
if !reflect.DeepEqual(checks[0], check) {
t.Fatalf("bad: %v", checks[0])
}
if !reflect.DeepEqual(checks[1], check2) {
t.Fatalf("bad: %v", checks[1])
}
} }
func TestDeleteNodeCheck(t *testing.T) { func TestDeleteNodeCheck(t *testing.T) {

View File

@ -23,6 +23,9 @@ const (
) )
const ( const (
// HealthAny is special, and is used as a wild card,
// not as a specific state.
HealthAny = "any"
HealthUnknown = "unknown" HealthUnknown = "unknown"
HealthPassing = "passing" HealthPassing = "passing"
HealthWarning = "warning" HealthWarning = "warning"

View File

@ -803,7 +803,8 @@ state for a given datacenter. By default the datacenter of the agent is queried,
however the dc can be provided using the "?dc=" query parameter. however the dc can be provided using the "?dc=" query parameter.
The state being queried must be provided after the slash. The supported states The state being queried must be provided after the slash. The supported states
are "unknown", "passing", "warning", or "critical". are "any", "unknown", "passing", "warning", or "critical". The "any" state is
a wildcard that can be used to return all the checks.
It returns a JSON body like this: It returns a JSON body like this: