def __init__(self, core, sequence, phout, answ, answ_level, timeout, section): self.core = core self.address_wizard = AddressWizard() self.sequence_no = sequence self.log = logging.getLogger(__name__) self.section = section self.stepper_wrapper = StepperWrapper(self.core, self.section) self.phout_file = phout self.answ_log = answ self.answ_log_level = answ_level self.timeout = timeout # per benchmark self.instances = None self.ipv6 = None self.ssl = None self.address = None self.port = None self.tank_type = None self.stpd = None self.gatling = None self.phantom_http_line = None self.phantom_http_field_num = None self.phantom_http_field = None self.phantom_http_entity = None self.resolved_ip = None self.method_prefix = None self.source_log_prefix = None self.method_options = None self.client_cipher_suites = None self.client_certificate = None self.client_key = None
def __init__(self, core): self.log = logging.getLogger(__name__) AbstractPlugin.__init__(self, core) self.gun_type = None self.start_time = time.time() self.stepper_wrapper = StepperWrapper(self.core, BFGPlugin.SECTION) self.log.info("Initialized BFG") self.gun_classes = { 'log': LogGun, 'sql': SqlGun, 'custom': CustomGun, 'http': HttpGun, 'scenario': ScenarioGun, }
def get_available_options(): opts = ["ssl", "tank_type", "gatling_ip", "method_prefix", "source_log_prefix"] opts += ["phantom_http_line", "phantom_http_field_num", "phantom_http_field", "phantom_http_entity"] opts += ["address", "port", StreamConfig.OPTION_INSTANCES_LIMIT] opts += StepperWrapper.get_available_options() opts += ["connection_test"] return opts
def get_available_options(): opts = ["ssl", "tank_type", 'gatling_ip', "method_prefix", "source_log_prefix"] opts += ["phantom_http_line", "phantom_http_field_num", "phantom_http_field", "phantom_http_entity"] opts += ['address', "port", StreamConfig.OPTION_INSTANCES_LIMIT] opts += StepperWrapper.get_available_options() opts += ["connection_test"] return opts
def __init__(self, core): self.log = logging.getLogger(__name__) AbstractPlugin.__init__(self, core) self.gun_type = None self.start_time = time.time() self.stepper_wrapper = StepperWrapper(self.core, BFGPlugin.SECTION) self.log.info("Initialized BFG") self.gun_classes = { 'log': LogGun, 'sql': SqlGun, 'custom': CustomGun, 'http': HttpGun, }
class StreamConfig: """ each test stream's config """ OPTION_INSTANCES_LIMIT = 'instances' def __init__(self, core, sequence, phout, answ, answ_level, timeout, section): self.core = core self.address_wizard = AddressWizard() self.sequence_no = sequence self.log = logging.getLogger(__name__) self.section = section self.stepper_wrapper = StepperWrapper(self.core, self.section) self.phout_file = phout self.answ_log = answ self.answ_log_level = answ_level self.timeout = timeout # per benchmark self.instances = None self.ipv6 = None self.ssl = None self.address = None self.port = None self.tank_type = None self.stpd = None self.gatling = None self.phantom_http_line = None self.phantom_http_field_num = None self.phantom_http_field = None self.phantom_http_entity = None self.resolved_ip = None self.method_prefix = None self.source_log_prefix = None self.method_options = None self.client_cipher_suites = None self.client_certificate = None self.client_key = None def get_option(self, option_ammofile, default=None): """ get option wrapper """ return self.core.get_option(self.section, option_ammofile, default) @staticmethod def get_available_options(): opts = ["ssl", "tank_type", 'gatling_ip', "method_prefix", "source_log_prefix"] opts += ["phantom_http_line", "phantom_http_field_num", "phantom_http_field", "phantom_http_entity"] opts += ['address', "port", StreamConfig.OPTION_INSTANCES_LIMIT] opts += StepperWrapper.get_available_options() opts += ["connection_test"] return opts def read_config(self): """ reads config """ # multi-options self.ssl = int(self.get_option("ssl", '0')) self.tank_type = self.get_option("tank_type", 'http') # TODO: refactor. Maybe we should decide how to interact with StepperWrapper here. self.instances = int( self.get_option(self.OPTION_INSTANCES_LIMIT, '1000')) self.gatling = ' '.join(self.get_option('gatling_ip', '').split("\n")) self.method_prefix = self.get_option("method_prefix", 'method_stream') self.method_options = self.get_option("method_options", '') self.source_log_prefix = self.get_option("source_log_prefix", '') self.phantom_http_line = self.get_option("phantom_http_line", "") self.phantom_http_field_num = self.get_option("phantom_http_field_num", "") self.phantom_http_field = self.get_option("phantom_http_field", "") self.phantom_http_entity = self.get_option("phantom_http_entity", "") self.address = self.get_option('address', '127.0.0.1') do_test_connect = int(self.get_option("connection_test", "1")) > 0 explicit_port = self.get_option('port', '') self.ipv6, self.resolved_ip, self.port, self.address = self.address_wizard.resolve(self.address, do_test_connect, explicit_port) logging.info("Resolved %s into %s:%s", self.address, self.resolved_ip, self.port) self.client_cipher_suites = self.get_option("client_cipher_suites", "") self.client_certificate = self.get_option("client_certificate", "") self.client_key = self.get_option("client_key", "") self.stepper_wrapper.read_config() def compose_config(self): """ compose benchmark block """ # step file self.stepper_wrapper.prepare_stepper() self.stpd = self.stepper_wrapper.stpd if self.stepper_wrapper.instances: self.instances = self.stepper_wrapper.instances if not self.stpd: raise RuntimeError("Cannot proceed with no STPD file") kwargs = {} kwargs['sequence_no'] = self.sequence_no if self.ssl: _auth_section = '' _ciphers = '' ssl_template = "transport_t ssl_transport = transport_ssl_t {\n" \ " timeout = 1s\n" \ " %s\n" \ " %s}\n" \ " transport = ssl_transport" if self.client_certificate or self.client_key: _auth_section = 'auth_t def_auth = auth_t { key = "%s" cert = "%s"} auth = def_auth' \ % (self.client_key, self.client_certificate) if self.client_cipher_suites: _ciphers = 'ciphers = "%s"' % self.client_cipher_suites kwargs[ 'ssl_transport'] = ssl_template % (_auth_section, _ciphers) else: kwargs['ssl_transport'] = "" kwargs['method_stream'] = self.method_prefix + \ "_ipv6_t" if self.ipv6 else self.method_prefix + "_ipv4_t" kwargs['phout'] = self.phout_file kwargs['answ_log'] = self.answ_log kwargs['answ_log_level'] = self.answ_log_level kwargs['comment_answ'] = "# " if self.answ_log_level == 'none' else '' kwargs['stpd'] = self.stpd kwargs['source_log_prefix'] = self.source_log_prefix kwargs['method_options'] = self.method_options if self.tank_type: kwargs[ 'proto'] = "proto=http_proto%s" % self.sequence_no if self.tank_type == 'http' else "proto=none_proto" kwargs['comment_proto'] = "" else: kwargs['proto'] = "" kwargs['comment_proto'] = "#" if self.gatling: kwargs['bind'] = 'bind={ ' + self.gatling + ' }' else: kwargs['bind'] = '' kwargs['ip'] = self.resolved_ip kwargs['port'] = self.port kwargs['timeout'] = self.timeout kwargs['instances'] = self.instances tune = '' if self.phantom_http_entity: tune += "entity = " + self.phantom_http_entity + "\n" if self.phantom_http_field: tune += "field = " + self.phantom_http_field + "\n" if self.phantom_http_field_num: tune += "field_num = " + self.phantom_http_field_num + "\n" if self.phantom_http_line: tune += "line = " + self.phantom_http_line + "\n" if tune: kwargs['reply_limits'] = 'reply_limits = {\n' + tune + "}" else: kwargs['reply_limits'] = '' if self.section == PhantomConfig.SECTION: fname = 'phantom_benchmark_main.tpl' else: fname = 'phantom_benchmark_additional.tpl' template_str = template_str = resource_string(__name__, "config/" + fname) tpl = string.Template(template_str) config = tpl.substitute(kwargs) return config
class StreamConfig: """ each test stream's config """ OPTION_INSTANCES_LIMIT = "instances" def __init__(self, core, sequence, phout, answ, answ_level, timeout, section): self.core = core self.address_wizard = AddressWizard() self.sequence_no = sequence self.log = logging.getLogger(__name__) self.section = section self.stepper_wrapper = StepperWrapper(self.core, self.section) self.phout_file = phout self.answ_log = answ self.answ_log_level = answ_level self.timeout = timeout # per benchmark self.instances = None self.ipv6 = None self.ssl = None self.address = None self.port = None self.tank_type = None self.stpd = None self.gatling = None self.phantom_http_line = None self.phantom_http_field_num = None self.phantom_http_field = None self.phantom_http_entity = None self.resolved_ip = None self.method_prefix = None self.source_log_prefix = None self.method_options = None def get_option(self, option_ammofile, default=None): """ get option wrapper """ return self.core.get_option(self.section, option_ammofile, default) @staticmethod def get_available_options(): opts = ["ssl", "tank_type", "gatling_ip", "method_prefix", "source_log_prefix"] opts += ["phantom_http_line", "phantom_http_field_num", "phantom_http_field", "phantom_http_entity"] opts += ["address", "port", StreamConfig.OPTION_INSTANCES_LIMIT] opts += StepperWrapper.get_available_options() opts += ["connection_test"] return opts def read_config(self): """ reads config """ # multi-options self.ssl = int(self.get_option("ssl", "0")) self.tank_type = self.get_option("tank_type", "http") # TODO: refactor. Maybe we should decide how to interact with StepperWrapper here. self.instances = int(self.get_option(self.OPTION_INSTANCES_LIMIT, "1000")) self.gatling = " ".join(self.get_option("gatling_ip", "").split("\n")) self.method_prefix = self.get_option("method_prefix", "method_stream") self.method_options = self.get_option("method_options", "") self.source_log_prefix = self.get_option("source_log_prefix", "") self.phantom_http_line = self.get_option("phantom_http_line", "") self.phantom_http_field_num = self.get_option("phantom_http_field_num", "") self.phantom_http_field = self.get_option("phantom_http_field", "") self.phantom_http_entity = self.get_option("phantom_http_entity", "") self.address = self.get_option("address", "127.0.0.1") do_test_connect = int(self.get_option("connection_test", "1")) > 0 explicit_port = self.get_option("port", "") self.ipv6, self.resolved_ip, self.port, self.address = self.address_wizard.resolve( self.address, do_test_connect, explicit_port ) logging.info("Resolved %s into %s:%s", self.address, self.resolved_ip, self.port) self.stepper_wrapper.read_config() def compose_config(self): """ compose benchmark block """ # step file self.stepper_wrapper.prepare_stepper() self.stpd = self.stepper_wrapper.stpd if self.stepper_wrapper.instances: self.instances = self.stepper_wrapper.instances if not self.stpd: raise RuntimeError("Cannot proceed with no STPD file") kwargs = {} kwargs["sequence_no"] = self.sequence_no kwargs["ssl_transport"] = ( "transport_t ssl_transport = transport_ssl_t { timeout = 1s }\n transport = ssl_transport" if self.ssl else "" ) kwargs["method_stream"] = self.method_prefix + "_ipv6_t" if self.ipv6 else self.method_prefix + "_ipv4_t" kwargs["phout"] = self.phout_file kwargs["answ_log"] = self.answ_log kwargs["answ_log_level"] = self.answ_log_level kwargs["comment_answ"] = "# " if self.answ_log_level == "none" else "" kwargs["stpd"] = self.stpd kwargs["source_log_prefix"] = self.source_log_prefix kwargs["method_options"] = self.method_options if self.tank_type: kwargs["proto"] = ( "proto=http_proto%s" % self.sequence_no if self.tank_type == "http" else "proto=none_proto" ) kwargs["comment_proto"] = "" else: kwargs["proto"] = "" kwargs["comment_proto"] = "#" if self.gatling: kwargs["bind"] = "bind={ " + self.gatling + " }" else: kwargs["bind"] = "" kwargs["ip"] = self.resolved_ip kwargs["port"] = self.port kwargs["timeout"] = self.timeout kwargs["instances"] = self.instances tune = "" if self.phantom_http_entity: tune += "entity = " + self.phantom_http_entity + "\n" if self.phantom_http_field: tune += "field = " + self.phantom_http_field + "\n" if self.phantom_http_field_num: tune += "field_num = " + self.phantom_http_field_num + "\n" if self.phantom_http_line: tune += "line = " + self.phantom_http_line + "\n" if tune: kwargs["reply_limits"] = "reply_limits = {\n" + tune + "}" else: kwargs["reply_limits"] = "" if self.section == PhantomConfig.SECTION: fname = "phantom_benchmark_main.tpl" else: fname = "phantom_benchmark_additional.tpl" template_str = template_str = resource_string(__name__, "config/" + fname) tpl = string.Template(template_str) config = tpl.substitute(kwargs) return config
class BFGPlugin(AbstractPlugin): ''' Big F*****g Gun plugin ''' SECTION = 'bfg' def __init__(self, core): self.log = logging.getLogger(__name__) AbstractPlugin.__init__(self, core) self.gun_type = None self.start_time = time.time() self.stepper_wrapper = StepperWrapper(self.core, BFGPlugin.SECTION) self.log.info("Initialized BFG") self.gun_classes = { 'log': LogGun, 'sql': SqlGun, 'custom': CustomGun, 'http': HttpGun, } @staticmethod def get_key(): return __file__ def get_available_options(self): return ["gun_type", "instances", "cached_stpd"] + self.stepper_wrapper.get_available_options def configure(self): self.log.info("Configuring BFG...") self.stepper_wrapper.read_config() def prepare_test(self): self.log.info(self.get_option("ammo_type")) self.stepper_wrapper.prepare_stepper() gun_type = self.get_option("gun_type") if gun_type in self.gun_classes: self.gun = self.gun_classes[gun_type](self.core) else: raise NotImplementedError( 'No such gun type implemented: "%s"' % gun_type) cached_stpd_option = self.get_option("cached_stpd", '0') if cached_stpd_option == '1': cached_stpd = True else: cached_stpd = False self.bfg = BFG( gun=self.gun, instances=self.get_option("instances", '15'), threads=self.get_option("threads", '10'), stpd_filename=self.stepper_wrapper.stpd, cached_stpd=cached_stpd, zmq=self.get_option("zmq", None) ) aggregator = None try: aggregator = self.core.get_plugin_of_type(AggregatorPlugin) except Exception, ex: self.log.warning("No aggregator found: %s", ex) if aggregator: result_cache_size = int(self.get_option("result_cache_size", '5')) aggregator.reader = BFGReader( aggregator, self.bfg, result_cache_size=result_cache_size) try: console = self.core.get_plugin_of_type(ConsoleOnlinePlugin) except Exception, ex: self.log.debug("Console not found: %s", ex) console = None
class BFGPlugin(AbstractPlugin): ''' Big F*****g Gun plugin ''' SECTION = 'bfg' def __init__(self, core): self.log = logging.getLogger(__name__) AbstractPlugin.__init__(self, core) self.gun_type = None self.start_time = time.time() self.stepper_wrapper = StepperWrapper(self.core, BFGPlugin.SECTION) self.log.info("Initialized BFG") self.gun_classes = { 'log': LogGun, 'sql': SqlGun, 'custom': CustomGun, 'http': HttpGun, 'scenario': ScenarioGun, } @staticmethod def get_key(): return __file__ def get_available_options(self): return ["gun_type", "instances", "cached_stpd" ] + self.stepper_wrapper.get_available_options def configure(self): self.log.info("Configuring BFG...") self.stepper_wrapper.read_config() def prepare_test(self): self.log.info(self.get_option("ammo_type")) self.stepper_wrapper.prepare_stepper() gun_type = self.get_option("gun_type") if gun_type in self.gun_classes: self.gun = self.gun_classes[gun_type](self.core) else: raise NotImplementedError('No such gun type implemented: "%s"' % gun_type) cached_stpd_option = self.get_option("cached_stpd", '0') if cached_stpd_option == '1': cached_stpd = True else: cached_stpd = False self.bfg = BFG(gun=self.gun, instances=self.get_option("instances", '15'), threads=self.get_option("threads", '10'), stpd_filename=self.stepper_wrapper.stpd, cached_stpd=cached_stpd, zmq=self.get_option("zmq", "")) aggregator = None try: aggregator = self.core.get_plugin_of_type(AggregatorPlugin) except Exception, ex: self.log.warning("No aggregator found: %s", ex) if aggregator: result_cache_size = int(self.get_option("result_cache_size", '5')) aggregator.reader = BFGReader(aggregator, self.bfg, result_cache_size=result_cache_size) try: console = self.core.get_plugin_of_type(ConsoleOnlinePlugin) except Exception, ex: self.log.debug("Console not found: %s", ex) console = None