Skip to content

Commit 13630cd

Browse files
Enabled latencystats metric collection and fixed lack of setupname on timeseries for cpu/memory/commandstats (#400)
* Enabled latencystats metric collection and fixed lack of setupname on timeseries for cpu/memory/commandstats * Enabled commandstats/latencystats/cpu/memory data collection on all branches and tags * Extended test_metrics with latencystats checks
1 parent afab8fe commit 13630cd

File tree

5 files changed

+97
-16
lines changed

5 files changed

+97
-16
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.10.0"
3+
version = "0.10.1"
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 <filipecosta.90@gmail.com>","Redis Performance Group <performance@redis.com>"]
66
readme = "README.md"

redisbench_admin/run/metrics.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ def extract_results_table(
8585

8686

8787
def collect_redis_metrics(
88-
redis_conns, sections=["memory", "cpu", "commandstats"], section_filter=None
88+
redis_conns,
89+
sections=["memory", "cpu", "commandstats", "latencystats"],
90+
section_filter=None,
8991
):
9092
start_time = dt.datetime.utcnow()
9193
start_time_ms = int((start_time - dt.datetime(1970, 1, 1)).total_seconds() * 1000)

redisbench_admin/run_remote/run_remote.py

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,7 @@
8989

9090

9191
def is_important_data(tf_github_branch, artifact_version):
92-
if artifact_version is not None or (
93-
tf_github_branch == "master" or tf_github_branch == "main"
94-
):
95-
return True
96-
else:
97-
return False
92+
return True
9893

9994

10095
def run_remote_command_logic(args, project_name, project_version):
@@ -812,6 +807,28 @@ def run_remote_command_logic(args, project_name, project_version):
812807
{"metric-type": "commandstats"},
813808
expire_ms,
814809
)
810+
(
811+
end_time_ms,
812+
_,
813+
overall_commandstats_metrics,
814+
) = collect_redis_metrics(
815+
redis_conns, ["latencystats"]
816+
)
817+
export_redis_metrics(
818+
artifact_version,
819+
end_time_ms,
820+
overall_commandstats_metrics,
821+
rts,
822+
setup_name,
823+
setup_type,
824+
test_name,
825+
tf_github_branch,
826+
tf_github_org,
827+
tf_github_repo,
828+
tf_triggering_env,
829+
{"metric-type": "latencystats"},
830+
expire_ms,
831+
)
815832

816833
if setup_details["env"] is None:
817834
if (
@@ -1204,10 +1221,11 @@ def export_redis_metrics(
12041221
metric_name,
12051222
metric_value,
12061223
) in overall_end_time_metrics.items():
1207-
tsname_metric = "{}/{}/{}/benchmark_end/{}".format(
1224+
tsname_metric = "{}/{}/{}/benchmark_end/{}/{}".format(
12081225
sprefix,
12091226
test_name,
12101227
by_variant,
1228+
setup_name,
12111229
metric_name,
12121230
)
12131231

@@ -1219,8 +1237,18 @@ def export_redis_metrics(
12191237
tsname_metric,
12201238
)
12211239
)
1222-
variant_labels_dict["test_name"] = test_name
12231240
variant_labels_dict["metric"] = metric_name
1241+
commandstats_latencystats_process_name(
1242+
metric_name, "commandstats_cmdstat_", setup_name, variant_labels_dict
1243+
)
1244+
commandstats_latencystats_process_name(
1245+
metric_name,
1246+
"latencystats_latency_percentiles_usec_",
1247+
setup_name,
1248+
variant_labels_dict,
1249+
)
1250+
1251+
variant_labels_dict["test_name"] = test_name
12241252
if metadata_dict is not None:
12251253
variant_labels_dict.update(metadata_dict)
12261254

@@ -1243,6 +1271,28 @@ def export_redis_metrics(
12431271
return datapoint_errors, datapoint_inserts
12441272

12451273

1274+
def commandstats_latencystats_process_name(
1275+
metric_name, prefix, setup_name, variant_labels_dict
1276+
):
1277+
if prefix in metric_name:
1278+
command_and_metric_and_shard = metric_name[len(prefix) :]
1279+
command = (
1280+
command_and_metric_and_shard[0]
1281+
+ command_and_metric_and_shard[1:].split("_", 1)[0]
1282+
)
1283+
metric_and_shard = command_and_metric_and_shard[1:].split("_", 1)[1]
1284+
metric = metric_and_shard
1285+
shard = "1"
1286+
if "_shard_" in metric_and_shard:
1287+
metric = metric_and_shard.split("_shard_")[0]
1288+
shard = metric_and_shard.split("_shard_")[1]
1289+
variant_labels_dict["metric"] = metric
1290+
variant_labels_dict["command"] = command
1291+
variant_labels_dict["command_and_setup"] = "{} - {}".format(command, setup_name)
1292+
variant_labels_dict["shard"] = shard
1293+
variant_labels_dict["metric_and_shard"] = metric_and_shard
1294+
1295+
12461296
def shutdown_remote_redis(redis_conns, ssh_tunnel):
12471297
logging.info("Shutting down remote redis.")
12481298
for conn in redis_conns:

tests/test_metrics.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ def test_collect_redis_metrics():
4141
rts.ping()
4242
time_ms, metrics_arr, overall_metrics = collect_redis_metrics([rts])
4343
assert len(metrics_arr) == 1
44-
assert len(metrics_arr[0].keys()) == 3
44+
assert len(metrics_arr[0].keys()) == 4
4545
assert "cpu" in metrics_arr[0].keys()
4646
assert "memory" in metrics_arr[0].keys()
4747
assert "commandstats" in metrics_arr[0].keys()
48+
assert "latencystats" in metrics_arr[0].keys()
4849
assert "allocator_active" in metrics_arr[0]["memory"]
4950
assert "cmdstat_ping" in metrics_arr[0]["commandstats"]
5051
allocator_active = metrics_arr[0]["memory"]["allocator_active"]
@@ -55,5 +56,9 @@ def test_collect_redis_metrics():
5556
assert "memory_allocator_active" in overall_metrics
5657
assert "cmdstat_ping" in metrics_arr[0]["commandstats"]
5758
assert "cmdstat_ping" in metrics_arr[1]["commandstats"]
59+
assert "latency_percentiles_usec_ping" in metrics_arr[0]["latencystats"]
60+
assert "latency_percentiles_usec_ping" in metrics_arr[1]["latencystats"]
5861
assert "commandstats_cmdstat_ping_calls_shard_1" in overall_metrics
5962
assert "commandstats_cmdstat_ping_calls_shard_2" in overall_metrics
63+
assert "latencystats_latency_percentiles_usec_ping_p50_shard_1" in overall_metrics
64+
assert "latencystats_latency_percentiles_usec_ping_p50_shard_2" in overall_metrics

tests/test_run_remote.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,41 @@ def test_export_redis_metrics():
8282
tf_triggering_env,
8383
{"metric-type": "test-tag"},
8484
)
85-
assert (
85+
labels_rts_cmdstats = (
8686
rts.ts()
8787
.info(
88-
"ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/commandstats_cmdstat_ping_calls"
88+
"ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/setup_name/commandstats_cmdstat_ping_calls"
8989
)
90-
.labels["metric-type"]
91-
== "test-tag"
90+
.labels
9291
)
93-
assert "ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/commandstats_cmdstat_ping_calls" in rts.ts().queryindex(
92+
assert labels_rts_cmdstats["metric-type"] == "test-tag"
93+
assert labels_rts_cmdstats["command"] == "ping"
94+
assert labels_rts_cmdstats["command_and_setup"] == "ping - setup_name"
95+
assert labels_rts_cmdstats["metric"] == "calls"
96+
assert labels_rts_cmdstats["shard"] == "1"
97+
assert labels_rts_cmdstats["metric_and_shard"] == "calls"
98+
assert "ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/setup_name/commandstats_cmdstat_ping_calls" in rts.ts().queryindex(
9499
["metric-type=test-tag"]
95100
)
101+
assert "ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/setup_name/commandstats_cmdstat_ping_calls" in rts.ts().queryindex(
102+
["command=ping"]
103+
)
104+
assert "ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/setup_name/latencystats_latency_percentiles_usec_ping_p50" in rts.ts().queryindex(
105+
["command=ping"]
106+
)
107+
labels_rts_latencystats = (
108+
rts.ts()
109+
.info(
110+
"ci.benchmarks.redislabs/env/org/repo/test1/by.version/6.2.3/benchmark_end/setup_name/latencystats_latency_percentiles_usec_ping_p50"
111+
)
112+
.labels
113+
)
114+
assert labels_rts_latencystats["metric-type"] == "test-tag"
115+
assert labels_rts_latencystats["command"] == "ping"
116+
assert labels_rts_latencystats["command_and_setup"] == "ping - setup_name"
117+
assert labels_rts_latencystats["metric"] == "p50"
118+
assert labels_rts_latencystats["shard"] == "1"
119+
assert labels_rts_latencystats["metric_and_shard"] == "p50"
96120
assert datapoint_errors == 0
97121
assert datapoint_inserts == (1 * len(list(overall_end_time_metrics.keys())))
98122
tf_github_branch = "master"

0 commit comments

Comments
 (0)