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
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})
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
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
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]})
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"})
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() })
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
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)
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()})
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