in pkg/monitor/scheduledevent/scheduled-event-monitor.go [78:115]
func (m ScheduledEventMonitor) checkForScheduledEvents() ([]monitor.InterruptionEvent, error) {
scheduledEvents, err := m.IMDS.GetScheduledMaintenanceEvents()
if err != nil {
return nil, fmt.Errorf("Unable to parse metadata response: %w", err)
}
events := make([]monitor.InterruptionEvent, 0)
for _, scheduledEvent := range scheduledEvents {
var preDrainFunc monitor.DrainTask
if isRestartEvent(scheduledEvent.Code) && !isStateCanceledOrCompleted(scheduledEvent.State) {
preDrainFunc = uncordonAfterRebootPreDrain
}
notBefore, err := time.Parse(scheduledEventDateFormat, scheduledEvent.NotBefore)
if err != nil {
return nil, fmt.Errorf("Unable to parse scheduled event start time: %w", err)
}
notAfter := notBefore
if len(scheduledEvent.NotAfter) > 0 {
notAfter, err = time.Parse(scheduledEventDateFormat, scheduledEvent.NotAfter)
if err != nil {
notAfter = notBefore
log.Err(err).Msg("Unable to parse scheduled event end time, continuing")
}
}
events = append(events, monitor.InterruptionEvent{
EventID: scheduledEvent.EventID,
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,
StartTime: time.Now(),
EndTime: notAfter,
PreDrainTask: preDrainFunc,
})
}
return events, nil
}