func()

in pkg/monitor/sqsevent/asg-lifecycle-event.go [170:199]


func (m SQSMonitor) SendHeartbeats(heartbeatInterval int, heartbeatUntil int, lifecycleDetail *LifecycleDetail, stopCh <-chan struct{}) {
	ticker := time.NewTicker(time.Duration(heartbeatInterval) * time.Second)
	defer ticker.Stop()
	timeout := time.After(time.Duration(heartbeatUntil) * time.Second)

	for {
		select {
		case <-stopCh:
			log.Info().Str("asgName", lifecycleDetail.AutoScalingGroupName).
				Str("lifecycleHookName", lifecycleDetail.LifecycleHookName).
				Str("lifecycleActionToken", lifecycleDetail.LifecycleActionToken).
				Str("instanceID", lifecycleDetail.EC2InstanceID).
				Msg("Successfully cordoned and drained the node, stopping heartbeat")
			return
		case <-ticker.C:
			err := m.recordLifecycleActionHeartbeat(lifecycleDetail)
			if err != nil {
				log.Err(err).Msg("invalid heartbeat target, stopping heartbeat")
				return
			}
		case <-timeout:
			log.Info().Str("asgName", lifecycleDetail.AutoScalingGroupName).
				Str("lifecycleHookName", lifecycleDetail.LifecycleHookName).
				Str("lifecycleActionToken", lifecycleDetail.LifecycleActionToken).
				Str("instanceID", lifecycleDetail.EC2InstanceID).
				Msg("Heartbeat deadline exceeded, stopping heartbeat")
			return
		}
	}
}