def test_choose_interval(self): start = dt.datetime(2013, 5, 12, 8, 30, 50) intervals = ('PT5M', 'PT30S', 'PT12H') # before event start self.assertEqual(-1, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 8, 22, 0))) # first interval (5 minutes) self.assertEqual(0, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 8, 30, 50))) self.assertEqual(0, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 8, 30, 51))) # second interval (30 seconds) self.assertEqual(1, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 8, 35, 50))) self.assertEqual(1, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 8, 36, 19))) # third interval (12 hours) self.assertEqual(2, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 8, 36, 20))) self.assertEqual(2, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 20, 36, 19))) # after the last interval self.assertEqual(None, schedule.choose_interval(start, intervals, dt.datetime(2013, 5, 12, 20, 36, 20)))
def test_choose_interval(self): start = dt.datetime(2013,5,12,8,30,50) intervals = ('PT5M','PT30S','PT12H') # before event start self.assertEqual(-1, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,8,22,0) ) ) # first interval (5 minutes) self.assertEqual(0, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,8,30,50) ) ) self.assertEqual(0, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,8,30,51) ) ) # second interval (30 seconds) self.assertEqual(1, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,8,35,50) ) ) self.assertEqual(1, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,8,36,19) ) ) # third interval (12 hours) self.assertEqual(2, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,8,36,20) ) ) self.assertEqual(2, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,20,36,19) ) ) # after the last interval self.assertEqual(None, schedule.choose_interval(start, intervals, dt.datetime(2013,5,12,20,36,20) ) )
def _calculate_current_event_status(self, events): ''' returns a 3-tuple of (current_signal_level, current_event_id, remove_events=[]) ''' highest_signal_val = 0 current_event_id = None remove_events = [] # to collect expired events for e in events: try: e_id = event.get_event_id(e, self.event_handler.ns_map) e_mod_num = event.get_mod_number(e, self.event_handler.ns_map) e_status = event.get_status(e, self.event_handler.ns_map) if not self.event_handler.check_target_info(e): logging.debug("Ignoring event %s - no target match", e_id) continue event_start_dttm = event.get_active_period_start(e, self.event_handler.ns_map) signals = event.get_signals(e, self.event_handler.ns_map) if signals is None: logging.debug("Ignoring event %s - no valid signals", e_id) continue logging.debug("All signals: %r", signals) intervals = [s[0] for s in signals] current_interval = schedule.choose_interval( event_start_dttm, intervals ) if current_interval is None: logging.debug("Event %s(%d) has ended", e_id, e_mod_num) remove_events.append(e_id) continue if current_interval < 0: logging.debug("Event %s(%d) has not started yet.", e_id, e_mod_num) continue logging.debug('---------- chose interval %d', current_interval) _, interval_uid, signal_level = signals[current_interval] # signal_level = event.get_current_signal_value(e, self.event_handler.ns_map) logging.debug('Control loop: Evt ID: %s(%s); Interval: %s; Current Signal: %s', e_id, e_mod_num, interval_uid, signal_level ) signal_level = float(signal_level) if signal_level is not None else 0 if signal_level > highest_signal_val: highest_signal_val = signal_level current_event_id = e_id except Exception as e: logging.exception("Error parsing event: %s", e) return highest_signal_val, current_event_id, remove_events
def _calculate_current_event_status(self, events): ''' returns a 3-tuple of (current_signal_level, current_event_id, remove_events=[]) ''' highest_signal_val = 0 current_event_id = None remove_events = [] # to collect expired events for e in events: try: e_id = event.get_event_id(e, self.event_handler.ns_map) e_mod_num = event.get_mod_number(e, self.event_handler.ns_map) e_status = event.get_status(e, self.event_handler.ns_map) if not self.event_handler.check_target_info(e): logging.debug("Ignoring event %s - no target match", e_id) continue event_start_dttm = event.get_active_period_start( e, self.event_handler.ns_map) signals = event.get_signals(e, self.event_handler.ns_map) if signals is None: logging.debug("Ignoring event %s - no valid signals", e_id) continue logging.debug("All signals: %r", signals) intervals = [s[0] for s in signals] current_interval = schedule.choose_interval( event_start_dttm, intervals) if current_interval is None: logging.debug("Event %s(%d) has ended", e_id, e_mod_num) remove_events.append(e_id) continue if current_interval < 0: logging.debug("Event %s(%d) has not started yet.", e_id, e_mod_num) continue logging.debug('---------- chose interval %d', current_interval) _, interval_uid, signal_level = signals[current_interval] # signal_level = event.get_current_signal_value(e, self.event_handler.ns_map) logging.debug( 'Control loop: Evt ID: %s(%s); Interval: %s; Current Signal: %s', e_id, e_mod_num, interval_uid, signal_level) signal_level = float( signal_level) if signal_level is not None else 0 if signal_level > highest_signal_val: highest_signal_val = signal_level current_event_id = e_id except Exception as e: logging.exception("Error parsing event: %s", e) return highest_signal_val, current_event_id, remove_events