示例#1
0
class ItemProcessingController(object):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, shutdown_event, items, database, sender):
        self._database = database
        self._items = items
        self._sender = sender
        self._shutdown_event = shutdown_event
        self._item = None
        self._process_date = None
        self._item_processor = None
        self._update_interval = None
        self._logger = get_logger()

    #----------------------------------------------------------------------
    def start(self):
        self._setup_update_interval()
        self._item_processor = ItemProcessor(self._items, self._database)
        self._process_until_shutdown()

    #----------------------------------------------------------------------
    def _setup_update_interval(self):
        minimum_update_interval = 3600
        for item in self._items:
            interval = item.get_update_interval()
            minimum_update_interval = min(minimum_update_interval, interval)

        self._update_interval = minimum_update_interval

    #----------------------------------------------------------------------
    def _process_until_shutdown(self):
        while not self._shutdown_event.isSet():
            self._store_process_date()
            # process items and collect new values
            self._item_processor.process()
            # send previously collected item values to the Zabbix server
            self._sender.send(process_date=self._process_date)
            self._sleep()

    #----------------------------------------------------------------------
    def _store_process_date(self):
        self._process_date = time()

    #----------------------------------------------------------------------
    def _sleep(self):
        next_processdate = self._process_date + self._update_interval
        sleep_seconds = next_processdate - time()
        self._logger.debug('Sleep for %s seconds' % (sleep_seconds))
        self._shutdown_event.wait(sleep_seconds)
示例#2
0
 def start(self):
     self._setup_update_interval()
     self._item_processor = ItemProcessor(self._items, self._database)
     self._process_until_shutdown()