def cleanup_ta_bin_folder(self):
        '''
        tranverse the bin folder, if there is no modinputs and modalert
        delete the 3rd libs
        :return: return a boolean value, if true, no modinputs and alerts
        '''
        bin_folder = os.path.join(self._dst_dir, 'bin')
        children = os.listdir(bin_folder)
        py_files = [f for f in children if f.endswith('.py')]
        # always clean up the pyc
        pyc_files = [f for f in children if f.endswith('.pyc')]
        for pyc in pyc_files:
            self._delete_path_resource(os.path.join(bin_folder, pyc))
        nonpyc_children = [f for f in children if not f.endswith('.pyc')]

        bin_cleaned = False
        if len(py_files) <= 0 or (
                len(py_files) == 1 and py_files[0].startswith(
                    common_util.get_python_declare_file_name(self._app_name))):
            py_lib_dir_name = common_util.get_python_lib_dir_name(
                self._app_name)
            # should clean up the dir, No valid modinput/alert now
            for c in nonpyc_children:
                c_name = os.path.join(bin_folder, c)
                if c == py_lib_dir_name:
                    self.cleanup_py_lib_dir(c)
                else:
                    self._delete_path_resource(c_name)
            self._logger.info(
                'delete all the built-in libs and files in bin folder:%s',
                bin_folder)
            bin_cleaned = True
        return bin_cleaned
 def generate_import_declare(self):
     lib_dir_name = common_util.get_python_lib_dir_name(self._app_name)
     filename = os.path.join(self._resource_dir, "bin",
                             "python_lib_declare.py.template")
     temp = Template(filename=filename)
     tran = temp.render(app_name=self._app_name,
                        python_lib_dir=lib_dir_name)
     output_file = os.path.join(
         self._dst_dir, 'bin',
         common_util.get_python_declare_file_name(self._app_name))
     with open(output_file, 'w') as f:
         f.write(tran.strip())
         self._logger.info('Generate %s successfully.', output_file)
    def __init__(self,
                 appname,
                 uri,
                 session_key,
                 service_with_tab_context=None,
                 service_with_ta_context=None):
        self.__appname = appname
        self.__app_namespace = common_util.get_python_lib_dir_name(
            self.__appname)
        self.__logger = logger.get_input_builder_logger()
        self.__parent_dir = os.path.split(os.path.realpath(__file__))[0]
        self.__resource_dir = os.path.join(self.__parent_dir, "resources")
        self.__resource_lib_dir = os.path.join(self.__parent_dir,
                                               "resources_lib")
        self.__splunk_home = os.environ['SPLUNK_HOME']
        self.__splunk_app_dir = os.path.join(self.__splunk_home, "etc", "apps")
        self.__current_ta_dir = os.path.join(self.__splunk_app_dir,
                                             self.__appname)
        self.__asset_generator = ta_static_asset_generator.AssetGenerator(
            self.__resource_dir,
            self.__current_ta_dir,
            self.__resource_lib_dir,
            app_name=self.__appname)
        self.__uri = uri
        self.__session_key = session_key

        if service_with_ta_context:
            self.__service_with_ta_context = service_with_ta_context
        else:
            self.__service_with_ta_context = common_util.create_splunk_service(
                session_key, uri, self.__appname)
            self.__logger.info('Create splunk service with args: %s, %s',
                               session_key, uri)

        self.__conf_mgr = common_util.create_conf_mgr(
            self.__session_key, self.__uri, app=self.__appname)
        self.__conf_mgr_with_tab_context = common_util.create_conf_mgr(
            self.__session_key, self.__uri)

        if not service_with_tab_context:
            service_with_tab_context = common_util.create_splunk_service(
                session_key, uri)
        self.__service_with_tab_context = service_with_tab_context
        self.required_meta_keys = ['name', 'type', 'sourcetype']
        self.__global_vars = None

        self.__input_meta_mgr = TAInputMetaMgr(appname, uri, session_key,
                                               self.__service_with_tab_context)

        self._ta_configuration_builder = builder_ta_configuration.TAConfigurationBuilder(
            self.__appname, self.__service_with_tab_context, self.__service_with_ta_context)
    def __init__(self,
                 appname,
                 uri,
                 session_key,
                 service_with_tab_context=None,
                 service_with_ta_context=None):
        self.__appname = appname
        self.__app_namespace = common_util.get_python_lib_dir_name(
            self.__appname)
        self.__logger = logger.get_alert_builder_logger()
        self.__parent_dir = os.path.split(os.path.realpath(__file__))[0]
        self.__resource_dir = os.path.join(self.__parent_dir, "resources")
        self.__resource_lib_dir = os.path.join(self.__parent_dir,
                                               "resources_lib")
        self.__splunk_home = os.environ['SPLUNK_HOME']
        self.__splunk_app_dir = os.path.join(self.__splunk_home, "etc", "apps")
        self.__current_ta_dir = os.path.join(self.__splunk_app_dir,
                                             self.__appname)
        self.__asset_generator = ta_static_asset_generator.AssetGenerator(
            self.__resource_dir,
            self.__current_ta_dir,
            self.__resource_lib_dir,
            app_name=self.__appname)
        self.__uri = uri
        self.__session_key = session_key

        if service_with_ta_context:
            self.__service_with_ta_context = service_with_ta_context
        else:
            self.__service_with_ta_context = common_util.create_splunk_service(
                session_key, uri, self.__appname)

        self.__conf_mgr = common_util.create_conf_mgr(self.__session_key,
                                                      self.__uri,
                                                      app=self.__appname)
        self.__conf_mgr_with_tab_context = common_util.create_conf_mgr(
            self.__session_key, self.__uri)

        if not service_with_tab_context:
            service_with_tab_context = common_util.create_splunk_service(
                session_key, uri)
        self.__service_with_tab_context = service_with_tab_context
        self.__meta_mgr = meta_manager.create_meta_manager(
            session_key, uri, meta_const.ALERT_ACTION_BUILER, self.__appname)
        self.required_meta_keys = ['name', 'type', 'sourcetype']
        self.__global_vars = None
        self.__basic_builder = TABasicBuilder(self.__appname, uri,
                                              session_key,
                                              self.__service_with_tab_context,
                                              self.__service_with_ta_context)
Exemple #5
0
 def __init__(self,
              input_setting=None,
              package_path=None,
              logger=None,
              template_py=None,
              lookup_dir=None,
              global_settings=None,
              **kwargs):
     self._all_setting = input_setting
     self._logger = logger
     self._package_path = package_path
     self._global_settings = global_settings
     self._current_alert = None
     self._alert_actions_setting = input_setting[ac.MODULAR_ALERTS]
     self._ta_name = self._all_setting.get(ac.SHORT_NAME)
     self._lib_dir = common_util.get_python_lib_dir_name(self._ta_name)
 def cleanup_py_lib_dir(self, lib_dir=None):
     lib_dir = lib_dir or common_util.get_python_lib_dir_name(
         self._app_name)
     target_dir = os.path.join(self._dst_dir, 'bin', lib_dir)
     for c in os.listdir(target_dir):
         if c in self.AOB_BUILT_IN_LIBS:
             lib_path = os.path.join(target_dir, c)
             self._delete_path_resource(lib_path)
             self._logger.debug('clean up py lib %s', lib_path)
         elif c.endswith('.pyc') or c.endswith('.pyo'):
             file_path = os.path.join(target_dir, c)
             self._delete_path_resource(file_path)
             self._logger.debug('clean up file %s in py lib', file_path)
     if not os.listdir(target_dir):
         os.rmdir(target_dir)
         self._logger.debug('No files in %s, delete it.', target_dir)
 def on_rename_add_on(self, old_app_name):
     datainputs = self.get_all_TA_inputs()
     if len(datainputs) > 0:
         old_declare = os.path.join(self.__current_ta_dir, 'bin', common_util.get_python_declare_file_name(old_app_name))
         if os.path.isfile(old_declare):
             os.remove(old_declare)
         self.__asset_generator.generate_import_declare()
         old_python_dir_name = common_util.get_python_lib_dir_name(
             old_app_name)
         old_python_lib = os.path.join(self.__current_ta_dir, 'bin',
                                       old_python_dir_name)
         if os.path.isdir(old_python_lib):
             self.__asset_generator.migrate_python_libs(old_python_lib)
         else:
             self.__asset_generator.generate_python_libs_if_not_exist()
     for di in datainputs:
         self._create_input_py(di)
         self.__logger.debug('create python file when add-on is renamed.')
Exemple #8
0
 def __init__(self, envs, logger, all_template_setting=None, **kwargs):
     '''
     all_template_setting = {
         "test_template_setting" :
             {
             "template_dir": ,
             "template_declare_file": ,
             },
         "input_template_setting" :
             {
             "template_dir":,
             "template_input_file":,
             "template_lookup_dir":,
             }
     }
     '''
     self._envs = envs
     self._logger = logger
     self._input_sim_obj = None
     self._build_setting = self._envs.get("build_setting")
     self._ta_name = self._build_setting.get(ac.SHORT_NAME)
     self._lib_dir = common_util.get_python_lib_dir_name(self._ta_name)
     self._test_setting = self._envs["test_setting"]
     self._test_global_settings = self._envs.get("global_settings")
     self._package_dir = self._test_setting.get("ta_root_dir")
     self._local_ta_dir = self._test_setting.get("local_ta_dir")
     self._code_test_dir = op.join(
         self._test_setting.get("test_container_dir"), "code_test")
     self._stdout_file = self._test_setting.get("stdout_file")
     self._stderr_file = self._test_setting.get("stderr_file")
     self._timeout = self._test_setting.get("timeout") or DEFAULT_TIMEOUT
     self._all_template_setting = all_template_setting
     self.init_template_setting()
     self._temp_mgr = AlertActionsTemplateMgr(
         template_dir=self._template_dir)
     self._child_proc = None
     self.init_test_env()
     self._subprocess_out = {"stderr": "", "stdout": ""}
 def get_python_lib_dir(self):
     lib_dir = common_util.get_python_lib_dir_name(self._app_name)
     return os.path.join(self._dst_dir, 'bin', lib_dir)