|
|
|
@ -200,21 +200,26 @@ func (a *Agent) ServiceDeregister(serviceID string) error {
|
|
|
|
|
|
|
|
|
|
// PassTTL is used to set a TTL check to the passing state
|
|
|
|
|
func (a *Agent) PassTTL(checkID, note string) error { |
|
|
|
|
return a.UpdateTTL(checkID, note, "pass") |
|
|
|
|
return a.updateTTL(checkID, note, "pass") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// WarnTTL is used to set a TTL check to the warning state
|
|
|
|
|
func (a *Agent) WarnTTL(checkID, note string) error { |
|
|
|
|
return a.UpdateTTL(checkID, note, "warn") |
|
|
|
|
return a.updateTTL(checkID, note, "warn") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// FailTTL is used to set a TTL check to the failing state
|
|
|
|
|
func (a *Agent) FailTTL(checkID, note string) error { |
|
|
|
|
return a.UpdateTTL(checkID, note, "fail") |
|
|
|
|
return a.updateTTL(checkID, note, "fail") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// UpdateTTL is used to update the TTL of a check
|
|
|
|
|
func (a *Agent) UpdateTTL(checkID, note, status string) error { |
|
|
|
|
// updateTTL is used to update the TTL of a check. This is the internal
|
|
|
|
|
// method that uses the old API that's present in Consul versions prior
|
|
|
|
|
// to 0.6.4. Since Consul didn't have an analogous "update" API before it
|
|
|
|
|
// seemed ok to break this (former) UpdateTTL in favor of the new UpdateTTL
|
|
|
|
|
// below, but keep the old Pass/Warn/Fail methods using the old API under the
|
|
|
|
|
// hood.
|
|
|
|
|
func (a *Agent) updateTTL(checkID, note, status string) error { |
|
|
|
|
switch status { |
|
|
|
|
case "pass": |
|
|
|
|
case "warn": |
|
|
|
@ -233,6 +238,50 @@ func (a *Agent) UpdateTTL(checkID, note, status string) error {
|
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// checkUpdate is the payload for a PUT for a check update.
|
|
|
|
|
type checkUpdate struct { |
|
|
|
|
// Status us one of the structs.Health* states, "passing", "warning", or
|
|
|
|
|
// "critical".
|
|
|
|
|
Status string |
|
|
|
|
|
|
|
|
|
// Output is the information to post to the UI for operators as the
|
|
|
|
|
// output of the process that decided to hit the TTL check. This is
|
|
|
|
|
// different from the note field that's associated with the check
|
|
|
|
|
// itself.
|
|
|
|
|
Output string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// UpdateTTL is used to update the TTL of a check. This uses the newer API
|
|
|
|
|
// that was introduced in Consul 0.6.4 and later. We translate the old status
|
|
|
|
|
// strings for compatibility (though a newer version of Consul will still be
|
|
|
|
|
// required to use this API).
|
|
|
|
|
func (a *Agent) UpdateTTL(checkID, output, status string) error { |
|
|
|
|
switch status { |
|
|
|
|
case "pass", "passing": |
|
|
|
|
status = "passing" |
|
|
|
|
case "warn", "warning": |
|
|
|
|
status = "warning" |
|
|
|
|
case "fail", "critical": |
|
|
|
|
status = "critical" |
|
|
|
|
default: |
|
|
|
|
return fmt.Errorf("Invalid status: %s", status) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
endpoint := fmt.Sprintf("/v1/agent/check/update/%s", checkID) |
|
|
|
|
r := a.c.newRequest("PUT", endpoint) |
|
|
|
|
r.obj = &checkUpdate{ |
|
|
|
|
Status: status, |
|
|
|
|
Output: output, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_, resp, err := requireOK(a.c.doRequest(r)) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
resp.Body.Close() |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// CheckRegister is used to register a new check with
|
|
|
|
|
// the local agent
|
|
|
|
|
func (a *Agent) CheckRegister(check *AgentCheckRegistration) error { |
|
|
|
|