示例#1
0
文件: server.py 项目: vefimova/shaker
def main():
    utils.init_config_and_logging(
        config.COMMON_OPTS + config.OPENSTACK_OPTS + config.SERVER_OPTS +
        config.REPORT_OPTS
    )

    output = dict(records=[], agents={}, scenarios={}, tests={})

    for scenario_file_name in [cfg.CONF.scenario]:
        scenario = utils.read_yaml_file(scenario_file_name)
        scenario['title'] = scenario.get('title') or scenario_file_name
        scenario['file_name'] = cfg.CONF.scenario

        play_output = play_scenario(scenario)

        output['scenarios'][scenario['title']] = play_output['scenario']
        output['records'] += play_output['records']
        output['agents'].update(play_output['agents'])
        output['tests'].update(play_output['tests'])

    if cfg.CONF.output:
        utils.write_file(json.dumps(output, indent=2), cfg.CONF.output)

    if cfg.CONF.no_report_on_error and 'error' in output:
        LOG.info('Skipped report generation due to errors and '
                 'no_report_on_error=True')
    else:
        report.generate_report(output, cfg.CONF.report_template,
                               cfg.CONF.report, cfg.CONF.subunit)
示例#2
0
def act():
    output = dict(records={}, agents={}, scenarios={}, tests={})

    for scenario_param in [cfg.CONF.scenario]:
        LOG.debug('Processing scenario: %s', scenario_param)

        alias = '%s%s.yaml' % (config.SCENARIOS, scenario_param)
        packaged = utils.resolve_relative_path(alias)
        # use packaged scenario or fallback to full path
        scenario_file_name = packaged or scenario_param

        LOG.info('Play scenario: %s', scenario_file_name)
        scenario = utils.read_yaml_file(scenario_file_name)
        scenario['title'] = scenario.get('title') or scenario_file_name
        scenario['file_name'] = scenario_file_name

        play_output = play_scenario(scenario)

        output['scenarios'][scenario['title']] = play_output['scenario']
        output['records'].update(play_output['records'])
        output['agents'].update(play_output['agents'])
        output['tests'].update(play_output['tests'])

    if cfg.CONF.output:
        utils.write_file(json.dumps(output, indent=2), cfg.CONF.output)

    if cfg.CONF.no_report_on_error and 'error' in output:
        LOG.info('Skipped report generation due to errors and '
                 'no_report_on_error=True')
    else:
        report.generate_report(output, cfg.CONF.report_template,
                               cfg.CONF.report, cfg.CONF.subunit,
                               cfg.CONF.book)
示例#3
0
文件: report.py 项目: vefimova/shaker
def generate_report(data, report_template, report_filename, subunit_filename):
    LOG.debug('Generating report, template: %s, output: %s',
              report_template, report_filename or '<dummy>')

    data['records'] += calculate_stats(data['records'], data['tests'])

    sla_records = verify_sla(data['records'], data['tests'])

    if subunit_filename:
        save_to_subunit(sla_records, subunit_filename)

    # add more filters to jinja
    jinja_env = jinja2.Environment(variable_start_string='[[[',
                                   variable_end_string=']]]',
                                   comment_start_string='[[#',
                                   comment_end_string='#]]')
    jinja_env.filters['json'] = json.dumps
    jinja_env.filters['yaml'] = functools.partial(yaml.safe_dump, indent=2,
                                                  default_flow_style=False)

    template = utils.read_file(report_template)
    compiled_template = jinja_env.from_string(template)
    rendered_template = compiled_template.render(dict(report=data))

    if report_filename:
        LOG.debug('Writing report to: %s', report_filename)
        try:
            utils.write_file(rendered_template, report_filename)
            LOG.info('Report saved to: %s', report_filename)
        except IOError as e:
            LOG.error('Failed to write report file: %s', e)
示例#4
0
文件: server.py 项目: esboych/shaker
def main():
    utils.init_config_and_logging(config.COMMON_OPTS + config.OPENSTACK_OPTS +
                                  config.SERVER_OPTS + config.REPORT_OPTS)

    output = dict(records={}, agents={}, scenarios={}, tests={})

    for scenario_param in [cfg.CONF.scenario]:
        LOG.debug('Processing scenario: %s', scenario_param)

        alias = '%s%s.yaml' % (config.SCENARIOS, scenario_param)
        packaged = utils.resolve_relative_path(alias)
        # use packaged scenario or fallback to full path
        scenario_file_name = packaged or scenario_param

        LOG.info('Play scenario: %s', scenario_file_name)
        scenario = utils.read_yaml_file(scenario_file_name)
        scenario['title'] = scenario.get('title') or scenario_file_name
        scenario['file_name'] = scenario_file_name

        play_output = play_scenario(scenario)

        output['scenarios'][scenario['title']] = play_output['scenario']
        output['records'].update(play_output['records'])
        output['agents'].update(play_output['agents'])
        output['tests'].update(play_output['tests'])

    if cfg.CONF.output:
        utils.write_file(json.dumps(output, indent=2), cfg.CONF.output)

    if cfg.CONF.no_report_on_error and 'error' in output:
        LOG.info('Skipped report generation due to errors and '
                 'no_report_on_error=True')
    else:
        report.generate_report(output, cfg.CONF.report_template,
                               cfg.CONF.report, cfg.CONF.subunit)
示例#5
0
def generate_report(data, report_template, report_filename, subunit_filename):
    LOG.debug('Generating report, template: %s, output: %s', report_template,
              report_filename or '<dummy>')

    data['records'] += calculate_stats(data['records'], data['tests'])

    sla_records = verify_sla(data['records'], data['tests'])

    if subunit_filename:
        save_to_subunit(sla_records, subunit_filename)

    # add more filters to jinja
    jinja_env = jinja2.Environment(variable_start_string='[[[',
                                   variable_end_string=']]]',
                                   comment_start_string='[[#',
                                   comment_end_string='#]]')
    jinja_env.filters['json'] = json.dumps
    jinja_env.filters['yaml'] = functools.partial(yaml.safe_dump,
                                                  indent=2,
                                                  default_flow_style=False)

    template = utils.read_file(report_template)
    compiled_template = jinja_env.from_string(template)
    rendered_template = compiled_template.render(dict(report=data))

    if report_filename:
        LOG.debug('Writing report to: %s', report_filename)
        try:
            utils.write_file(rendered_template, report_filename)
            LOG.info('Report saved to: %s', report_filename)
        except IOError as e:
            LOG.error('Failed to write report file: %s', e)
示例#6
0
def main():
    utils.init_config_and_logging(config.COMMON_OPTS + config.OPENSTACK_OPTS +
                                  config.SERVER_OPTS + config.REPORT_OPTS)

    output = dict(records=[], agents={}, scenarios={}, tests={})

    for scenario_file_name in [cfg.CONF.scenario]:
        scenario = utils.read_yaml_file(scenario_file_name)
        scenario['title'] = scenario.get('title') or scenario_file_name
        scenario['file_name'] = cfg.CONF.scenario

        play_output = play_scenario(scenario)

        output['scenarios'][scenario['title']] = play_output['scenario']
        output['records'] += play_output['records']
        output['agents'].update(play_output['agents'])
        output['tests'].update(play_output['tests'])

    if cfg.CONF.output:
        utils.write_file(json.dumps(output, indent=2), cfg.CONF.output)

    if cfg.CONF.no_report_on_error and 'error' in output:
        LOG.info('Skipped report generation due to errors and '
                 'no_report_on_error=True')
    else:
        report.generate_report(output, cfg.CONF.report_template,
                               cfg.CONF.report, cfg.CONF.subunit)
示例#7
0
def act():
    output = dict(records={}, agents={}, scenarios={}, tests={})

    for scenario_param in [cfg.CONF.scenario]:
        LOG.debug('Processing scenario: %s', scenario_param)

        alias_base = scenario_param
        if alias_base[:11] == 'networking/':  # backward compatibility
            LOG.warning('Scenarios from networking/ are moved to openstack/')
            alias_base = 'openstack/' + alias_base[11:]

        alias = '%s%s.yaml' % (config.SCENARIOS, alias_base)
        packaged = utils.resolve_relative_path(alias)
        # use packaged scenario or fallback to full path
        scenario_file_name = packaged or scenario_param

        LOG.info('Play scenario: %s', scenario_file_name)
        scenario = utils.read_yaml_file(scenario_file_name)

        schema = utils.read_yaml_file(utils.resolve_relative_path(
            '%s%s.yaml' % (config.SCHEMAS, 'scenario')))
        utils.validate_yaml(scenario, schema)

        scenario['title'] = scenario.get('title') or scenario_file_name
        scenario['file_name'] = scenario_file_name

        play_output = play_scenario(scenario)

        output['scenarios'][scenario['title']] = play_output['scenario']
        output['records'].update(play_output['records'])
        output['agents'].update(play_output['agents'])
        output['tests'].update(play_output['tests'])

    output_path = ""
    if cfg.CONF.output:
        output_path = cfg.CONF.output
    else:
        tmp_dir = tempfile.gettempdir()
        tmp_report = "shaker_%s.json" % str(
            datetime.datetime.now()).replace(' ', '_')
        output_path = os.path.join(tmp_dir, tmp_report)
    utils.write_file(json.dumps(output, indent=2), output_path)

    if cfg.CONF.no_report_on_error and 'error' in output:
        LOG.info('Skipped report generation due to errors and '
                 'no_report_on_error=True')
    else:
        report.generate_report(output, cfg.CONF.report_template,
                               cfg.CONF.report, cfg.CONF.subunit,
                               cfg.CONF.book)
示例#8
0
def act():
    output = dict(records={}, agents={}, scenarios={}, tests={})

    for scenario_param in [cfg.CONF.scenario]:
        LOG.debug('Processing scenario: %s', scenario_param)

        alias_base = scenario_param
        if alias_base[:11] == 'networking/':  # backward compatibility
            LOG.warning('Scenarios from networking/ are moved to openstack/')
            alias_base = 'openstack/' + alias_base[11:]

        alias = '%s%s.yaml' % (config.SCENARIOS, alias_base)
        packaged = utils.resolve_relative_path(alias)
        # use packaged scenario or fallback to full path
        scenario_file_name = packaged or scenario_param

        LOG.info('Play scenario: %s', scenario_file_name)
        scenario = utils.read_yaml_file(scenario_file_name)

        schema = utils.read_yaml_file(
            utils.resolve_relative_path('%s%s.yaml' %
                                        (config.SCHEMAS, 'scenario')))
        utils.validate_yaml(scenario, schema)

        scenario['title'] = scenario.get('title') or scenario_file_name
        scenario['file_name'] = scenario_file_name

        play_output = play_scenario(scenario)

        output['scenarios'][scenario['title']] = play_output['scenario']
        output['records'].update(play_output['records'])
        output['agents'].update(play_output['agents'])
        output['tests'].update(play_output['tests'])

    if cfg.CONF.output:
        utils.write_file(json.dumps(output, indent=2), cfg.CONF.output)

    if cfg.CONF.no_report_on_error and 'error' in output:
        LOG.info('Skipped report generation due to errors and '
                 'no_report_on_error=True')
    else:
        report.generate_report(output, cfg.CONF.report_template,
                               cfg.CONF.report, cfg.CONF.subunit,
                               cfg.CONF.book)
示例#9
0
def act():
    outputs = []

    message_queue = None
    if 'server_endpoint' in cfg.CONF:
        message_queue = messaging.MessageQueue(cfg.CONF.server_endpoint)

    artifacts_dir = cfg.CONF.artifacts_dir
    if artifacts_dir:
        utils.mkdir_tree(artifacts_dir)

    for scenario_name in cfg.CONF.scenario:
        LOG.info('Play scenario: %s', scenario_name)

        scenario = read_scenario(scenario_name)

        play_output = play_scenario(message_queue, scenario)
        outputs.append(copy.deepcopy(play_output))

        # if requested make separate reports
        if artifacts_dir:
            prefix = utils.strict(scenario_name)
            report_name_fn = functools.partial(utils.join_folder_prefix_ext,
                                               artifacts_dir, prefix)
            utils.write_file(json.dumps(play_output, indent=2),
                             report_name_fn('json'))
            report.generate_report(play_output, cfg.CONF.report_template,
                                   report_name_fn('html'),
                                   report_name_fn('subunit'), report_name_fn())

    LOG.info('Generating aggregated report')
    aggregated = utils.merge_dicts(outputs)

    utils.write_file(json.dumps(aggregated, indent=2), cfg.CONF.output)
    LOG.info('Raw output is stored to: %s', cfg.CONF.output)

    report.generate_report(aggregated, cfg.CONF.report_template,
                           cfg.CONF.report, cfg.CONF.subunit, cfg.CONF.book)
示例#10
0
def generate_report(data, report_template, report_filename, subunit_filename,
                    book_folder):

    calculate_stats(data['records'], data['tests'])

    sla_records = verify_sla(data['records'], data['tests'])
    data['sla'] = output_sla(sla_records)

    if subunit_filename:
        save_to_subunit(sla_records, subunit_filename)

    # add more filters to jinja
    jinja_env = jinja2.Environment(variable_start_string='[[[',
                                   variable_end_string=']]]',
                                   comment_start_string='[[#',
                                   comment_end_string='#]]')
    jinja_env.filters['json'] = json.dumps
    jinja_env.filters['yaml'] = functools.partial(yaml.safe_dump,
                                                  indent=2,
                                                  default_flow_style=False)

    alias_mapper = lambda f: config.REPORT_TEMPLATES + '%s.html' % f
    template = utils.read_file(report_template, alias_mapper=alias_mapper)
    compiled_template = jinja_env.from_string(template)
    rendered_template = compiled_template.render(dict(report=data))

    if report_filename:
        LOG.debug('Writing report to: %s', report_filename)
        try:
            utils.write_file(rendered_template, report_filename)
            LOG.info('Report saved to: %s', report_filename)
        except IOError as e:
            LOG.error('Failed to write report file: %s', e)

    if book_folder:
        writer.write_book(book_folder, data)