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) ) )
Esempio n. 3
0
    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
Esempio n. 4
0
    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