def test_invalid_content_type(self): packs_base_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'resources/packs/') loader = ContentPackLoader() try: loader.get_content(base_dir=packs_base_path, content_type='stuff') self.fail('Asking for invalid content should have thrown.') except: pass
def test_invalid_content_type(self): packs_base_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'resources/packs/') loader = ContentPackLoader() try: loader.get_content(base_dir=packs_base_path, content_type='stuff') self.fail('Asking for invalid content should have thrown.') except: pass
def _get_user_sensors(): sensors_dict = defaultdict(list) pack_loader = ContentPackLoader() sensor_loader = SensorLoader() packs = pack_loader.get_content(base_dir=cfg.CONF.content.packs_base_path, content_type='sensors') for pack, sensor_dir in six.iteritems(packs): try: LOG.info('Loading sensors from pack: %s, dir: %s', pack, sensor_dir) if _is_requirements_ok(sensor_dir): base_dir = os.path.realpath(sensor_dir) pack_sensors = sensor_loader.get_sensors(base_dir=base_dir) # Include content pack name on the sensor class # TODO: This is nasty pack_sensors_augmented = defaultdict(list) for filename, sensors in pack_sensors.iteritems(): for sensor in sensors: sensor.pack = pack pack_sensors_augmented[filename].append(sensor) sensors_dict.update(pack_sensors_augmented) else: LOG.warning('Not registering sensors in sensor_dir: %s.', sensor_dir) except: LOG.exception('Failed loading sensors from dir: %s' % sensor_dir) return sensors_dict
def test_get_sensors(self): packs_base_path = os.path.join(RESOURCES_DIR, "packs/") loader = ContentPackLoader() pack_sensors = loader.get_content( base_dirs=[packs_base_path], content_type="sensors" ) self.assertIsNotNone(pack_sensors.get("pack1", None))
def _get_user_sensors(): sensors_dict = defaultdict(list) pack_loader = ContentPackLoader() sensor_loader = SensorLoader() packs = pack_loader.get_content(base_dir=cfg.CONF.content.packs_base_path, content_type='sensors') for pack, sensor_dir in six.iteritems(packs): try: LOG.info('Loading sensors from pack: %s, dir: %s', pack, sensor_dir) if _is_requirements_ok(sensor_dir): base_dir = os.path.realpath(sensor_dir) pack_sensors = sensor_loader.get_sensors(base_dir=base_dir) # Include content pack name on the sensor class # TODO: This is nasty pack_sensors_augmented = defaultdict(list) for filename, sensors in pack_sensors.iteritems(): for sensor in sensors: sensor.pack = pack pack_sensors_augmented[filename].append(sensor) sensors_dict.update(pack_sensors_augmented) else: LOG.warning('Not registering sensors in sensor_dir: %s.', sensor_dir) except: LOG.exception('Failed loading sensors from dir: %s' % sensor_dir) return sensors_dict
def _get_api_models_from_disk(artifact_type, pack_dir=None): loader = ContentPackLoader() artifacts = None if pack_dir: artifacts_dir = loader.get_content_from_pack(pack_dir, artifact_type) pack_name = os.path.basename(os.path.normpath(pack_dir)) artifacts = {pack_name: artifacts_dir} else: packs_dirs = content_utils.get_packs_base_paths() artifacts = loader.get_content(packs_dirs, artifact_type) artifacts_dict = {} for pack_name, pack_path in artifacts.items(): artifacts_paths = registrar.get_resources_from_pack(pack_path) for artifact_path in artifacts_paths: artifact = meta_loader.load(artifact_path) if artifact_type == "sensors": sensors_dir = os.path.dirname(artifact_path) sensor_file_path = os.path.join(sensors_dir, artifact["entry_point"]) artifact["artifact_uri"] = "file://" + sensor_file_path name = artifact.get("name", None) or artifact.get("class_name", None) if not artifact.get("pack", None): artifact["pack"] = pack_name ref = ResourceReference.to_string_reference(name=name, pack=pack_name) API_MODEL = API_MODELS_ARTIFACT_TYPES[artifact_type] # Following conversions are required because we add some fields with # default values in db model. If we don't do these conversions, # we'll see a unnecessary diff for those fields. artifact_api = API_MODEL(**artifact) artifact_db = API_MODEL.to_model(artifact_api) artifact_api = API_MODEL.from_model(artifact_db) artifacts_dict[ref] = artifact_api return artifacts_dict
def test_get_sensors(self): packs_base_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'resources/packs/') loader = ContentPackLoader() pack_sensors = loader.get_content(base_dir=packs_base_path, content_type='sensors') self.assertTrue(pack_sensors.get('pack1', None) is not None)
def register_actions_from_packs(self, base_dir): pack_loader = ContentPackLoader() dirs = pack_loader.get_content(base_dir=base_dir, content_type='actions') for pack, actions_dir in six.iteritems(dirs): try: actions = self._get_actions_from_pack(actions_dir) self._register_actions_from_pack(pack, actions) except: LOG.exception('Failed registering all actions from pack: %s', actions_dir)
def register_actions_from_packs(self, base_dir): pack_loader = ContentPackLoader() dirs = pack_loader.get_content(base_dir=base_dir, content_type='actions') for pack, actions_dir in six.iteritems(dirs): try: actions = self._get_actions_from_pack(actions_dir) self._register_actions_from_pack(pack, actions) except: LOG.exception('Failed registering all actions from pack: %s', actions_dir)
def register_rules_from_packs(self, base_dir): pack_loader = ContentPackLoader() dirs = pack_loader.get_content(base_dir=base_dir, content_type='rules') for pack, rules_dir in six.iteritems(dirs): try: LOG.info('Registering rules from pack: %s', pack) rules = self._get_rules_from_pack(rules_dir) self._register_rules_from_pack(pack, rules) except: LOG.exception('Failed registering all rules from pack: %s', rules_dir)
def register_rules_from_packs(self, base_dir): pack_loader = ContentPackLoader() dirs = pack_loader.get_content(base_dir=base_dir, content_type='rules') for pack, rules_dir in six.iteritems(dirs): try: LOG.info('Registering rules from pack: %s', pack) rules = self._get_rules_from_pack(rules_dir) self._register_rules_from_pack(pack, rules) except: LOG.exception('Failed registering all rules from pack: %s', rules_dir)
def register_sensors_from_packs(self, base_dir): pack_loader = ContentPackLoader() dirs = pack_loader.get_content(base_dir=base_dir, content_type='sensors') # Add system sensors to the core pack dirs['core'] = {} dirs['core'] = SYSTEM_SENSORS_PATH for pack, sensors_dir in six.iteritems(dirs): try: LOG.info('Registering sensors from pack: %s', pack) sensors = self._get_sensors_from_pack(sensors_dir) self._register_sensors_from_pack(pack=pack, sensors=sensors) except Exception as e: LOG.exception('Failed registering all sensors from pack "%s": %s', sensors_dir, str(e))
def test_get_content_multiple_directories(self): packs_base_path_1 = os.path.join(RESOURCES_DIR, 'packs/') packs_base_path_2 = os.path.join(RESOURCES_DIR, 'packs2/') base_dirs = [packs_base_path_1, packs_base_path_2] LOG.warning = Mock() loader = ContentPackLoader() sensors = loader.get_content(base_dirs=base_dirs, content_type='sensors') self.assertTrue('pack1' in sensors) # from packs/ self.assertTrue('pack3' in sensors) # from packs2/ # Assert that a warning is emitted when a duplicated pack is found expected_msg = ('Pack "pack1" already found in ' '"%s/packs/", ignoring content from ' '"%s/packs2/"' % (RESOURCES_DIR, RESOURCES_DIR)) LOG.warning.assert_called_once_with(expected_msg)
def test_get_content_multiple_directories(self): packs_base_path_1 = os.path.join(RESOURCES_DIR, 'packs/') packs_base_path_2 = os.path.join(RESOURCES_DIR, 'packs2/') base_dirs = [packs_base_path_1, packs_base_path_2] LOG.warning = Mock() loader = ContentPackLoader() sensors = loader.get_content(base_dirs=base_dirs, content_type='sensors') self.assertTrue('pack1' in sensors) # from packs/ self.assertTrue('pack3' in sensors) # from packs2/ # Assert that a warning is emitted when a duplicated pack is found expected_msg = ('Pack "pack1" already found in ' '"%s/packs/", ignoring content from ' '"%s/packs2/"' % (RESOURCES_DIR, RESOURCES_DIR)) LOG.warning.assert_called_once_with(expected_msg)
def _get_api_models_from_disk(artifact_type, pack_dir=None): loader = ContentPackLoader() artifacts = None if pack_dir: artifacts_dir = loader.get_content_from_pack(pack_dir, artifact_type) pack_name = os.path.basename(os.path.normpath(pack_dir)) artifacts = {pack_name: artifacts_dir} else: packs_dirs = content_utils.get_packs_base_paths() artifacts = loader.get_content(packs_dirs, artifact_type) artifacts_dict = {} for pack_name, pack_path in artifacts.items(): artifacts_paths = registrar.get_resources_from_pack(pack_path) for artifact_path in artifacts_paths: artifact = meta_loader.load(artifact_path) if artifact_type == 'sensors': sensors_dir = os.path.dirname(artifact_path) sensor_file_path = os.path.join(sensors_dir, artifact['entry_point']) artifact['artifact_uri'] = 'file://' + sensor_file_path name = artifact.get('name', None) or artifact.get( 'class_name', None) if not artifact.get('pack', None): artifact['pack'] = pack_name ref = ResourceReference.to_string_reference(name=name, pack=pack_name) API_MODEL = API_MODELS_ARTIFACT_TYPES[artifact_type] # Following conversions are required because we add some fields with # default values in db model. If we don't do these conversions, # we'll see a unnecessary diff for those fields. artifact_api = API_MODEL(**artifact) artifact_db = API_MODEL.to_model(artifact_api) artifact_api = API_MODEL.from_model(artifact_db) artifacts_dict[ref] = artifact_api return artifacts_dict
def test_get_sensors(self): packs_base_path = os.path.join(RESOURCES_DIR, 'packs/') loader = ContentPackLoader() pack_sensors = loader.get_content(base_dirs=[packs_base_path], content_type='sensors') self.assertTrue(pack_sensors.get('pack1', None) is not None)
def test_get_sensors(self): packs_base_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'resources/packs/') loader = ContentPackLoader() pack_sensors = loader.get_content(base_dir=packs_base_path, content_type='sensors') self.assertTrue(pack_sensors.get('pack1', None) is not None)
def test_get_sensors(self): packs_base_path = os.path.join(RESOURCES_DIR, 'packs/') loader = ContentPackLoader() pack_sensors = loader.get_content(base_dirs=[packs_base_path], content_type='sensors') self.assertTrue(pack_sensors.get('pack1', None) is not None)