mirror of
https://github.com/status-im/consul.git
synced 2025-01-22 11:40:06 +00:00
agent: maintenance logging + unique service check IDs
This commit is contained in:
parent
853cb504d6
commit
ba2d0fa7e3
@ -31,8 +31,8 @@ const (
|
|||||||
"and try again."
|
"and try again."
|
||||||
|
|
||||||
// The ID of the faux health checks for maintenance mode
|
// The ID of the faux health checks for maintenance mode
|
||||||
serviceMaintCheckID = "_service_maintenance"
|
serviceMaintCheckPrefix = "_service_maintenance"
|
||||||
nodeMaintCheckID = "_node_maintenenace"
|
nodeMaintCheckID = "_node_maintenenace"
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1000,6 +1000,11 @@ func (a *Agent) unloadChecks() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// serviceMaintCheckID returns the ID of a given service's maintenance check
|
||||||
|
func serviceMaintCheckID(serviceID string) string {
|
||||||
|
return fmt.Sprintf("%s:%s", serviceMaintCheckPrefix, serviceID)
|
||||||
|
}
|
||||||
|
|
||||||
// EnableServiceMaintenance will register a false health check against the given
|
// EnableServiceMaintenance will register a false health check against the given
|
||||||
// service ID with critical status. This will exclude the service from queries.
|
// service ID with critical status. This will exclude the service from queries.
|
||||||
func (a *Agent) EnableServiceMaintenance(serviceID string) error {
|
func (a *Agent) EnableServiceMaintenance(serviceID string) error {
|
||||||
@ -1008,15 +1013,16 @@ func (a *Agent) EnableServiceMaintenance(serviceID string) error {
|
|||||||
return fmt.Errorf("No service registered with ID %q", serviceID)
|
return fmt.Errorf("No service registered with ID %q", serviceID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure maintenance mode is not already enabled
|
// Check if maintenance mode is not already enabled
|
||||||
if _, ok := a.state.Checks()[serviceMaintCheckID]; ok {
|
checkID := serviceMaintCheckID(serviceID)
|
||||||
|
if _, ok := a.state.Checks()[checkID]; ok {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create and register the critical health check
|
// Create and register the critical health check
|
||||||
check := &structs.HealthCheck{
|
check := &structs.HealthCheck{
|
||||||
Node: a.config.NodeName,
|
Node: a.config.NodeName,
|
||||||
CheckID: serviceMaintCheckID,
|
CheckID: checkID,
|
||||||
Name: "Service Maintenance Mode",
|
Name: "Service Maintenance Mode",
|
||||||
Notes: "Maintenance mode is enabled for this service",
|
Notes: "Maintenance mode is enabled for this service",
|
||||||
ServiceID: service.ID,
|
ServiceID: service.ID,
|
||||||
@ -1024,6 +1030,7 @@ func (a *Agent) EnableServiceMaintenance(serviceID string) error {
|
|||||||
Status: structs.HealthCritical,
|
Status: structs.HealthCritical,
|
||||||
}
|
}
|
||||||
a.AddCheck(check, nil, true)
|
a.AddCheck(check, nil, true)
|
||||||
|
a.logger.Printf("[INFO] agent: service %q entered maintenance mode", serviceID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -1035,8 +1042,16 @@ func (a *Agent) DisableServiceMaintenance(serviceID string) error {
|
|||||||
return fmt.Errorf("No service registered with ID %q", serviceID)
|
return fmt.Errorf("No service registered with ID %q", serviceID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if maintenance mode is enabled
|
||||||
|
checkID := serviceMaintCheckID(serviceID)
|
||||||
|
if _, ok := a.state.Checks()[checkID]; !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Deregister the maintenance check
|
// Deregister the maintenance check
|
||||||
a.RemoveCheck(serviceMaintCheckID, true)
|
a.RemoveCheck(checkID, true)
|
||||||
|
a.logger.Printf("[INFO] agent: service %q left maintenance mode", serviceID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1056,9 +1071,14 @@ func (a *Agent) EnableNodeMaintenance() {
|
|||||||
Status: structs.HealthCritical,
|
Status: structs.HealthCritical,
|
||||||
}
|
}
|
||||||
a.AddCheck(check, nil, true)
|
a.AddCheck(check, nil, true)
|
||||||
|
a.logger.Printf("[INFO] agent: node entered maintenance mode")
|
||||||
}
|
}
|
||||||
|
|
||||||
// DisableNodeMaintenance removes a node from maintenance mode
|
// DisableNodeMaintenance removes a node from maintenance mode
|
||||||
func (a *Agent) DisableNodeMaintenance() {
|
func (a *Agent) DisableNodeMaintenance() {
|
||||||
|
if _, ok := a.state.Checks()[nodeMaintCheckID]; !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
a.RemoveCheck(nodeMaintCheckID, true)
|
a.RemoveCheck(nodeMaintCheckID, true)
|
||||||
|
a.logger.Printf("[INFO] agent: node left maintenance mode")
|
||||||
}
|
}
|
||||||
|
@ -567,7 +567,8 @@ func TestHTTPAgent_EnableServiceMaintenance(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure the maintenance check was registered
|
// Ensure the maintenance check was registered
|
||||||
if _, ok := srv.agent.state.Checks()[serviceMaintCheckID]; !ok {
|
checkID := serviceMaintCheckID("test")
|
||||||
|
if _, ok := srv.agent.state.Checks()[checkID]; !ok {
|
||||||
t.Fatalf("should have registered maintenance check")
|
t.Fatalf("should have registered maintenance check")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -603,7 +604,8 @@ func TestHTTPAgent_DisableServiceMaintenance(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure the maintenance check was removed
|
// Ensure the maintenance check was removed
|
||||||
if _, ok := srv.agent.state.Checks()[serviceMaintCheckID]; ok {
|
checkID := serviceMaintCheckID("test")
|
||||||
|
if _, ok := srv.agent.state.Checks()[checkID]; ok {
|
||||||
t.Fatalf("should have removed maintenance check")
|
t.Fatalf("should have removed maintenance check")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -806,7 +806,8 @@ func TestAgent_ServiceMaintenanceMode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the critical health check was added
|
// Make sure the critical health check was added
|
||||||
if _, ok := agent.state.Checks()[serviceMaintCheckID]; !ok {
|
checkID := serviceMaintCheckID("redis")
|
||||||
|
if _, ok := agent.state.Checks()[checkID]; !ok {
|
||||||
t.Fatalf("should have registered critical maintenance check")
|
t.Fatalf("should have registered critical maintenance check")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -816,7 +817,7 @@ func TestAgent_ServiceMaintenanceMode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure the check was deregistered
|
// Ensure the check was deregistered
|
||||||
if _, ok := agent.state.Checks()[serviceMaintCheckID]; ok {
|
if _, ok := agent.state.Checks()[checkID]; ok {
|
||||||
t.Fatalf("should have deregistered maintenance check")
|
t.Fatalf("should have deregistered maintenance check")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user