diff --git a/cmd/node-termination-handler.go b/cmd/node-termination-handler.go index c049072e..54d04b93 100644 --- a/cmd/node-termination-handler.go +++ b/cmd/node-termination-handler.go @@ -196,13 +196,13 @@ func main() { for _, fn := range monitoringFns { go func(monitor monitor.Monitor) { - log.Info().Str("event_type", monitor.Kind()).Msg("Started monitoring for events") + log.Info().Str("monitor_type", monitor.Kind()).Msg("Started monitoring for events") var previousErr error var duplicateErrCount int for range time.Tick(time.Second * 2) { err := monitor.Monitor() if err != nil { - log.Warn().Str("event_type", monitor.Kind()).Err(err).Msg("There was a problem monitoring for events") + log.Warn().Str("monitor_type", monitor.Kind()).Err(err).Msg("There was a problem monitoring for events") metrics.ErrorEventsInc(monitor.Kind()) recorder.Emit(nthConfig.NodeName, observability.Warning, observability.MonitorErrReason, observability.MonitorErrMsgFmt, monitor.Kind()) if previousErr != nil && err.Error() == previousErr.Error() { @@ -242,6 +242,7 @@ func main() { log.Info(). Str("event-id", event.EventID). Str("kind", event.Kind). + Str("monitor", event.Monitor). Str("node-name", event.NodeName). Str("instance-id", event.InstanceID). Str("provider-id", event.ProviderID). diff --git a/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor.go b/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor.go index 5c12c67b..d0095c78 100644 --- a/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor.go +++ b/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor.go @@ -23,10 +23,8 @@ import ( "github.com/aws/aws-node-termination-handler/pkg/node" ) -const ( - // RebalanceRecommendationKind is a const to define a Rebalance Recommendation kind of event - RebalanceRecommendationKind = "REBALANCE_RECOMMENDATION" -) +// RebalanceRecommentadionMonitorKind is a const to define this monitor kind +const RebalanceRecommendationMonitorKind = "REBALANCE_RECOMMENDATION_MONITOR" // RebalanceRecommendationMonitor is a struct definition which facilitates monitoring of rebalance recommendations from IMDS type RebalanceRecommendationMonitor struct { @@ -50,15 +48,15 @@ func (m RebalanceRecommendationMonitor) Monitor() error { if err != nil { return err } - if interruptionEvent != nil && interruptionEvent.Kind == RebalanceRecommendationKind { + if interruptionEvent != nil && interruptionEvent.Kind == monitor.RebalanceRecommendationKind { m.InterruptionChan <- *interruptionEvent } return nil } -// Kind denotes the kind of event that is processed +// Kind denotes the kind of monitor func (m RebalanceRecommendationMonitor) Kind() string { - return RebalanceRecommendationKind + return RebalanceRecommendationMonitorKind } // checkForRebalanceRecommendation Checks EC2 instance metadata for a rebalance recommendation @@ -86,7 +84,8 @@ func (m RebalanceRecommendationMonitor) checkForRebalanceRecommendation() (*moni return &monitor.InterruptionEvent{ EventID: fmt.Sprintf("rebalance-recommendation-%x", hash.Sum(nil)), - Kind: RebalanceRecommendationKind, + Kind: monitor.RebalanceRecommendationKind, + Monitor: RebalanceRecommendationMonitorKind, StartTime: noticeTime, NodeName: nodeName, Description: fmt.Sprintf("Rebalance recommendation received. Instance will be cordoned at %s \n", rebalanceRecommendation.NoticeTime), diff --git a/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor_test.go b/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor_test.go index afc91295..baba4462 100644 --- a/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor_test.go +++ b/pkg/monitor/rebalancerecommendation/rebalance-recommendation-monitor_test.go @@ -55,7 +55,8 @@ func TestMonitor_Success(t *testing.T) { go func() { result := <-drainChan - h.Equals(t, rebalancerecommendation.RebalanceRecommendationKind, result.Kind) + h.Equals(t, monitor.RebalanceRecommendationKind, result.Kind) + h.Equals(t, rebalancerecommendation.RebalanceRecommendationMonitorKind, result.Monitor) h.Equals(t, expFormattedTime, result.StartTime.String()) h.Assert(t, strings.Contains(result.Description, startTime), "Expected description to contain: "+startTime+" but is actually: "+result.Description) diff --git a/pkg/monitor/scheduledevent/scheduled-event-monitor.go b/pkg/monitor/scheduledevent/scheduled-event-monitor.go index a7c06070..94cf2bd1 100644 --- a/pkg/monitor/scheduledevent/scheduled-event-monitor.go +++ b/pkg/monitor/scheduledevent/scheduled-event-monitor.go @@ -24,8 +24,8 @@ import ( ) const ( - // ScheduledEventKind is a const to define a scheduled event kind of interruption event - ScheduledEventKind = "SCHEDULED_EVENT" + // ScheduledEventMonitorKind is a const to define this monitor kind + ScheduledEventMonitorKind = "SCHEDULED_EVENT_MONITOR" scheduledEventStateCompleted = "completed" scheduledEventStateCanceled = "canceled" scheduledEventDateFormat = "2 Jan 2006 15:04:05 GMT" @@ -69,9 +69,9 @@ func (m ScheduledEventMonitor) Monitor() error { return nil } -// Kind denotes the kind of event that is processed +// Kind denotes the kind of monitor func (m ScheduledEventMonitor) Kind() string { - return ScheduledEventKind + return ScheduledEventMonitorKind } // checkForScheduledEvents Checks EC2 instance metadata for a scheduled event requiring a node drain @@ -101,7 +101,8 @@ func (m ScheduledEventMonitor) checkForScheduledEvents() ([]monitor.Interruption } events = append(events, monitor.InterruptionEvent{ EventID: scheduledEvent.EventID, - Kind: ScheduledEventKind, + Kind: monitor.ScheduledEventKind, + Monitor: ScheduledEventMonitorKind, Description: fmt.Sprintf("%s will occur between %s and %s because %s\n", scheduledEvent.Code, scheduledEvent.NotBefore, scheduledEvent.NotAfter, scheduledEvent.Description), State: scheduledEvent.State, NodeName: m.NodeName, diff --git a/pkg/monitor/scheduledevent/scheduled-event-monitor_test.go b/pkg/monitor/scheduledevent/scheduled-event-monitor_test.go index eb7fbb8f..fbe3a26f 100644 --- a/pkg/monitor/scheduledevent/scheduled-event-monitor_test.go +++ b/pkg/monitor/scheduledevent/scheduled-event-monitor_test.go @@ -75,7 +75,8 @@ func TestMonitor_Success(t *testing.T) { go func() { result := <-drainChan h.Equals(t, scheduledEventId, result.EventID) - h.Equals(t, scheduledevent.ScheduledEventKind, result.Kind) + h.Equals(t, monitor.ScheduledEventKind, result.Kind) + h.Equals(t, scheduledevent.ScheduledEventMonitorKind, result.Monitor) h.Equals(t, scheduledEventState, result.State) h.TimeWithinRange(t, result.StartTime, oneSecondAgo(), time.Now()) h.Equals(t, expScheduledEventEndTimeFmt, result.EndTime.String()) @@ -130,7 +131,7 @@ func TestMonitor_CanceledEvent(t *testing.T) { go func() { result := <-cancelChan h.Equals(t, scheduledEventId, result.EventID) - h.Equals(t, scheduledevent.ScheduledEventKind, result.Kind) + h.Equals(t, monitor.ScheduledEventKind, result.Kind) h.Equals(t, state, result.State) h.TimeWithinRange(t, result.StartTime, oneSecondAgo(), time.Now()) h.Equals(t, expScheduledEventEndTimeFmt, result.EndTime.String()) @@ -257,7 +258,7 @@ func TestMonitor_EndTimeParseFail(t *testing.T) { go func() { result := <-drainChan h.Equals(t, scheduledEventId, result.EventID) - h.Equals(t, scheduledevent.ScheduledEventKind, result.Kind) + h.Equals(t, monitor.ScheduledEventKind, result.Kind) h.Equals(t, scheduledEventState, result.State) h.TimeWithinRange(t, result.StartTime, oneSecondAgo(), time.Now()) h.Equals(t, expScheduledEventStartTimeFmt, result.EndTime.String()) diff --git a/pkg/monitor/spotitn/spot-itn-monitor.go b/pkg/monitor/spotitn/spot-itn-monitor.go index c755a165..061577e7 100644 --- a/pkg/monitor/spotitn/spot-itn-monitor.go +++ b/pkg/monitor/spotitn/spot-itn-monitor.go @@ -23,10 +23,8 @@ import ( "github.com/aws/aws-node-termination-handler/pkg/node" ) -const ( - // SpotITNKind is a const to define a Spot ITN kind of interruption event - SpotITNKind = "SPOT_ITN" -) +// SpotITNMonitorKind is a const to define this monitor kind +const SpotITNMonitorKind = "SPOT_ITN_MONITOR" // SpotInterruptionMonitor is a struct definition which facilitates monitoring of spot ITNs from IMDS type SpotInterruptionMonitor struct { @@ -52,15 +50,15 @@ func (m SpotInterruptionMonitor) Monitor() error { if err != nil { return err } - if interruptionEvent != nil && interruptionEvent.Kind == SpotITNKind { + if interruptionEvent != nil && interruptionEvent.Kind == monitor.SpotITNKind { m.InterruptionChan <- *interruptionEvent } return nil } -// Kind denotes the kind of event that is processed +// Kind denotes the kind of monitor func (m SpotInterruptionMonitor) Kind() string { - return SpotITNKind + return SpotITNMonitorKind } // checkForSpotInterruptionNotice Checks EC2 instance metadata for a spot interruption termination notice @@ -88,7 +86,8 @@ func (m SpotInterruptionMonitor) checkForSpotInterruptionNotice() (*monitor.Inte return &monitor.InterruptionEvent{ EventID: fmt.Sprintf("spot-itn-%x", hash.Sum(nil)), - Kind: SpotITNKind, + Kind: monitor.SpotITNKind, + Monitor: SpotITNMonitorKind, StartTime: interruptionTime, NodeName: nodeName, Description: fmt.Sprintf("Spot ITN received. Instance will be interrupted at %s \n", instanceAction.Time), diff --git a/pkg/monitor/spotitn/spot-itn-monitor_test.go b/pkg/monitor/spotitn/spot-itn-monitor_test.go index 73907ffe..afbd44b8 100644 --- a/pkg/monitor/spotitn/spot-itn-monitor_test.go +++ b/pkg/monitor/spotitn/spot-itn-monitor_test.go @@ -57,7 +57,8 @@ func TestMonitor_Success(t *testing.T) { go func() { result := <-drainChan - h.Equals(t, spotitn.SpotITNKind, result.Kind) + h.Equals(t, monitor.SpotITNKind, result.Kind) + h.Equals(t, spotitn.SpotITNMonitorKind, result.Monitor) h.Equals(t, expFormattedTime, result.StartTime.String()) h.Assert(t, strings.Contains(result.Description, startTime), "Expected description to contain: "+startTime+" but is actually: "+result.Description) diff --git a/pkg/monitor/sqsevent/asg-lifecycle-event.go b/pkg/monitor/sqsevent/asg-lifecycle-event.go index e5411cfb..5c088030 100644 --- a/pkg/monitor/sqsevent/asg-lifecycle-event.go +++ b/pkg/monitor/sqsevent/asg-lifecycle-event.go @@ -80,7 +80,8 @@ func (m SQSMonitor) asgTerminationToInterruptionEvent(event *EventBridgeEvent, m interruptionEvent := monitor.InterruptionEvent{ EventID: fmt.Sprintf("asg-lifecycle-term-%x", event.ID), - Kind: SQSTerminateKind, + Kind: monitor.ASGLifecycleKind, + Monitor: SQSMonitorKind, AutoScalingGroupName: lifecycleDetail.AutoScalingGroupName, StartTime: event.getTime(), NodeName: nodeInfo.Name, diff --git a/pkg/monitor/sqsevent/ec2-state-change-event.go b/pkg/monitor/sqsevent/ec2-state-change-event.go index 0eb98834..ba4f08c5 100644 --- a/pkg/monitor/sqsevent/ec2-state-change-event.go +++ b/pkg/monitor/sqsevent/ec2-state-change-event.go @@ -67,7 +67,8 @@ func (m SQSMonitor) ec2StateChangeToInterruptionEvent(event *EventBridgeEvent, m } interruptionEvent := monitor.InterruptionEvent{ EventID: fmt.Sprintf("ec2-state-change-event-%x", event.ID), - Kind: SQSTerminateKind, + Kind: monitor.StateChangeKind, + Monitor: SQSMonitorKind, StartTime: event.getTime(), NodeName: nodeInfo.Name, IsManaged: nodeInfo.IsManaged, diff --git a/pkg/monitor/sqsevent/rebalance-recommendation-event.go b/pkg/monitor/sqsevent/rebalance-recommendation-event.go index 75db706c..9b2b9f42 100644 --- a/pkg/monitor/sqsevent/rebalance-recommendation-event.go +++ b/pkg/monitor/sqsevent/rebalance-recommendation-event.go @@ -59,7 +59,8 @@ func (m SQSMonitor) rebalanceRecommendationToInterruptionEvent(event *EventBridg } interruptionEvent := monitor.InterruptionEvent{ EventID: fmt.Sprintf("rebalance-recommendation-event-%x", event.ID), - Kind: SQSTerminateKind, + Kind: monitor.RebalanceRecommendationKind, + Monitor: SQSMonitorKind, AutoScalingGroupName: nodeInfo.AsgName, StartTime: event.getTime(), NodeName: nodeInfo.Name, diff --git a/pkg/monitor/sqsevent/scheduled-change-event.go b/pkg/monitor/sqsevent/scheduled-change-event.go index 41adfbf4..e66f0453 100644 --- a/pkg/monitor/sqsevent/scheduled-change-event.go +++ b/pkg/monitor/sqsevent/scheduled-change-event.go @@ -95,7 +95,8 @@ func (m SQSMonitor) scheduledEventToInterruptionEvents(event *EventBridgeEvent, // Begin drain immediately for scheduled change events to avoid disruptions in cases such as degraded hardware interruptionEvent := monitor.InterruptionEvent{ EventID: fmt.Sprintf("aws-health-scheduled-change-event-%x", event.ID), - Kind: SQSTerminateKind, + Kind: monitor.ScheduledEventKind, + Monitor: SQSMonitorKind, AutoScalingGroupName: nodeInfo.AsgName, StartTime: time.Now(), NodeName: nodeInfo.Name, diff --git a/pkg/monitor/sqsevent/spot-itn-event.go b/pkg/monitor/sqsevent/spot-itn-event.go index 97e8d138..25aac324 100644 --- a/pkg/monitor/sqsevent/spot-itn-event.go +++ b/pkg/monitor/sqsevent/spot-itn-event.go @@ -61,7 +61,8 @@ func (m SQSMonitor) spotITNTerminationToInterruptionEvent(event *EventBridgeEven } interruptionEvent := monitor.InterruptionEvent{ EventID: fmt.Sprintf("spot-itn-event-%x", event.ID), - Kind: SQSTerminateKind, + Kind: monitor.SpotITNKind, + Monitor: SQSMonitorKind, AutoScalingGroupName: nodeInfo.AsgName, StartTime: event.getTime(), NodeName: nodeInfo.Name, diff --git a/pkg/monitor/sqsevent/sqs-monitor.go b/pkg/monitor/sqsevent/sqs-monitor.go index b2da9e98..dc99b719 100644 --- a/pkg/monitor/sqsevent/sqs-monitor.go +++ b/pkg/monitor/sqsevent/sqs-monitor.go @@ -34,8 +34,8 @@ import ( ) const ( - // SQSTerminateKind is a const to define an SQS termination kind of interruption event - SQSTerminateKind = "SQS_TERMINATE" + // SQSMonitorKind is a const to define this monitor kind + SQSMonitorKind = "SQS_MONITOR" // ASGTagName is the name of the instance tag whose value is the AutoScaling group name ASGTagName = "aws:autoscaling:groupName" ) @@ -71,9 +71,9 @@ func (s skip) Unwrap() error { return s.err } -// Kind denotes the kind of event that is processed +// Kind denotes the kind of monitor func (m SQSMonitor) Kind() string { - return SQSTerminateKind + return SQSMonitorKind } // Monitor continuously monitors SQS for events and coordinates processing of the events @@ -219,9 +219,9 @@ func (m SQSMonitor) processInterruptionEvents(interruptionEventWrappers []Interr log.Debug().Str("instance-id", eventWrapper.InterruptionEvent.InstanceID).Msg("dropping interruption event for unmanaged node") dropMessageSuggestionCount++ - case eventWrapper.InterruptionEvent.Kind == SQSTerminateKind: - // Successfully processed SQS message into a SQSTerminateKind interruption event - log.Debug().Msgf("Sending %s interruption event to the interruption channel", SQSTerminateKind) + case eventWrapper.InterruptionEvent.Monitor == SQSMonitorKind: + // Successfully processed SQS message into a eventWrapper.InterruptionEvent.Kind interruption event + log.Debug().Msgf("Sending %s interruption event to the interruption channel", eventWrapper.InterruptionEvent.Kind) m.InterruptionChan <- *eventWrapper.InterruptionEvent default: diff --git a/pkg/monitor/sqsevent/sqs-monitor_test.go b/pkg/monitor/sqsevent/sqs-monitor_test.go index d6b5e6fa..61199ed2 100644 --- a/pkg/monitor/sqsevent/sqs-monitor_test.go +++ b/pkg/monitor/sqsevent/sqs-monitor_test.go @@ -121,13 +121,15 @@ var rebalanceRecommendationEvent = sqsevent.EventBridgeEvent{ }`), } -func TestKind(t *testing.T) { - h.Assert(t, sqsevent.SQSMonitor{}.Kind() == sqsevent.SQSTerminateKind, "SQSMonitor kind should return the kind constant for the event") +func TestMonitorKind(t *testing.T) { + h.Assert(t, sqsevent.SQSMonitor{}.Kind() == sqsevent.SQSMonitorKind, "SQSMonitor kind should return the kind constant for the monitor") } func TestMonitor_EventBridgeSuccess(t *testing.T) { spotItnEventNoTime := spotItnEvent spotItnEventNoTime.Time = "" + i := 0 + expectedResultKinds := []string{monitor.SpotITNKind, monitor.ASGLifecycleKind, monitor.SpotITNKind, monitor.RebalanceRecommendationKind} for _, event := range []sqsevent.EventBridgeEvent{spotItnEvent, asgLifecycleEvent, spotItnEventNoTime, rebalanceRecommendationEvent} { msg, err := getSQSMessageFromEvent(event) h.Ok(t, err) @@ -159,7 +161,8 @@ func TestMonitor_EventBridgeSuccess(t *testing.T) { select { case result := <-drainChan: - h.Equals(t, sqsevent.SQSTerminateKind, result.Kind) + h.Equals(t, expectedResultKinds[i], result.Kind) + h.Equals(t, sqsevent.SQSMonitorKind, result.Monitor) h.Equals(t, result.NodeName, dnsNodeName) h.Assert(t, result.PostDrainTask != nil, "PostDrainTask should have been set") h.Assert(t, result.PreDrainTask != nil, "PreDrainTask should have been set") @@ -168,7 +171,7 @@ func TestMonitor_EventBridgeSuccess(t *testing.T) { default: h.Ok(t, fmt.Errorf("Expected an event to be generated")) } - + i++ } } @@ -243,7 +246,8 @@ func TestMonitor_AsgDirectToSqsSuccess(t *testing.T) { select { case result := <-drainChan: - h.Equals(t, sqsevent.SQSTerminateKind, result.Kind) + h.Equals(t, monitor.ASGLifecycleKind, result.Kind) + h.Equals(t, sqsevent.SQSMonitorKind, result.Monitor) h.Equals(t, result.NodeName, dnsNodeName) h.Assert(t, result.PostDrainTask != nil, "PostDrainTask should have been set") h.Assert(t, result.PreDrainTask != nil, "PreDrainTask should have been set") @@ -330,16 +334,20 @@ func TestMonitor_DrainTasks(t *testing.T) { err := sqsMonitor.Monitor() h.Ok(t, err) + i := 0 + expectedResultKinds := []string{monitor.SpotITNKind, monitor.ASGLifecycleKind, monitor.RebalanceRecommendationKind} for _, event := range testEvents { t.Run(event.DetailType, func(st *testing.T) { result := <-drainChan - h.Equals(st, sqsevent.SQSTerminateKind, result.Kind) + h.Equals(st, expectedResultKinds[i], result.Kind) + h.Equals(st, sqsevent.SQSMonitorKind, result.Monitor) h.Equals(st, result.NodeName, dnsNodeName) h.Assert(st, result.PostDrainTask != nil, "PostDrainTask should have been set") h.Assert(st, result.PreDrainTask != nil, "PreDrainTask should have been set") err := result.PostDrainTask(result, node.Node{}) h.Ok(st, err) }) + i++ } } @@ -378,7 +386,8 @@ func TestMonitor_DrainTasks_Delay(t *testing.T) { t.Run(asgLifecycleEvent.DetailType, func(st *testing.T) { result := <-drainChan - h.Equals(st, sqsevent.SQSTerminateKind, result.Kind) + h.Equals(st, monitor.ASGLifecycleKind, result.Kind) + h.Equals(st, sqsevent.SQSMonitorKind, result.Monitor) h.Equals(st, result.NodeName, dnsNodeName) h.Assert(st, result.PostDrainTask != nil, "PostDrainTask should have been set") h.Assert(st, result.PreDrainTask != nil, "PreDrainTask should have been set") @@ -425,12 +434,15 @@ func TestMonitor_DrainTasks_Errors(t *testing.T) { h.Ok(t, err) count := 0 + i := 0 + expectedResultKinds := []string{monitor.SpotITNKind, monitor.ASGLifecycleKind, monitor.RebalanceRecommendationKind} done := false for !done { select { case result := <-drainChan: count++ - h.Equals(t, sqsevent.SQSTerminateKind, result.Kind) + h.Equals(t, expectedResultKinds[i], result.Kind) + h.Equals(t, sqsevent.SQSMonitorKind, result.Monitor) h.Equals(t, result.NodeName, dnsNodeName) h.Assert(t, result.PostDrainTask != nil, "PostDrainTask should have been set") h.Assert(t, result.PreDrainTask != nil, "PreDrainTask should have been set") @@ -439,6 +451,7 @@ func TestMonitor_DrainTasks_Errors(t *testing.T) { default: done = true } + i++ } h.Equals(t, count, 3) } @@ -479,7 +492,8 @@ func TestMonitor_DrainTasksASGFailure(t *testing.T) { select { case result := <-drainChan: - h.Equals(t, sqsevent.SQSTerminateKind, result.Kind) + h.Equals(t, monitor.ASGLifecycleKind, result.Kind) + h.Equals(t, sqsevent.SQSMonitorKind, result.Monitor) h.Equals(t, result.NodeName, dnsNodeName) h.Assert(t, result.PostDrainTask != nil, "PostDrainTask should have been set") h.Assert(t, result.PreDrainTask != nil, "PreDrainTask should have been set") diff --git a/pkg/monitor/types.go b/pkg/monitor/types.go index 6e5a5787..94a65481 100644 --- a/pkg/monitor/types.go +++ b/pkg/monitor/types.go @@ -20,6 +20,19 @@ import ( "github.com/aws/aws-node-termination-handler/pkg/node" ) +const ( + // SpotITNKind is a const to define a Spot ITN kind of interruption event + SpotITNKind = "SPOT_ITN" + // ScheduledEventKind is a const to define a scheduled event kind of interruption event + ScheduledEventKind = "SCHEDULED_EVENT" + // RebalanceRecommendationKind is a const to define a Rebalance Recommendation kind of interruption event + RebalanceRecommendationKind = "REBALANCE_RECOMMENDATION" + // StateChangeKind is a const to define an EC2 State Change kind of interruption event + StateChangeKind = "STATE_CHANGE" + // ASGLifecycleKind is a const to define an ASG Lifecycle kind of interruption event + ASGLifecycleKind = "ASG_LIFECYCLE" +) + // DrainTask defines a task to be run when draining a node type DrainTask func(InterruptionEvent, node.Node) error @@ -27,6 +40,7 @@ type DrainTask func(InterruptionEvent, node.Node) error type InterruptionEvent struct { EventID string Kind string + Monitor string Description string State string AutoScalingGroupName string diff --git a/pkg/observability/k8s-events.go b/pkg/observability/k8s-events.go index dd44b122..00a239b9 100644 --- a/pkg/observability/k8s-events.go +++ b/pkg/observability/k8s-events.go @@ -19,10 +19,7 @@ import ( "strings" "github.com/aws/aws-node-termination-handler/pkg/ec2metadata" - "github.com/aws/aws-node-termination-handler/pkg/monitor/rebalancerecommendation" - "github.com/aws/aws-node-termination-handler/pkg/monitor/scheduledevent" - "github.com/aws/aws-node-termination-handler/pkg/monitor/spotitn" - "github.com/aws/aws-node-termination-handler/pkg/monitor/sqsevent" + "github.com/aws/aws-node-termination-handler/pkg/monitor" "github.com/rs/zerolog/log" corev1 "k8s.io/api/core/v1" kErr "k8s.io/apimachinery/pkg/api/errors" @@ -66,8 +63,9 @@ const ( const ( scheduledEventReason = "ScheduledEvent" spotITNReason = "SpotInterruption" - sqsTerminateReason = "SQSTermination" rebalanceRecommendationReason = "RebalanceRecommendation" + stateChangeReason = "StateChange" + asgLifecycleReason = "ASGLifecycle" unknownReason = "UnknownInterruption" ) @@ -168,14 +166,16 @@ func (r K8sEventRecorder) Emit(nodeName string, eventType, eventReason, eventMsg // GetReasonForKind returns a Kubernetes event reason for the given interruption event kind func GetReasonForKind(kind string) string { switch kind { - case scheduledevent.ScheduledEventKind: + case monitor.ScheduledEventKind: return scheduledEventReason - case spotitn.SpotITNKind: + case monitor.SpotITNKind: return spotITNReason - case sqsevent.SQSTerminateKind: - return sqsTerminateReason - case rebalancerecommendation.RebalanceRecommendationKind: + case monitor.RebalanceRecommendationKind: return rebalanceRecommendationReason + case monitor.StateChangeKind: + return stateChangeReason + case monitor.ASGLifecycleKind: + return asgLifecycleReason default: return unknownReason }