Skip to content

Commit 4659c10

Browse files
[fix] Fixed server metric export on empty branch info (#266)
1 parent 97294bc commit 4659c10

File tree

3 files changed

+203
-70
lines changed

3 files changed

+203
-70
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "redisbench-admin"
3-
version = "0.6.6"
3+
version = "0.6.7"
44
description = "Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... )."
55
authors = ["filipecosta90 <[email protected]>","Redis Performance Group <[email protected]>"]
66
readme = "README.md"

redisbench_admin/run_remote/run_remote.py

Lines changed: 101 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -510,76 +510,25 @@ def run_remote_command_logic(args, project_name, project_version):
510510
)
511511
)
512512

513-
(
514-
end_time_ms,
515-
_,
516-
overall_end_time_metrics,
517-
) = collect_redis_metrics(redis_conns)
518-
519-
sprefix = "ci.benchmarks.redislabs/" + "{triggering_env}/{github_org}/{github_repo}".format(
520-
triggering_env=tf_triggering_env,
521-
github_org=tf_github_org,
522-
github_repo=tf_github_repo,
523-
)
524-
logging.info(
525-
"Adding a total of {} server side metrics collected at the end of benchmark".format(
526-
len(list(overall_end_time_metrics.items()))
527-
)
528-
)
529-
timeseries_dict = {}
530-
by_variants = {}
531-
if tf_github_branch is not None:
532-
by_variants[
533-
"by.branch/{}".format(tf_github_branch)
534-
] = {"branch": tf_github_branch}
535-
if artifact_version is not None:
536-
by_variants[
537-
"by.version/{}".format(artifact_version)
538-
] = {"version": artifact_version}
539-
for (
540-
by_variant,
541-
variant_labels_dict,
542-
) in by_variants.items():
543-
for (
544-
metric_name,
545-
metric_value,
546-
) in overall_end_time_metrics.items():
547-
tsname_metric = (
548-
"{}/{}/{}/benchmark_end/{}".format(
549-
sprefix,
550-
test_name,
551-
by_variant,
552-
metric_name,
553-
)
554-
)
555-
556-
logging.debug(
557-
"Adding a redis server side metric collected at the end of benchmark."
558-
+ " metric_name={} metric_value={} time-series name: {}".format(
559-
metric_name,
560-
metric_value,
561-
tsname_metric,
562-
)
563-
)
564-
variant_labels_dict["test_name"] = test_name
565-
variant_labels_dict["metric"] = metric_name
566-
567-
timeseries_dict[tsname_metric] = {
568-
"labels": get_project_ts_tags(
569-
tf_github_org,
570-
tf_github_repo,
571-
setup_name,
572-
setup_type,
573-
tf_triggering_env,
574-
variant_labels_dict,
575-
None,
576-
None,
577-
),
578-
"data": {end_time_ms: metric_value},
579-
}
580513
if args.push_results_redistimeseries:
581-
push_data_to_redistimeseries(
582-
rts, timeseries_dict
514+
(
515+
end_time_ms,
516+
_,
517+
overall_end_time_metrics,
518+
) = collect_redis_metrics(redis_conns)
519+
export_redis_metrics(
520+
args,
521+
artifact_version,
522+
end_time_ms,
523+
overall_end_time_metrics,
524+
rts,
525+
setup_name,
526+
setup_type,
527+
test_name,
528+
tf_github_branch,
529+
tf_github_org,
530+
tf_github_repo,
531+
tf_triggering_env,
583532
)
584533

585534
if setup_details["env"] is None:
@@ -787,6 +736,89 @@ def run_remote_command_logic(args, project_name, project_version):
787736
exit(return_code)
788737

789738

739+
def export_redis_metrics(
740+
artifact_version,
741+
end_time_ms,
742+
overall_end_time_metrics,
743+
rts,
744+
setup_name,
745+
setup_type,
746+
test_name,
747+
tf_github_branch,
748+
tf_github_org,
749+
tf_github_repo,
750+
tf_triggering_env,
751+
):
752+
datapoint_errors = 0
753+
datapoint_inserts = 0
754+
sprefix = (
755+
"ci.benchmarks.redislabs/"
756+
+ "{triggering_env}/{github_org}/{github_repo}".format(
757+
triggering_env=tf_triggering_env,
758+
github_org=tf_github_org,
759+
github_repo=tf_github_repo,
760+
)
761+
)
762+
logging.info(
763+
"Adding a total of {} server side metrics collected at the end of benchmark".format(
764+
len(list(overall_end_time_metrics.items()))
765+
)
766+
)
767+
timeseries_dict = {}
768+
by_variants = {}
769+
if tf_github_branch is not None and tf_github_branch != "":
770+
by_variants["by.branch/{}".format(tf_github_branch)] = {
771+
"branch": tf_github_branch
772+
}
773+
if artifact_version is not None and artifact_version != "":
774+
by_variants["by.version/{}".format(artifact_version)] = {
775+
"version": artifact_version
776+
}
777+
for (
778+
by_variant,
779+
variant_labels_dict,
780+
) in by_variants.items():
781+
for (
782+
metric_name,
783+
metric_value,
784+
) in overall_end_time_metrics.items():
785+
tsname_metric = "{}/{}/{}/benchmark_end/{}".format(
786+
sprefix,
787+
test_name,
788+
by_variant,
789+
metric_name,
790+
)
791+
792+
logging.debug(
793+
"Adding a redis server side metric collected at the end of benchmark."
794+
+ " metric_name={} metric_value={} time-series name: {}".format(
795+
metric_name,
796+
metric_value,
797+
tsname_metric,
798+
)
799+
)
800+
variant_labels_dict["test_name"] = test_name
801+
variant_labels_dict["metric"] = metric_name
802+
803+
timeseries_dict[tsname_metric] = {
804+
"labels": get_project_ts_tags(
805+
tf_github_org,
806+
tf_github_repo,
807+
setup_name,
808+
setup_type,
809+
tf_triggering_env,
810+
variant_labels_dict,
811+
None,
812+
None,
813+
),
814+
"data": {end_time_ms: metric_value},
815+
}
816+
i_errors, i_inserts = push_data_to_redistimeseries(rts, timeseries_dict)
817+
datapoint_errors = datapoint_errors + i_errors
818+
datapoint_inserts = datapoint_inserts + i_inserts
819+
return datapoint_errors, datapoint_inserts
820+
821+
790822
def shutdown_remote_redis(redis_conns, ssh_tunnel):
791823
logging.info("Shutting down remote redis.")
792824
for conn in redis_conns:

tests/test_run_remote.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# BSD 3-Clause License
2+
#
3+
# Copyright (c) 2021., Redis Labs Modules
4+
# All rights reserved.
5+
#
6+
import os
7+
8+
import redis
9+
from redisbench_admin.run.metrics import collect_redis_metrics
10+
from redistimeseries.client import Client
11+
12+
from redisbench_admin.run_remote.run_remote import export_redis_metrics
13+
14+
15+
def test_export_redis_metrics():
16+
end_time_ms = 1
17+
overall_end_time_metrics = {}
18+
setup_name = "setup_name"
19+
test_name = "test1"
20+
tf_github_branch = None
21+
tf_github_org = "org"
22+
tf_github_repo = "repo"
23+
tf_triggering_env = "env"
24+
setup_type = "oss-standalone"
25+
artifact_version = None
26+
try:
27+
rts_host = os.getenv("RTS_DATASINK_HOST", None)
28+
rts_port = 16379
29+
if rts_host is None:
30+
assert False
31+
rts = Client(port=rts_port, host=rts_host)
32+
rts.redis.ping()
33+
datapoint_errors, datapoint_inserts = export_redis_metrics(
34+
artifact_version,
35+
end_time_ms,
36+
overall_end_time_metrics,
37+
rts,
38+
setup_name,
39+
setup_type,
40+
test_name,
41+
tf_github_branch,
42+
tf_github_org,
43+
tf_github_repo,
44+
tf_triggering_env,
45+
)
46+
assert datapoint_errors == 0
47+
assert datapoint_inserts == 0
48+
tf_github_branch = ""
49+
artifact_version = ""
50+
datapoint_errors, datapoint_inserts = export_redis_metrics(
51+
artifact_version,
52+
end_time_ms,
53+
overall_end_time_metrics,
54+
rts,
55+
setup_name,
56+
setup_type,
57+
test_name,
58+
tf_github_branch,
59+
tf_github_org,
60+
tf_github_repo,
61+
tf_triggering_env,
62+
)
63+
assert datapoint_errors == 0
64+
assert datapoint_inserts == 0
65+
66+
time_ms, _, overall_end_time_metrics = collect_redis_metrics([rts.redis])
67+
artifact_version = "6.2.3"
68+
datapoint_errors, datapoint_inserts = export_redis_metrics(
69+
artifact_version,
70+
time_ms,
71+
overall_end_time_metrics,
72+
rts,
73+
setup_name,
74+
setup_type,
75+
test_name,
76+
tf_github_branch,
77+
tf_github_org,
78+
tf_github_repo,
79+
tf_triggering_env,
80+
)
81+
assert datapoint_errors == 0
82+
assert datapoint_inserts == (1 * len(list(overall_end_time_metrics.keys())))
83+
tf_github_branch = "master"
84+
datapoint_errors, datapoint_inserts = export_redis_metrics(
85+
artifact_version,
86+
time_ms,
87+
overall_end_time_metrics,
88+
rts,
89+
setup_name,
90+
setup_type,
91+
test_name,
92+
tf_github_branch,
93+
tf_github_org,
94+
tf_github_repo,
95+
tf_triggering_env,
96+
)
97+
assert datapoint_errors == 0
98+
assert datapoint_inserts == (2 * len(list(overall_end_time_metrics.keys())))
99+
100+
except redis.exceptions.ConnectionError:
101+
pass

0 commit comments

Comments
 (0)