Ejemplo n.º 1
0
 def delete_generated_TA_alert(self, current_modular_alerts,
                               deleted_alert):
     alert_name = deleted_alert.get("short_name")
     build_setting = {
         "short_name": self.__appname,
         "product_id": self.__appname,
         "description": self.__appname,
         "modular_alerts": current_modular_alerts
     }
     self.__logger.info('start to delete alert=%s', deleted_alert)
     self.__logger.info('current_modular_alerts=%s', current_modular_alerts)
     try:
         mab.delete_alerts(build_setting=build_setting,
                           deleted_alerts=[deleted_alert],
                           logger=self.__logger,
                           short_name=self.__appname,
                           version=get_app_version(self.__current_ta_dir),
                           # global_settings=global_settings,
                           ta_dir=self.__splunk_app_dir
                           )
     except Exception as e:
         self.__logger.error('Fail to delete alert. alert="%s",' +
                             'deleted_alert="%s", reason="%s"',
                             alert_name,
                             deleted_alert,
                             traceback.format_exc())
         raise e
     self.__asset_generator.cleanup_ta_bin_folder()
Ejemplo n.º 2
0
    def do_build(self, modular_alerts, global_settings, output_dir=None):
        if output_dir:
            addon_builder_conf_path = os.path.join(self.__current_ta_dir,
                                                   "default",
                                                   "addon_builder.conf")
            if not os.path.exists(addon_builder_conf_path):
                try:
                    meta = self.__basic_builder.generate_add_on_builder_conf()
                except Exception as e:
                    self.__logger.error("Field to build addon_builder.conf, reason:%s",
                                        traceback.format_exc())
                    raise e
            else:
                self.__logger.info("addon_builder.conf already eixsts.")

        if modular_alerts and not isinstance(modular_alerts, list):
            msg = 'event="modular_alerts is not a list", modular_alerts="{}"'.format(
                modular_alerts)
            self.__logger.error(msg)
            raise Exception(msg)

        if global_settings and not isinstance(global_settings, dict):
            msg = 'event="global_settings is not a dict", global_settings="{}"'.format(
                global_settings)
            self.__logger.error(msg)
            raise Exception(msg)

        input_setting = {
            "short_name": self.__appname,
            "product_id": self.__appname,
            "description": self.__appname,
            "modular_alerts": modular_alerts
        }

        global_settings = {
            "session_key": self.__session_key,
            "server_uri": self.__uri,
            "settings": global_settings
        }

        try:
            output = mab.build(input_setting=input_setting,
                               logger=self.__logger,
                               short_name=self.__appname,
                               version=get_app_version(self.__current_ta_dir),
                               global_settings=global_settings,
                               output_dir=output_dir,
                               resource_dir=self.__resource_dir,
                               resource_lib_dir=self.__resource_lib_dir,
                               )
        except Exception as e:
            self.__logger.error('Fail to build alert. global_seting="%s", alerts="%s", input_setting="%s", reason="%s"',
                                global_settings,
                                modular_alerts,
                                input_setting,
                                traceback.format_exc())
            raise e
        return output
Ejemplo n.º 3
0
def package_app(tabuilder):
    app = tabuilder.app_name
    # copy the ta project to package workspace dir
    app_path = common_util.make_splunk_path(['etc', 'apps', app])
    package_workspace = common_util.make_splunk_path(
        ["var", "data", "tabuilder", "package", app])
    prepare_app_package_workspace(package_workspace, app_path, tabuilder)
    app_version = package_util.get_app_version(package_workspace)
    download_file_path = get_package_file_path(app)
    package_util.package_add_on(app,
                                package_workspace,
                                download_file_path,
                                copy_project=False)
    return download_file_path
Ejemplo n.º 4
0
def get_package_file_path(app):
    app_root = common_util.make_splunk_path(['etc', 'apps', app])
    app_version = package_util.get_app_version(app_root)
    package_file_name = package_util.get_package_filename(app, app_version)
    return get_package_file_full_path_with_package_name(package_file_name)
Ejemplo n.º 5
0
    def test_modular_alert_code(self, params):
        try:
            params = json.loads(json.dumps(params))
        except Exception as e:
            self.__logger.error('Fail to load alert test params, params="%s", reason="%s"',
                                params, traceback.format_exc())
            raise e

        '''
            {
                "code": "python code",
                "model": {
                    "short_name": "hipchat",
                    "label": "Hipchat",
                    "description": ""
                },
                "configuration": {
                    "message": "hi, there",
                    "room": "roomx",
                    "msg_type": "message"
                }
            }
        '''
        modular_alert = params.get("model")
        build_setting = {
            "short_name": self.__appname,
            "product_id": self.__appname,
            "description": self.__appname,
            "modular_alerts": [modular_alert]
        }
        alert_name = modular_alert.get("short_name")

        pattern = re.compile(r'((http|https)?://)?([\S]+):(\d+)')
        matched = pattern.match(self.__uri)
        if not matched:
            raise Exception(
                "url {} is not with right foramt: {scheme}://{host}:{port}".format(self.__uri))

        test_setting = {
            "code": params.get("code"),
            "name": modular_alert.get("short_name"),
            "global_settings": params.get("global_settings"),
            "input_setting": {
                "configuration": params.get("configuration"),
                "stdin_fields": {
                    "session_key": self.__session_key,
                    "server_uri": self.__uri,
                    "server_host": matched.group(3),
                    "server_port": int(matched.group(4)),
                    "app": self.__appname
                }
            }
        }

        global_settings = {
            "session_key": self.__session_key,
            "server_uri": self.__uri,
            "settings": params.get("global_settings")
        }

        try:
            alert_output = mab.test(build_setting=build_setting,
                                    test_setting=test_setting,
                                    short_name=self.__appname,
                                    logger=self.__logger,
                                    version=get_app_version(self.__current_ta_dir),
                                    global_settings=global_settings,
                                    resource_dir=self.__resource_dir,
                                    resource_lib_dir=self.__resource_lib_dir,
                                    )
        except Exception:
            self.__logger.info('Fail to test alert=%s, test_setting="%s", reason="%s"',
                               alert_name, test_setting, traceback.format_exc())
            return {
                "test_framework": {
                    "status": -1,
                    "message": "{}".format(traceback.format_exc())
                },
                "alert_output": {}
            }
        else:
            return {
                "test_framework": {
                    "status": 0,
                    "message": "Successfully finished test",
                },
                "alert_output": alert_output
            }
Ejemplo n.º 6
0
 def _get_export_package_name(self, workspace):
     ver = package_util.get_app_version(workspace).replace(".", "_")
     return '{}_{}_export.tgz'.format(self.app, ver)