Esempio n. 1
0
 def edit_data_input(self, action, **params):
     cl = cherrypy.request.headers["Content-Length"]
     raw_body = cherrypy.request.body.read(int(cl))
     params = json.loads(raw_body)
     appname = controller_util.get_current_ta_project()
     reload_input = params.get('reload_input', True)
     if 'reload_input' in params:
         del params['reload_input']
     splunkd_uri, session_key = scc.getMgmtUri(), cherrypy.session.get(
         "sessionKey")
     try:
         tabuilder = builder.TABuilder(appname, splunkd_uri, session_key)
         tabuilder.update_TA_input(params, reload_input)
         return self.render_json({"status": "success", "meta": params})
     except CommonException as e:
         logger.error(
             'Get CommonException when update data input. meta:%s, error:%s',
             params, traceback.format_exc())
         return self.render_json({'err_code': e.get_err_code(),
                                  'err_args': e.get_options()})
     except Exception as e:
         logger.error(
             'Get exception when update data input. meta:%s, error:%s',
             params, traceback.format_exc())
         raise e
Esempio n. 2
0
 def upgrade_app_project(self, action, **params):
     session = cherrypy.session.get("sessionKey")
     splunkd_uri = scc.getMgmtUri()
     cl = cherrypy.request.headers["Content-Length"]
     raw_body = cherrypy.request.body.read(int(cl))
     app_context = json.loads(raw_body)
     app_name = app_context.get('app_name', '')
     try:
         service = common_util.create_splunk_service(
             session, splunkd_uri, builder_constant.ADDON_BUILDER_APP_NAME)
         app_project = app.App(app_name, service)
         ta_builder = builder.TABuilder(app_name,
                                        uri=splunkd_uri,
                                        session_key=session)
         app_project.upgrade(ta_builder)
         return self.render_json({})
     except CommonException as ce:
         logger.error("Fail to upgrade app. %s", traceback.format_exc())
         return self.render_json({
             'err_code': ce.get_err_code(),
             'err_args': ce.get_options()
         })
     except Exception as e:
         logger.error("Fail to upgrade app. %s", traceback.format_exc())
         return self.render_json({'err_code': 19})
Esempio n. 3
0
 def global_settings(self, resource, **params):
     session_key = cherrypy.session.get("sessionKey")
     splunkd_uri = scc.getMgmtUri()
     tabuilder = builder.TABuilder(controller_util.get_current_ta_project(),
                                   splunkd_uri, session_key)
     if cherrypy.request.method == 'GET':
         global_settings = tabuilder.get_global_settings()
         if global_settings is None:
             global_settings = {}
         return self.render_json(global_settings)
     elif cherrypy.request.method == 'POST':
         cl = cherrypy.request.headers["Content-Length"]
         raw_body = cherrypy.request.body.read(int(cl))
         params = json.loads(raw_body)
         try:
             # did some clean up in case frontend does not clean it up
             if 'customized_settings' in params and len(
                     params['customized_settings']) == 0:
                 del params['customized_settings']
             logger.info("global settings params are : %s", params)
             tabuilder.update_global_settings(params)
             return self.render_json({"status": "success"})
         except CommonException as e:
             logger.error("fail to save global settings. Error: %s",
                          traceback.format_exc())
             return self.render_json({
                 'err_code': e.get_err_code(),
                 'err_args': e.get_options()
             })
         except Exception as e:
             logger.error("fail to save global settings. Error: %s",
                          traceback.format_exc())
             raise e
Esempio n. 4
0
    def _generate_ta_folder(self):
        '''
        copy the project to a target folder and merge the conf,
        because best practice validator will not scan the local conf folder
        return the generated folder
        '''
        target_folder = os.path.join(builder_constant.ADDON_BUILDER_APP_NAME,
                                     'local', 'validation', self.app_name)
        # copy the ta project to package workspace dir
        app_path = common_util.make_splunk_path(['etc', 'apps', self.app_name])
        tabuilder = builder.TABuilder(self.app_name, self.splunk_uri,
                                      self.session_key)
        tgz_file = workspace_util.package_app(tabuilder)

        validation_package_workspace = common_util.make_splunk_path([
            'etc', 'apps', builder_constant.ADDON_BUILDER_APP_NAME, 'local',
            'validation'
        ])
        ta_folder = os.path.join(validation_package_workspace, self.app_name)
        if os.path.isdir(ta_folder):
            shutil.rmtree(ta_folder)
        with tarfile.open(tgz_file, 'r:*') as tf:
            tf.extractall(validation_package_workspace)

        return target_folder
Esempio n. 5
0
 def get_input_names(self, action, **params):
     session_key = cherrypy.session.get("sessionKey")
     splunkd_uri = scc.getMgmtUri()
     service = common_util.create_splunk_service(session_key, splunkd_uri)
     tabuilder = builder.TABuilder(controller_util.get_current_ta_project(),
                                   splunkd_uri, session_key, service)
     all_inputs = tabuilder.get_all_TA_inputs() or []
     return self.render_json({"input_names": [_input['name'] for _input in all_inputs]})
Esempio n. 6
0
    def code_save(self, action, **params):
        # TODO: delete this api. Save the code when savin the input
        cl = cherrypy.request.headers["Content-Length"]
        raw_body = cherrypy.request.body.read(int(cl))
        params = json.loads(raw_body)
        appname = controller_util.get_current_ta_project()
        session = cherrypy.session.get("sessionKey")
        splunk_uri = scc.getMgmtUri()
        tabuilder = builder.TABuilder(appname, splunk_uri, session)
        tabuilder.save_TA_input_code(params)

        return self.render_json({"status": "successful"})
Esempio n. 7
0
 def get_sourcetypes(self, action, **params):
     session_key = cherrypy.session.get("sessionKey")
     splunkd_uri = scc.getMgmtUri()
     try:
         tabuilder = builder.TABuilder(
             controller_util.get_current_ta_project(), splunkd_uri,
             session_key)
         return self.render_json([{
             'name': _sourcetype
         } for _sourcetype in tabuilder.get_all_sourcetypes()])
     except CommonException as ce:
         return self.render_json({
             'err_code': ce.get_err_code(),
             'err_args': ce.get_options()
         })
Esempio n. 8
0
 def fetch_input_code(self, action, **params):
     '''
     call this to fetch modinput code. Used in input wizard.
     '''
     cl = cherrypy.request.headers["Content-Length"]
     raw_body = cherrypy.request.body.read(int(cl))
     params = json.loads(raw_body)
     appname = controller_util.get_current_ta_project()
     splunkd_uri, session_key = scc.getMgmtUri(), cherrypy.session.get(
         "sessionKey")
     try:
         tabuilder = builder.TABuilder(appname, splunkd_uri, session_key)
         meta = tabuilder.fetch_input_code(params)
         logger.info('fetch input code:%s', meta)
         return self.render_json(meta)
     except Exception as e:
         logger.error('fetch input code error. %s',
                      traceback.format_exc())
         raise e
Esempio n. 9
0
 def get_inputs_summary(self, action, **params):
     session_key = cherrypy.session.get("sessionKey")
     splunkd_uri = scc.getMgmtUri()
     service = common_util.create_splunk_service(session_key, splunkd_uri)
     tabuilder = builder.TABuilder(controller_util.get_current_ta_project(),
                                   splunkd_uri, session_key, service)
     all_inputs = tabuilder.get_all_TA_inputs() or []
     search_result = search_util.get_sourcetype_from_index(service)
     sourcetypes_totalcount = {entry['sourcetype']: entry['totalCount']
                               for entry in search_result}
     for _input in all_inputs:
         _input['sample_count'] = sourcetypes_totalcount.get(
             _input['sourcetype'], 0)
     # get the code for customized modinput
     input_codes = tabuilder.get_customized_data_input_code(all_inputs)
     for _input in all_inputs:
         if _input['name'] in input_codes:
             _input['code'] = input_codes[_input['name']]
     return self.render_json(all_inputs)
Esempio n. 10
0
    def create(self, action, **params):
        session_key = cherrypy.session.get("sessionKey")
        splunkd_uri = scc.getMgmtUri()
        if cherrypy.request.method == 'POST':
            response_dict = {}
            cl = cherrypy.request.headers["Content-Length"]
            raw_body = cherrypy.request.body.read(int(cl))
            meta = json.loads(raw_body)
            err_code = 0
            err_app = ''
            try:
                app_name = meta['projectName']
                pre_app_name = meta['previousProjectName']
                friendly_name = meta['friendlyName']
                # construct the meta for builder
                builder_meta = {
                    "appname": app_name,
                    "friendly_name": friendly_name,
                    "version": meta.get('projectVersion', ''),
                    "author": meta.get('projectAuthor', ''),
                    "description": meta.get('projectDescription', ''),
                    "theme": meta.get('themeColor', ''),
                    "large_icon": meta.get('largeIcon', ''),
                    "small_icon": meta.get('smallIcon', ''),
                    "visible": meta.get('visible', 0) == 1
                }

                if not pre_app_name:
                    logger.info("TA builder creates app with meta: %s",
                                builder_meta)
                    err_code = 2002
                    err_app = app_name
                    response_dict['resp_status'] = 'creation_fail'
                    app_builder = builder.TABuilder(app_name, splunkd_uri,
                                                    session_key)
                    app_builder.generate_TA(builder_meta)
                    response_dict['resp_status'] = 'creation_success'
                else:
                    if pre_app_name == app_name:
                        logger.info("TA builder update app with meta: %s",
                                    builder_meta)
                        err_code = 2003
                        err_app = app_name
                        response_dict['resp_status'] = 'update_fail'
                        app_builder = builder.TABuilder(app_name, splunkd_uri,
                                                        session_key)
                        app_builder.update_TA_basic(builder_meta)
                        response_dict['resp_status'] = 'update_success'
                    else:
                        # rename the app
                        err_code = 2004
                        err_app = pre_app_name
                        app_builder = builder.TABuilder(
                            pre_app_name, splunkd_uri, session_key)
                        response_dict['resp_status'] = 'rename_fail'
                        app_builder.update_TA_name(builder_meta)
                        response_dict['resp_status'] = 'rename_success'

                # update the cookie if success
                controller_util.set_current_ta_project(app_name)
                controller_util.set_current_ta_display_name(friendly_name)
                response_dict["cookies"] = controller_util.format_response_cookie()
                mgr = meta_manager.create_meta_manager(session_key, splunkd_uri, meta_const.APP_CONTEXT, app_name)
                return self.render_json(response_dict)
            except CommonException as ce:
                logger.error("Error when create app. %s",
                             traceback.format_exc())
                response_dict['err_code'] = ce.get_err_code()
                response_dict['err_args'] = ce.get_options()
                response_dict['cookies'] = controller_util.format_response_cookie()
                return self.render_json(response_dict)
            except Exception as e:
                logger.error("Error when create app. %s",
                             traceback.format_exc())
                response_dict['err_code'] = err_code
                response_dict['err_args'] = {'reason': str(e),
                                             'app_name': err_app}
                response_dict['cookies'] = controller_util.format_response_cookie()
                return self.render_json(response_dict)
        else:
            try:
                if 'app_name' in params:
                    app = params['app_name']
                    if app == "":
                        # return the empty json
                        return self.render_json({})
                    else:
                        app_builder = builder.TABuilder(app, splunkd_uri,
                                                        session_key)
                        meta = app_builder.get_TA_basic_meta()
                        if meta:
                            friendly_name = meta.get('friendly_name', '')
                            controller_util.set_current_ta_project(app)
                            controller_util.set_current_ta_display_name(friendly_name)
                            result = {
                                'previousProjectName': app,
                                'projectName': app,
                                'friendlyName': friendly_name,
                                'projectVersion': meta.get('version', ''),
                                'projectAuthor': meta.get('author', ''),
                                'projectDescription': meta.get('description', ''),
                                'visible': 1 if meta.get('visible', False) else 0
                            }

                            if meta.get('theme', None):
                                result['themeColor'] = meta['theme']
                                if meta.get('large_icon', None):
                                    result['largeIcon'] = meta['large_icon']
                                if meta.get('small_icon', None):
                                    result['smallIcon'] = meta['small_icon']
                            service = common_util.create_splunk_service(session_key, splunkd_uri)
                            globalsetting_meta = ta_configuration_meta.GlobalSettingMeta(app, service)
                            result['isSetupEnabled'] = globalsetting_meta.is_global_setting_enabled()
                            result['cookies'] = controller_util.format_response_cookie()
                            return self.render_json(result)
                        else:
                            controller_util.delete_current_ta_project()
                            controller_util.delete_current_ta_display_name()
                            return self.render_json({'cookies': controller_util.format_response_cookie()})
                else:
                    logger.error("app_name is not in the params:%s.", params)
                    raise RuntimeError('app_name is not in the params')
            except CommonException as ce:
                logger.error("Can not get app basic info. %s", ce)
                return self.render_json({'err_code': ce.get_err_code(),
                                         'err_args': ce.get_options()})
Esempio n. 11
0
 def __init__(self, app, splunk_uri, session_key):
     self.app = app
     self.tabuilder = builder.TABuilder(app,
                                        uri=splunk_uri,
                                        session_key=session_key)
     self.service = self.tabuilder.tab_service