Exemple #1
0
    def driver_get_all(self, ctx, driver_names, action, retry_on_fault=False):
        """Call get_all for specified drivers"""
        LOG.debug("run drivers get_all: %s %s", driver_names, action)
        drivers = utils.get_drivers_by_name(self.conf, driver_names)
        fault_interval = self.conf.datasources.snapshot_interval_on_fault

        def run_driver(driver):
            ok = True
            try:
                return ok, driver.get_all(action)
            except Exception as e:
                LOG.exception('driver failed %s', e)
                return not ok, driver

        result = list(self.pool.map(run_driver, drivers))
        failed_drivers = [driver for success, driver in result if not success]
        if failed_drivers and retry_on_fault:
            LOG.info('retrying failed drivers in %s seconds', fault_interval)
            time.sleep(fault_interval)
            result.extend(list(self.pool.map(run_driver, failed_drivers)))

        events = [e for success, events in result if success for e in events]
        if self.async_persistor:
            self.async_persistor(events)
        LOG.debug("run drivers get_all done.")
        return events
Exemple #2
0
 def init(self):
     driver_names = utils.get_push_drivers_names(self._conf)
     push_drivers = utils.get_drivers_by_name(self._conf, driver_names)
     for driver in push_drivers:
         for event in driver.get_event_types():
             self._enrich_event_methods[event].append(driver.enrich_event)
     return self
Exemple #3
0
 def test_datasource_update_method_push(self):
     driver_names = ds_utils.get_push_drivers_names()
     push_drivers = ds_utils.get_drivers_by_name(driver_names)
     self.assertSequenceEqual({utils.import_class(
         self.conf[NOVA_INSTANCE_DATASOURCE].driver), utils.import_class(
         self.conf[ZABBIX_DATASOURCE_PUSH].driver)},
         set(d.__class__ for d in push_drivers))
Exemple #4
0
 def driver_get_changes(self, ctx, driver_name):
     """Call get_changes for a specific driver"""
     LOG.debug("run driver get_changes: %s", driver_name)
     drivers = utils.get_drivers_by_name(self.conf, [driver_name])
     events = drivers[0].get_changes(DatasourceAction.UPDATE)
     LOG.debug("run driver get_changes: %s done.", driver_name)
     return events
Exemple #5
0
    def get_all(self, driver_name, action):
        try:
            LOCK_BY_DRIVER.acquire(driver_name)
            driver = utils.get_drivers_by_name([driver_name])[0]
            LOG.info("run driver get_all: %s", driver_name)
            now = format_utcnow()
            events = driver.get_all(action)
            count = self.process_output_func(events)
            LOG.info("run driver get_all: %s done (%s events)", driver_name,
                     count)

            if driver.should_delete_outdated_entities():
                vertices_to_delete = \
                    self._find_vertices_to_delete(driver_name, now)
                if vertices_to_delete:
                    delete_events = self._to_events(vertices_to_delete)
                    count_deleted = self.process_output_func(delete_events)
                    LOG.info(
                        "run driver delete outdated vertices: %s done "
                        "(%s events)", driver_name, count_deleted)
                    count += count_deleted
            return count
        except Exception:
            LOG.exception("run driver get_all: %s Failed", driver_name)
        finally:
            LOCK_BY_DRIVER.release(driver_name)
        return 0
Exemple #6
0
    def _create_callbacks_by_events_dict(cls, conf):
        ret = defaultdict(list)
        driver_names = utils.get_push_drivers_names(conf)
        push_drivers = utils.get_drivers_by_name(conf, driver_names)

        for driver in push_drivers:
            for event in driver.get_event_types():
                ret[event].append(driver.enrich_event)

        return ret
Exemple #7
0
 def get_all(self, driver_name, action):
     try:
         LOCK_BY_DRIVER.acquire(driver_name)
         driver = utils.get_drivers_by_name(self.conf, [driver_name])[0]
         LOG.info("run driver get_all: %s", driver_name)
         events = driver.get_all(action)
         count = self.process_output_func(events)
         LOG.info("run driver get_all: %s done (%s events)", driver_name,
                  count)
         return count
     except Exception:
         LOG.exception("run driver get_all: %s Failed", driver_name)
     finally:
         LOCK_BY_DRIVER.release(driver_name)
     return 0
Exemple #8
0
 def get_changes(self, driver_name):
     if not LOCK_BY_DRIVER.acquire(driver_name, blocking=False):
         LOG.info("%s get_changes canceled during get_all execution",
                  driver_name)
         return 0
     try:
         driver = utils.get_drivers_by_name(self.conf, [driver_name])[0]
         LOG.info("run driver get_changes: %s", driver_name)
         events = driver.get_changes(DatasourceAction.UPDATE)
         count = self.process_output_func(events)
         LOG.info("run driver get_changes: %s done (%s events)",
                  driver_name, count)
         return count
     except Exception:
         LOG.exception("run driver get_changes: %s Failed", driver_name)
     finally:
         LOCK_BY_DRIVER.release(driver_name)
     return 0