func()

in pkg/monitor/sqsevent/sqs-monitor.go [159:189]


func (m SQSMonitor) processLifecycleEventFromASG(message *sqs.Message) (EventBridgeEvent, error) {
	log.Debug().Interface("message", message).Msg("processing lifecycle event from ASG")
	eventBridgeEvent := EventBridgeEvent{}

	if message == nil {
		return eventBridgeEvent, fmt.Errorf("ASG event message is nil")
	}
	lifecycleEvent, err := parseLifecycleEvent(*message.Body)

	switch {
	case err != nil:
		return eventBridgeEvent, fmt.Errorf("parsing lifecycle event messsage from ASG: %w", err)

	case lifecycleEvent.Event == TEST_NOTIFICATION || lifecycleEvent.LifecycleTransition == TEST_NOTIFICATION:
		err := fmt.Errorf("message is a test notification")
		if errs := m.deleteMessages([]*sqs.Message{message}); errs != nil {
			err = multierr.Append(err, errs[0])
		}
		return eventBridgeEvent, skip{err}

	case lifecycleEvent.LifecycleTransition != ASGTerminatingLifecycleTransition &&
		lifecycleEvent.LifecycleTransition != ASGLaunchingLifecycleTransition:
		return eventBridgeEvent, fmt.Errorf("lifecycle transition must be %s or %s. Got %s", ASGTerminatingLifecycleTransition, ASGLaunchingLifecycleTransition, lifecycleEvent.LifecycleTransition)
	}

	eventBridgeEvent.Source = "aws.autoscaling"
	eventBridgeEvent.Time = lifecycleEvent.Time
	eventBridgeEvent.ID = lifecycleEvent.RequestID
	eventBridgeEvent.Detail, err = json.Marshal(lifecycleEvent)
	return eventBridgeEvent, err
}