Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "redisbench-admin"
version = "0.1.29"
version = "0.1.30"
description = "Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... )."
authors = ["filipecosta90 <filipecosta.90@gmail.com>"]
readme = "README.md"
Expand Down
2 changes: 1 addition & 1 deletion redisbench_admin/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.1.6'
__version__ = '0.1.30'
45 changes: 32 additions & 13 deletions redisbench_admin/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from redisbench_admin.compare.compare import compare_command_logic
from redisbench_admin.export.args import create_export_arguments
from redisbench_admin.export.export import export_command_logic
from redisbench_admin.extract.args import create_extract_arguments
from redisbench_admin.extract.extract import extract_command_logic
from redisbench_admin.run.args import create_run_arguments
from redisbench_admin.run.run import run_command_logic

Expand Down Expand Up @@ -45,28 +47,21 @@ def main():

if requested_tool == "run":
parser = create_run_arguments(parser)
if requested_tool == "extract":
parser = create_extract_arguments(parser)
elif requested_tool == "compare":
parser = create_compare_arguments(parser)
elif requested_tool == "export":
parser = create_export_arguments(parser)
elif requested_tool == "--version":
print("{project_name} {project_version}".format(project_name=project_name, project_version=project_version))
print_version(project_name, project_version)
sys.exit(0)
elif requested_tool == "--help":
print("{project_name} {project_version}".format(project_name=project_name, project_version=project_version))
print("usage: {project_name} <tool> <args>...".format(project_name=project_name))
print(
"\t-) To know more on how to run benchmarks: {project_name} run --help".format(project_name=project_name))
print(
"\t-) To know more on how to compare benchmark results: {project_name} compare --help".format(
project_name=project_name))
print(
"\t-) To know more on how to export benchmark results: {project_name} export --help".format(
project_name=project_name))
print_help(project_name, project_version)
sys.exit(0)
else:
print("Invalid redisbench-admin <tool>. Requested tool: {}. Available tools: [run,export,compare]".format(
requested_tool))
valid_tool_options = ["run", "export", "compare", "retrieve"]
print_invalid_tool_option(requested_tool, valid_tool_options)
sys.exit(1)

argv = sys.argv[2:]
Expand All @@ -78,3 +73,27 @@ def main():
compare_command_logic(args)
if requested_tool == "export":
export_command_logic(args)
if requested_tool == "extract":
extract_command_logic(args)


def print_invalid_tool_option(requested_tool, valid_tool_options):
print("Invalid redisbench-admin <tool>. Requested tool: {}. Available tools: {}".format(
requested_tool, ",".join(valid_tool_options)))


def print_version(project_name, project_version):
print("{project_name} {project_version}".format(project_name=project_name, project_version=project_version))


def print_help(project_name, project_version):
print("{project_name} {project_version}".format(project_name=project_name, project_version=project_version))
print("usage: {project_name} <tool> <args>...".format(project_name=project_name))
print(
"\t-) To know more on how to run benchmarks: {project_name} run --help".format(project_name=project_name))
print(
"\t-) To know more on how to compare benchmark results: {project_name} compare --help".format(
project_name=project_name))
print(
"\t-) To know more on how to export benchmark results: {project_name} export --help".format(
project_name=project_name))
7 changes: 6 additions & 1 deletion redisbench_admin/export/args.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@ def create_export_arguments(parser):
help="comma separated list of steps to be analyzed given the benchmark result files")
parser.add_argument('--exporter', type=str, default="redistimeseries",
help="exporter to be used ( either csv or redistimeseries )")
parser.add_argument('--results-format', type=str, default="redis-benchmark",
help="results format of the the benchmark results files to read results from ( either memtier_benchmark, redis-benchmark, or ftsb_redisearch )")
parser.add_argument('--use-result', type=str, default="median-result",
help="for each key-metric, use either worst-result, best-result, or median-result")
parser.add_argument('--extra-tags', type=str, default="", help='comma separated extra tags in the format of key1=value,key2=value,...')
parser.add_argument('--extra-tags', type=str, default="",
help='comma separated extra tags in the format of key1=value,key2=value,...')
parser.add_argument('--host', type=str, default="localhost",
help="redistimeseries host")
parser.add_argument('--port', type=int, default=6379,
help="redistimeseries port")
parser.add_argument('--password', type=str, default=None,
help="redistimeseries password")
parser.add_argument('--input-tags-json', type=str, default="",
help='input filename containing the extracted tags from redis.')
return parser
Empty file.
82 changes: 82 additions & 0 deletions redisbench_admin/export/common/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
def get_timeserie_name(labels_kv_array):
name = ""
for label_kv in labels_kv_array:
k = list(label_kv.keys())[0]
v = list(label_kv.values())[0]
k = prepare_tags(k)
v = prepare_tags(v)
if name != "":
name += ":"
name += "{k}={v}".format(k=k, v=v)
return name


def prepare_tags(k):
if type(k) != str:
k = "{}".format(k)
k = k.replace(" ", "_")
k = k.replace("(", "_")
k = k.replace(")", "_")
k = k.lower()
return k


def add_datapoint(time_series_dict, broader_ts_name, start_time_ms, metric_value, tags_array):
if broader_ts_name not in time_series_dict:
tags_dict = {}
for tag_kv in tags_array:
k = list(tag_kv.keys())[0]
v = list(tag_kv.values())[0]
tags_dict[k] = v
time_series_dict[broader_ts_name] = {"index": [], "data": [], "tags-array": tags_array, "tags": tags_dict}
time_series_dict[broader_ts_name]["index"].append(start_time_ms)
time_series_dict[broader_ts_name]["data"].append(metric_value)


def split_tags_string(extra_tags):
result = []
extra_tags = extra_tags.split(",")
if len(extra_tags) > 0:
for extra_tag in extra_tags:
kv = extra_tag.split("=")
if len(kv) == 2:
k = prepare_tags(kv[0])
v = prepare_tags(kv[1])
result.append({k: v})
return result


def split_key_metrics_by_step(key_metrics_specs):
key_metrics_by_step = {}
for key_metric_spec in key_metrics_specs:
step = None
if "step" in key_metric_spec and "metric-name" in key_metric_spec:
step = key_metric_spec["step"]
metric_name = key_metric_spec["metric-name"]
if step not in key_metrics_by_step:
key_metrics_by_step[step] = {}
key_metrics_by_step[step][metric_name] = key_metric_spec
return key_metrics_by_step


def get_or_None(dict, property):
result = None
if property in dict:
result = dict[property]
return result


def get_kv_tags(deployment_type, extra_tags_array, git_sha, project, project_version, results_type, step,
testcase_name):
common_broader_kv_tags = [
{"project": project}, {"use-case": testcase_name}, {"deployment-type": deployment_type},
{"results-type": results_type}, {"step": step}]
common_broader_kv_tags.extend(extra_tags_array)
common_version_kv_tags = [
{"project": project}, {"use-case": testcase_name}, {"deployment-type": deployment_type},
{"results-type": results_type}, {"step": step}, {"version": project_version}]
common_version_kv_tags.extend(extra_tags_array)
common_git_sha_kv_tags = [
{"project": project}, {"use-case": testcase_name}, {"deployment-type": deployment_type},
{"results-type": results_type}, {"step": step}, {"version": project_version}, {"git_sha": git_sha}]
return common_broader_kv_tags, common_git_sha_kv_tags, common_version_kv_tags
Loading