redisbench-admin 0.11.19__py3-none-any.whl → 0.11.21__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- redisbench_admin/compare/args.py +0 -2
- redisbench_admin/compare/compare.py +27 -45
- redisbench_admin/deploy/deploy.py +10 -5
- redisbench_admin/export/export.py +7 -1
- redisbench_admin/profilers/perf.py +24 -24
- redisbench_admin/run/args.py +11 -0
- redisbench_admin/run/common.py +57 -32
- redisbench_admin/run/ftsb/ftsb.py +0 -1
- redisbench_admin/run/ssh.py +0 -15
- redisbench_admin/run_async/async_terraform.py +10 -2
- redisbench_admin/run_async/render_files.py +3 -3
- redisbench_admin/run_local/args.py +2 -0
- redisbench_admin/run_local/local_db.py +6 -2
- redisbench_admin/run_local/run_local.py +18 -12
- redisbench_admin/run_remote/remote_env.py +12 -0
- redisbench_admin/run_remote/remote_helpers.py +0 -1
- redisbench_admin/run_remote/run_remote.py +25 -18
- redisbench_admin/run_remote/standalone.py +5 -6
- redisbench_admin/run_remote/terraform.py +5 -1
- redisbench_admin/utils/benchmark_config.py +0 -8
- redisbench_admin/utils/remote.py +15 -56
- redisbench_admin/utils/utils.py +7 -2
- redisbench_admin/watchdog/watchdog.py +8 -9
- {redisbench_admin-0.11.19.dist-info → redisbench_admin-0.11.21.dist-info}/METADATA +2 -3
- {redisbench_admin-0.11.19.dist-info → redisbench_admin-0.11.21.dist-info}/RECORD +28 -28
- {redisbench_admin-0.11.19.dist-info → redisbench_admin-0.11.21.dist-info}/LICENSE +0 -0
- {redisbench_admin-0.11.19.dist-info → redisbench_admin-0.11.21.dist-info}/WHEEL +0 -0
- {redisbench_admin-0.11.19.dist-info → redisbench_admin-0.11.21.dist-info}/entry_points.txt +0 -0
redisbench_admin/compare/args.py
CHANGED
|
@@ -53,8 +53,6 @@ def create_compare_arguments(parser):
|
|
|
53
53
|
parser.add_argument("--deployment_type", type=str, default="oss-standalone")
|
|
54
54
|
parser.add_argument("--baseline_deployment_name", type=str, default="")
|
|
55
55
|
parser.add_argument("--comparison_deployment_name", type=str, default="")
|
|
56
|
-
parser.add_argument("--baseline_github_org", type=str, default=GITHUB_ORG)
|
|
57
|
-
parser.add_argument("--comparison_github_org", type=str, default=GITHUB_ORG)
|
|
58
56
|
parser.add_argument("--metric_name", type=str, default=None)
|
|
59
57
|
parser.add_argument("--running_platform", type=str, default=None)
|
|
60
58
|
parser.add_argument("--extra-filter", type=str, default=None)
|
|
@@ -166,8 +166,6 @@ def compare_command_logic(args, project_name, project_version):
|
|
|
166
166
|
auto_approve = args.auto_approve
|
|
167
167
|
running_platform = args.running_platform
|
|
168
168
|
grafana_base_dashboard = args.grafana_base_dashboard
|
|
169
|
-
baseline_github_org = args.baseline_github_org
|
|
170
|
-
comparison_github_org = args.comparison_github_org
|
|
171
169
|
# using an access token
|
|
172
170
|
is_actionable_pr = False
|
|
173
171
|
contains_regression_comment = False
|
|
@@ -193,38 +191,32 @@ def compare_command_logic(args, project_name, project_version):
|
|
|
193
191
|
logging.info("Detected github token")
|
|
194
192
|
g = Github(github_token)
|
|
195
193
|
if pull_request is not None and pull_request != "":
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
regression_comment.html_url
|
|
214
|
-
)
|
|
194
|
+
pull_request_n = int(pull_request)
|
|
195
|
+
github_pr = (
|
|
196
|
+
g.get_user(tf_github_org)
|
|
197
|
+
.get_repo(tf_github_repo)
|
|
198
|
+
.get_issue(pull_request_n)
|
|
199
|
+
)
|
|
200
|
+
comments = github_pr.get_comments()
|
|
201
|
+
pr_link = github_pr.html_url
|
|
202
|
+
logging.info("Working on github PR already: {}".format(pr_link))
|
|
203
|
+
is_actionable_pr = True
|
|
204
|
+
contains_regression_comment, pos = check_regression_comment(comments)
|
|
205
|
+
if contains_regression_comment:
|
|
206
|
+
regression_comment = comments[pos]
|
|
207
|
+
old_regression_comment_body = regression_comment.body
|
|
208
|
+
logging.info(
|
|
209
|
+
"Already contains regression comment. Link: {}".format(
|
|
210
|
+
regression_comment.html_url
|
|
215
211
|
)
|
|
216
|
-
if verbose:
|
|
217
|
-
logging.info("Printing old regression comment:")
|
|
218
|
-
print("".join(["-" for x in range(1, 80)]))
|
|
219
|
-
print(regression_comment.body)
|
|
220
|
-
print("".join(["-" for x in range(1, 80)]))
|
|
221
|
-
else:
|
|
222
|
-
logging.info("Does not contain regression comment")
|
|
223
|
-
|
|
224
|
-
except Exception as e:
|
|
225
|
-
logging.error(
|
|
226
|
-
f"Error while working with github. exception {e.__str__()}"
|
|
227
212
|
)
|
|
213
|
+
if verbose:
|
|
214
|
+
logging.info("Printing old regression comment:")
|
|
215
|
+
print("".join(["-" for x in range(1, 80)]))
|
|
216
|
+
print(regression_comment.body)
|
|
217
|
+
print("".join(["-" for x in range(1, 80)]))
|
|
218
|
+
else:
|
|
219
|
+
logging.info("Does not contain regression comment")
|
|
228
220
|
|
|
229
221
|
grafana_dashboards_uids = {
|
|
230
222
|
"redisgraph": "SH9_rQYGz",
|
|
@@ -282,8 +274,6 @@ def compare_command_logic(args, project_name, project_version):
|
|
|
282
274
|
to_ts_ms,
|
|
283
275
|
use_metric_context_path,
|
|
284
276
|
running_platform,
|
|
285
|
-
baseline_github_org,
|
|
286
|
-
comparison_github_org,
|
|
287
277
|
)
|
|
288
278
|
comment_body = ""
|
|
289
279
|
if total_comparison_points > 0:
|
|
@@ -508,8 +498,6 @@ def compute_regression_table(
|
|
|
508
498
|
to_ts_ms=None,
|
|
509
499
|
use_metric_context_path=None,
|
|
510
500
|
running_platform=None,
|
|
511
|
-
baseline_github_org="",
|
|
512
|
-
comparison_github_org="",
|
|
513
501
|
):
|
|
514
502
|
START_TIME_NOW_UTC, _, _ = get_start_time_vars()
|
|
515
503
|
START_TIME_LAST_MONTH_UTC = START_TIME_NOW_UTC - datetime.timedelta(days=31)
|
|
@@ -595,8 +583,6 @@ def compute_regression_table(
|
|
|
595
583
|
test_names,
|
|
596
584
|
tf_triggering_env,
|
|
597
585
|
verbose,
|
|
598
|
-
baseline_github_org,
|
|
599
|
-
comparison_github_org,
|
|
600
586
|
running_platform,
|
|
601
587
|
)
|
|
602
588
|
logging.info(
|
|
@@ -667,7 +653,7 @@ def get_by_strings(
|
|
|
667
653
|
comparison_str = comparison_branch
|
|
668
654
|
|
|
669
655
|
if baseline_tag is not None:
|
|
670
|
-
if
|
|
656
|
+
if comparison_covered:
|
|
671
657
|
logging.error(
|
|
672
658
|
"--baseline-branch and --baseline-tag are mutually exclusive. Pick one..."
|
|
673
659
|
)
|
|
@@ -724,8 +710,6 @@ def from_rts_to_regression_table(
|
|
|
724
710
|
test_names,
|
|
725
711
|
tf_triggering_env,
|
|
726
712
|
verbose,
|
|
727
|
-
baseline_github_org="",
|
|
728
|
-
comparison_github_org="",
|
|
729
713
|
running_platform=None,
|
|
730
714
|
):
|
|
731
715
|
print_all = print_regressions_only is False and print_improvements_only is False
|
|
@@ -748,7 +732,6 @@ def from_rts_to_regression_table(
|
|
|
748
732
|
"{}={}".format(test_filter, test_name),
|
|
749
733
|
"deployment_name={}".format(baseline_deployment_name),
|
|
750
734
|
"triggering_env={}".format(tf_triggering_env),
|
|
751
|
-
"github_org={}".format(baseline_github_org),
|
|
752
735
|
]
|
|
753
736
|
if running_platform is not None:
|
|
754
737
|
filters_baseline.append("running_platform={}".format(running_platform))
|
|
@@ -758,7 +741,6 @@ def from_rts_to_regression_table(
|
|
|
758
741
|
"{}={}".format(test_filter, test_name),
|
|
759
742
|
"deployment_name={}".format(comparison_deployment_name),
|
|
760
743
|
"triggering_env={}".format(tf_triggering_env),
|
|
761
|
-
"github_org={}".format(comparison_github_org),
|
|
762
744
|
]
|
|
763
745
|
if running_platform is not None:
|
|
764
746
|
filters_comparison.append("running_platform={}".format(running_platform))
|
|
@@ -1061,9 +1043,9 @@ def get_v_pct_change_and_largest_var(
|
|
|
1061
1043
|
if last_n < 0 or (last_n > 0 and len(comparison_values) < last_n):
|
|
1062
1044
|
comparison_values.append(tuple[1])
|
|
1063
1045
|
comparison_df = pd.DataFrame(comparison_values)
|
|
1064
|
-
comparison_median = float(comparison_df.median()
|
|
1046
|
+
comparison_median = float(comparison_df.median())
|
|
1065
1047
|
comparison_v = comparison_median
|
|
1066
|
-
comparison_std = float(comparison_df.std()
|
|
1048
|
+
comparison_std = float(comparison_df.std())
|
|
1067
1049
|
if verbose:
|
|
1068
1050
|
logging.info(
|
|
1069
1051
|
"comparison_datapoints: {} value: {}; std-dev: {}; median: {}".format(
|
|
@@ -69,13 +69,19 @@ def deploy_command_logic(args, project_name, project_version):
|
|
|
69
69
|
)
|
|
70
70
|
tf_setup_name_sufix = "{}-{}".format(args.setup_name_sufix, tf_github_sha)
|
|
71
71
|
tf_setup_name = "{}{}".format(remote_setup, tf_setup_name_sufix)
|
|
72
|
-
terraform_backend_key = "benchmarks/infrastructure/{}.tfstate".format(
|
|
73
|
-
tf_setup_name
|
|
74
|
-
).replace("/", "-")
|
|
72
|
+
terraform_backend_key = "benchmarks/infrastructure/{}.tfstate".format(tf_setup_name)
|
|
75
73
|
tf_triggering_env = "redisbench-admin-deploy"
|
|
76
74
|
logging.info("Setting an infra timeout of {} secs".format(infra_timeout_secs))
|
|
77
75
|
if args.destroy is False:
|
|
78
|
-
(
|
|
76
|
+
(
|
|
77
|
+
tf_return_code,
|
|
78
|
+
_,
|
|
79
|
+
_,
|
|
80
|
+
_,
|
|
81
|
+
_,
|
|
82
|
+
_,
|
|
83
|
+
_,
|
|
84
|
+
) = setup_remote_environment(
|
|
79
85
|
tf,
|
|
80
86
|
tf_github_sha,
|
|
81
87
|
tf_github_actor,
|
|
@@ -103,7 +109,6 @@ def deploy_command_logic(args, project_name, project_version):
|
|
|
103
109
|
_, _, _ = tf.init(
|
|
104
110
|
capture_output=True,
|
|
105
111
|
backend_config={"key": terraform_backend_key},
|
|
106
|
-
reconfigure=True,
|
|
107
112
|
)
|
|
108
113
|
logging.info("Refreshing remote state")
|
|
109
114
|
_, _, _ = tf.refresh()
|
|
@@ -42,7 +42,13 @@ def export_command_logic(args, project_name, project_version):
|
|
|
42
42
|
deployment_name = args.deployment_name
|
|
43
43
|
deployment_type = args.deployment_type
|
|
44
44
|
results_format = args.results_format
|
|
45
|
-
(
|
|
45
|
+
(
|
|
46
|
+
_,
|
|
47
|
+
github_branch,
|
|
48
|
+
github_org,
|
|
49
|
+
github_repo,
|
|
50
|
+
_,
|
|
51
|
+
) = git_vars_crosscheck(
|
|
46
52
|
None, args.github_branch, args.github_org, args.github_repo, None
|
|
47
53
|
)
|
|
48
54
|
exporter_timemetric_path = None
|
|
@@ -400,9 +400,9 @@ class Perf:
|
|
|
400
400
|
"Main THREAD Flame Graph: " + use_case, details
|
|
401
401
|
)
|
|
402
402
|
if artifact_result is True:
|
|
403
|
-
outputs[
|
|
404
|
-
|
|
405
|
-
|
|
403
|
+
outputs["Main THREAD Flame Graph {}".format(identifier)] = (
|
|
404
|
+
flame_graph_output
|
|
405
|
+
)
|
|
406
406
|
result &= artifact_result
|
|
407
407
|
|
|
408
408
|
tid = self.pid
|
|
@@ -440,9 +440,9 @@ class Perf:
|
|
|
440
440
|
)
|
|
441
441
|
|
|
442
442
|
if artifact_result is True:
|
|
443
|
-
outputs[
|
|
444
|
-
|
|
445
|
-
|
|
443
|
+
outputs["perf report per dso,sym {}".format(identifier)] = (
|
|
444
|
+
perf_report_artifact
|
|
445
|
+
)
|
|
446
446
|
result &= artifact_result
|
|
447
447
|
|
|
448
448
|
# generate perf report per dso,sym
|
|
@@ -460,9 +460,9 @@ class Perf:
|
|
|
460
460
|
)
|
|
461
461
|
|
|
462
462
|
if artifact_result is True:
|
|
463
|
-
outputs[
|
|
464
|
-
|
|
465
|
-
|
|
463
|
+
outputs["perf report per dso,sym with callgraph {}".format(identifier)] = (
|
|
464
|
+
perf_report_artifact
|
|
465
|
+
)
|
|
466
466
|
result &= artifact_result
|
|
467
467
|
|
|
468
468
|
# generate perf report per dso,sym,srcline
|
|
@@ -487,9 +487,9 @@ class Perf:
|
|
|
487
487
|
)
|
|
488
488
|
|
|
489
489
|
if artifact_result is True:
|
|
490
|
-
outputs[
|
|
491
|
-
|
|
492
|
-
|
|
490
|
+
outputs["perf report per dso,sym,srcline {}".format(identifier)] = (
|
|
491
|
+
perf_report_artifact
|
|
492
|
+
)
|
|
493
493
|
result &= artifact_result
|
|
494
494
|
|
|
495
495
|
self.logger.info(
|
|
@@ -527,9 +527,9 @@ class Perf:
|
|
|
527
527
|
)
|
|
528
528
|
|
|
529
529
|
if artifact_result is True:
|
|
530
|
-
outputs[
|
|
531
|
-
|
|
532
|
-
|
|
530
|
+
outputs["perf report top self-cpu {}".format(identifier)] = (
|
|
531
|
+
perf_report_artifact
|
|
532
|
+
)
|
|
533
533
|
result &= artifact_result
|
|
534
534
|
|
|
535
535
|
# generate perf report --stdio report
|
|
@@ -546,9 +546,9 @@ class Perf:
|
|
|
546
546
|
)
|
|
547
547
|
|
|
548
548
|
if artifact_result is True:
|
|
549
|
-
outputs[
|
|
550
|
-
|
|
551
|
-
|
|
549
|
+
outputs["perf report top self-cpu (dso={})".format(binary)] = (
|
|
550
|
+
perf_report_artifact
|
|
551
|
+
)
|
|
552
552
|
result &= artifact_result
|
|
553
553
|
|
|
554
554
|
if self.callgraph_mode == "dwarf":
|
|
@@ -590,9 +590,9 @@ class Perf:
|
|
|
590
590
|
)
|
|
591
591
|
result &= artifact_result
|
|
592
592
|
if artifact_result is True:
|
|
593
|
-
outputs[
|
|
594
|
-
|
|
595
|
-
|
|
593
|
+
outputs["Top entries in text form by LOC"] = (
|
|
594
|
+
pprof_artifact_text_output
|
|
595
|
+
)
|
|
596
596
|
tabular_data_map["text-lines"] = tabular_data
|
|
597
597
|
self.logger.info("Generating pprof png output")
|
|
598
598
|
pprof_png_output = self.output + ".pprof.png"
|
|
@@ -604,9 +604,9 @@ class Perf:
|
|
|
604
604
|
self.output,
|
|
605
605
|
)
|
|
606
606
|
if artifact_result is True:
|
|
607
|
-
outputs[
|
|
608
|
-
|
|
609
|
-
|
|
607
|
+
outputs["Output graph image in PNG format"] = (
|
|
608
|
+
pprof_artifact_png_output
|
|
609
|
+
)
|
|
610
610
|
result &= artifact_result
|
|
611
611
|
|
|
612
612
|
# save stack collapsed
|
redisbench_admin/run/args.py
CHANGED
|
@@ -44,9 +44,20 @@ KEEP_ENV = bool(int(os.getenv("KEEP_ENV", "0")))
|
|
|
44
44
|
ALLOWED_TOOLS_DEFAULT = "memtier_benchmark,redis-benchmark,redisgraph-benchmark-go,ycsb,go-ycsb,tsbs_run_queries_redistimeseries,tsbs_load_redistimeseries,ftsb_redisearch,aibench_run_inference_redisai_vision,ann-benchmarks"
|
|
45
45
|
ALLOWED_BENCH_TOOLS = os.getenv("ALLOWED_BENCH_TOOLS", ALLOWED_TOOLS_DEFAULT)
|
|
46
46
|
SKIP_DB_SETUP = bool(int(os.getenv("SKIP_DB_SETUP", "0")))
|
|
47
|
+
ARCH_X86 = "x86_64"
|
|
48
|
+
ARCH_ARM = "aarch64"
|
|
49
|
+
VALID_ARCHS = [ARCH_X86, ARCH_ARM]
|
|
50
|
+
ARCH = os.getenv("ARCH", ARCH_X86)
|
|
47
51
|
|
|
48
52
|
|
|
49
53
|
def common_run_args(parser):
|
|
54
|
+
parser.add_argument(
|
|
55
|
+
"--architecture",
|
|
56
|
+
type=str,
|
|
57
|
+
required=False,
|
|
58
|
+
default=ARCH,
|
|
59
|
+
help=f"Architecture to run the benchmark on. One of {VALID_ARCHS}.",
|
|
60
|
+
)
|
|
50
61
|
parser.add_argument(
|
|
51
62
|
"--keep_env_and_topo",
|
|
52
63
|
required=False,
|
redisbench_admin/run/common.py
CHANGED
|
@@ -206,7 +206,10 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
206
206
|
if isremote is True:
|
|
207
207
|
benchmark_tool = "/tmp/{}".format(benchmark_tool)
|
|
208
208
|
input_data_file = "/tmp/input.data"
|
|
209
|
-
(
|
|
209
|
+
(
|
|
210
|
+
command_arr,
|
|
211
|
+
command_str,
|
|
212
|
+
) = prepare_tsbs_benchmark_command(
|
|
210
213
|
benchmark_tool,
|
|
211
214
|
server_private_ip,
|
|
212
215
|
server_plaintext_port,
|
|
@@ -218,7 +221,10 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
218
221
|
cluster_api_enabled,
|
|
219
222
|
)
|
|
220
223
|
if "memtier_benchmark" in benchmark_tool:
|
|
221
|
-
(
|
|
224
|
+
(
|
|
225
|
+
command_arr,
|
|
226
|
+
command_str,
|
|
227
|
+
) = prepare_memtier_benchmark_command(
|
|
222
228
|
benchmark_tool,
|
|
223
229
|
server_private_ip,
|
|
224
230
|
server_plaintext_port,
|
|
@@ -236,7 +242,10 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
236
242
|
ann_path = stdout[0].strip() + "/run/ann/pkg/multirun.py"
|
|
237
243
|
logging.info("Remote ann-benchmark path: {}".format(ann_path))
|
|
238
244
|
|
|
239
|
-
(
|
|
245
|
+
(
|
|
246
|
+
command_arr,
|
|
247
|
+
command_str,
|
|
248
|
+
) = prepare_ann_benchmark_command(
|
|
240
249
|
server_private_ip,
|
|
241
250
|
server_plaintext_port,
|
|
242
251
|
cluster_api_enabled,
|
|
@@ -250,7 +259,10 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
250
259
|
if isremote is True:
|
|
251
260
|
benchmark_tool = "/tmp/{}".format(benchmark_tool)
|
|
252
261
|
input_data_file = "/tmp/input.data"
|
|
253
|
-
(
|
|
262
|
+
(
|
|
263
|
+
command_arr,
|
|
264
|
+
command_str,
|
|
265
|
+
) = prepare_ftsb_benchmark_command(
|
|
254
266
|
benchmark_tool,
|
|
255
267
|
server_private_ip,
|
|
256
268
|
server_plaintext_port,
|
|
@@ -267,7 +279,10 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
267
279
|
if isremote is True:
|
|
268
280
|
benchmark_tool = "/tmp/{}".format(benchmark_tool)
|
|
269
281
|
input_data_file = "/tmp/input.data"
|
|
270
|
-
(
|
|
282
|
+
(
|
|
283
|
+
command_arr,
|
|
284
|
+
command_str,
|
|
285
|
+
) = prepare_aibench_benchmark_command(
|
|
271
286
|
benchmark_tool,
|
|
272
287
|
server_private_ip,
|
|
273
288
|
server_plaintext_port,
|
|
@@ -619,11 +634,9 @@ def run_redis_pre_steps(benchmark_config, r, required_modules):
|
|
|
619
634
|
)
|
|
620
635
|
search_specific_init(r, module_names)
|
|
621
636
|
if required_modules is not None and len(required_modules) > 0:
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
f"Using version {version} in by version timeseries coming from {module_names[artifact_pos]}"
|
|
626
|
-
)
|
|
637
|
+
check_required_modules(module_names, required_modules)
|
|
638
|
+
|
|
639
|
+
version = artifact_versions[0]
|
|
627
640
|
else:
|
|
628
641
|
version = r.info("server")["redis_version"]
|
|
629
642
|
|
|
@@ -689,45 +702,54 @@ def dso_check(dso, local_module_file):
|
|
|
689
702
|
|
|
690
703
|
|
|
691
704
|
def dbconfig_keyspacelen_check(
|
|
692
|
-
benchmark_config, redis_conns, ignore_keyspace_errors=False
|
|
705
|
+
benchmark_config, redis_conns, ignore_keyspace_errors=False, timeout=60
|
|
693
706
|
):
|
|
694
|
-
|
|
707
|
+
start_time = time.time()
|
|
695
708
|
(
|
|
696
709
|
requires_keyspacelen_check,
|
|
697
710
|
keyspacelen,
|
|
698
711
|
) = check_dbconfig_keyspacelen_requirement(benchmark_config)
|
|
699
|
-
|
|
700
|
-
|
|
712
|
+
|
|
713
|
+
if not requires_keyspacelen_check:
|
|
714
|
+
return True
|
|
715
|
+
|
|
716
|
+
attempt = 0
|
|
717
|
+
while time.time() - start_time < timeout:
|
|
701
718
|
logging.info(
|
|
702
|
-
"Ensuring keyspace length requirement = {} is met."
|
|
719
|
+
f"Ensuring keyspace length requirement = {keyspacelen} is met. attempt #{attempt+1}"
|
|
703
720
|
)
|
|
704
721
|
total_keys = 0
|
|
705
722
|
for shard_conn in redis_conns:
|
|
706
723
|
keyspace_dict = shard_conn.info("keyspace")
|
|
707
724
|
for _, dbdict in keyspace_dict.items():
|
|
708
|
-
|
|
709
|
-
total_keys += shard_keys
|
|
725
|
+
total_keys += dbdict.get("keys", 0)
|
|
710
726
|
|
|
711
727
|
if total_keys == keyspacelen:
|
|
712
728
|
logging.info(
|
|
713
|
-
"The total
|
|
729
|
+
"The total number of keys in setup matches the expected spec: {} == {}".format(
|
|
714
730
|
keyspacelen, total_keys
|
|
715
731
|
)
|
|
716
732
|
)
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
)
|
|
733
|
+
return True
|
|
734
|
+
|
|
735
|
+
logging.warning(
|
|
736
|
+
"Keyspace length mismatch ({} != {}). Retrying in {} seconds...".format(
|
|
737
|
+
total_keys, keyspacelen, 2**attempt
|
|
723
738
|
)
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
739
|
+
)
|
|
740
|
+
time.sleep(2**attempt) # Exponential backoff
|
|
741
|
+
attempt += 1
|
|
742
|
+
|
|
743
|
+
logging.error(
|
|
744
|
+
f"The total number of keys in setup does not match the expected spec: {keyspacelen} != {total_keys}. Aborting after {attempt+1} tries..."
|
|
745
|
+
)
|
|
746
|
+
|
|
747
|
+
if not ignore_keyspace_errors:
|
|
748
|
+
raise Exception(
|
|
749
|
+
f"The total number of keys in setup does not match the expected spec: {keyspacelen} != {total_keys}. Aborting after {attempt+1} tries..."
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
return False
|
|
731
753
|
|
|
732
754
|
|
|
733
755
|
def common_properties_log(
|
|
@@ -765,7 +787,10 @@ def print_results_table_stdout(
|
|
|
765
787
|
metric_names=[],
|
|
766
788
|
):
|
|
767
789
|
# check which metrics to extract
|
|
768
|
-
(
|
|
790
|
+
(
|
|
791
|
+
_,
|
|
792
|
+
metrics,
|
|
793
|
+
) = merge_default_and_config_metrics(
|
|
769
794
|
benchmark_config,
|
|
770
795
|
default_metrics,
|
|
771
796
|
None,
|
|
@@ -29,7 +29,6 @@ def prepare_ftsb_benchmark_command(
|
|
|
29
29
|
:return: [string] containing the required command to run the benchmark given the configurations
|
|
30
30
|
"""
|
|
31
31
|
command_arr = [executable_path]
|
|
32
|
-
|
|
33
32
|
command_arr.extend(
|
|
34
33
|
["--host", "{}:{}".format(server_private_ip, server_plaintext_port)]
|
|
35
34
|
)
|
redisbench_admin/run/ssh.py
CHANGED
|
@@ -42,7 +42,6 @@ def ssh_tunnel_redisconn(
|
|
|
42
42
|
), # remote redis server
|
|
43
43
|
# Bind the socket to port 0. A random free port from 1024 to 65535 will be selected.
|
|
44
44
|
local_bind_address=("0.0.0.0", 0), # enable local forwarding port
|
|
45
|
-
set_keepalive=60,
|
|
46
45
|
)
|
|
47
46
|
ssh_tunel.start() # start tunnel
|
|
48
47
|
redis_conn = redis.Redis(
|
|
@@ -70,19 +69,6 @@ def check_connection(ssh_conn):
|
|
|
70
69
|
return False
|
|
71
70
|
|
|
72
71
|
|
|
73
|
-
def ensure_400_permissions(file_path):
|
|
74
|
-
import stat
|
|
75
|
-
|
|
76
|
-
file_stat = os.stat(file_path)
|
|
77
|
-
current_permissions = stat.S_IMODE(file_stat.st_mode)
|
|
78
|
-
|
|
79
|
-
if current_permissions != 0o400:
|
|
80
|
-
logging.info(f"Changing permissions of {file_path} to 400")
|
|
81
|
-
os.chmod(file_path, 0o400)
|
|
82
|
-
else:
|
|
83
|
-
logging.info(f"{file_path} already has 400 permissions.")
|
|
84
|
-
|
|
85
|
-
|
|
86
72
|
def ssh_pem_check(EC2_PRIVATE_PEM, private_key):
|
|
87
73
|
if os.path.exists(private_key) is False:
|
|
88
74
|
if EC2_PRIVATE_PEM is not None and EC2_PRIVATE_PEM != "":
|
|
@@ -103,4 +89,3 @@ def ssh_pem_check(EC2_PRIVATE_PEM, private_key):
|
|
|
103
89
|
logging.info(
|
|
104
90
|
"Confirmed that private key path artifact: '{}' exists!".format(private_key)
|
|
105
91
|
)
|
|
106
|
-
ensure_400_permissions(private_key)
|
|
@@ -114,7 +114,11 @@ class TerraformClass:
|
|
|
114
114
|
def async_runner_setup(
|
|
115
115
|
self,
|
|
116
116
|
):
|
|
117
|
-
(
|
|
117
|
+
(
|
|
118
|
+
remote_setup,
|
|
119
|
+
deployment_type,
|
|
120
|
+
remote_id,
|
|
121
|
+
) = fetch_remote_setup_from_config(
|
|
118
122
|
[{"type": "async", "setup": "runner"}],
|
|
119
123
|
"https://github.com/RedisLabsModules/testing-infrastructure.git",
|
|
120
124
|
"master",
|
|
@@ -229,7 +233,11 @@ def terraform_spin_or_reuse_env(
|
|
|
229
233
|
tf_override_name=None,
|
|
230
234
|
tf_folder_path=None,
|
|
231
235
|
):
|
|
232
|
-
(
|
|
236
|
+
(
|
|
237
|
+
remote_setup,
|
|
238
|
+
deployment_type,
|
|
239
|
+
remote_id,
|
|
240
|
+
) = fetch_remote_setup_from_config(
|
|
233
241
|
benchmark_config["remote"],
|
|
234
242
|
"https://github.com/RedisLabsModules/testing-infrastructure.git",
|
|
235
243
|
"master",
|
|
@@ -28,9 +28,9 @@ WantedBy=multi-user.target
|
|
|
28
28
|
argv.append("--private_key")
|
|
29
29
|
argv.append("/home/ubuntu/work_dir/tests/benchmarks/benchmarks.redislabs.pem")
|
|
30
30
|
else:
|
|
31
|
-
argv[
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
argv[argv.index(args.private_key)] = (
|
|
32
|
+
"/home/ubuntu/work_dir/tests/benchmarks/benchmarks.redislabs.pem"
|
|
33
|
+
)
|
|
34
34
|
if len(args.module_path) != 0:
|
|
35
35
|
argv[argv.index(args.module_path[0])] = (
|
|
36
36
|
"/home/ubuntu/work_dir/tests/benchmarks/"
|
|
@@ -12,6 +12,7 @@ FLUSHALL_AT_START = bool(int(os.getenv("FLUSHALL_AT_START", "1")))
|
|
|
12
12
|
IGNORE_KEYSPACE_ERRORS = bool(int(os.getenv("IGNORE_KEYSPACE_ERRORS", "0")))
|
|
13
13
|
SKIP_REDIS_SPIN = bool(int(os.getenv("SKIP_REDIS_SPIN", "0")))
|
|
14
14
|
REDIS_PORT = int(os.getenv("REDIS_PORT", "6379"))
|
|
15
|
+
REDIS_AUTH = os.getenv("REDIS_AUTH", None)
|
|
15
16
|
REDIS_HOST = os.getenv("REDIS_HOST", "127.0.0.1")
|
|
16
17
|
|
|
17
18
|
|
|
@@ -19,6 +20,7 @@ def create_run_local_arguments(parser):
|
|
|
19
20
|
parser = common_run_args(parser)
|
|
20
21
|
parser.add_argument("--port", type=int, default=REDIS_PORT)
|
|
21
22
|
parser.add_argument("--host", type=str, default=REDIS_HOST)
|
|
23
|
+
parser.add_argument("--password", type=str, default=REDIS_AUTH)
|
|
22
24
|
parser.add_argument("--redis-binary", type=str, default=REDIS_BINARY)
|
|
23
25
|
parser.add_argument(
|
|
24
26
|
"--flushall_on_every_test_start",
|
|
@@ -158,7 +158,7 @@ def local_db_spin(
|
|
|
158
158
|
logging.info("Skipping DB spin step...")
|
|
159
159
|
|
|
160
160
|
if setup_type == "oss-standalone":
|
|
161
|
-
r = redis.Redis(port=args.port, host=args.host)
|
|
161
|
+
r = redis.Redis(port=args.port, host=args.host, password=args.password)
|
|
162
162
|
r.ping()
|
|
163
163
|
r.client_setname("redisbench-admin-standalone")
|
|
164
164
|
redis_conns.append(r)
|
|
@@ -192,6 +192,11 @@ def local_db_spin(
|
|
|
192
192
|
benchmark_tool_workdir,
|
|
193
193
|
cluster_api_enabled,
|
|
194
194
|
"dbconfig",
|
|
195
|
+
None,
|
|
196
|
+
None,
|
|
197
|
+
None,
|
|
198
|
+
None,
|
|
199
|
+
args.password,
|
|
195
200
|
)
|
|
196
201
|
|
|
197
202
|
# run the benchmark
|
|
@@ -206,7 +211,6 @@ def local_db_spin(
|
|
|
206
211
|
load_via_benchmark_duration_seconds
|
|
207
212
|
)
|
|
208
213
|
)
|
|
209
|
-
|
|
210
214
|
dbconfig_keyspacelen_check(benchmark_config, redis_conns, ignore_keyspace_errors)
|
|
211
215
|
|
|
212
216
|
artifact_version = run_redis_pre_steps(
|
|
@@ -298,6 +298,12 @@ def run_local_command_logic(args, project_name, project_version):
|
|
|
298
298
|
False,
|
|
299
299
|
benchmark_tool_workdir,
|
|
300
300
|
cluster_api_enabled,
|
|
301
|
+
"clientconfig",
|
|
302
|
+
None,
|
|
303
|
+
None,
|
|
304
|
+
None,
|
|
305
|
+
None,
|
|
306
|
+
args.password,
|
|
301
307
|
)
|
|
302
308
|
redis_pids = [
|
|
303
309
|
redis_process.pid
|
|
@@ -680,17 +686,17 @@ def commandstats_latencystats_process_name(
|
|
|
680
686
|
branch = variant_labels_dict["branch"]
|
|
681
687
|
|
|
682
688
|
if version is not None:
|
|
683
|
-
variant_labels_dict[
|
|
684
|
-
"
|
|
685
|
-
|
|
686
|
-
variant_labels_dict[
|
|
687
|
-
"
|
|
688
|
-
|
|
689
|
+
variant_labels_dict["command_and_metric_and_version"] = (
|
|
690
|
+
"{} - {} - {}".format(command, metric, version)
|
|
691
|
+
)
|
|
692
|
+
variant_labels_dict["command_and_metric_and_setup_and_version"] = (
|
|
693
|
+
"{} - {} - {} - {}".format(command, metric, setup_name, version)
|
|
694
|
+
)
|
|
689
695
|
|
|
690
696
|
if branch is not None:
|
|
691
|
-
variant_labels_dict[
|
|
692
|
-
"
|
|
693
|
-
|
|
694
|
-
variant_labels_dict[
|
|
695
|
-
"
|
|
696
|
-
|
|
697
|
+
variant_labels_dict["command_and_metric_and_branch"] = (
|
|
698
|
+
"{} - {} - {}".format(command, metric, branch)
|
|
699
|
+
)
|
|
700
|
+
variant_labels_dict["command_and_metric_and_setup_and_branch"] = (
|
|
701
|
+
"{} - {} - {} - {}".format(command, metric, setup_name, branch)
|
|
702
|
+
)
|
|
@@ -7,6 +7,7 @@ import logging
|
|
|
7
7
|
|
|
8
8
|
from python_terraform import TerraformCommandError
|
|
9
9
|
|
|
10
|
+
from redisbench_admin.run.args import ARCH_X86, ARCH_ARM
|
|
10
11
|
from redisbench_admin.run_remote.terraform import (
|
|
11
12
|
retrieve_inventory_info,
|
|
12
13
|
terraform_spin_or_reuse_env,
|
|
@@ -33,11 +34,22 @@ def remote_env_setup(
|
|
|
33
34
|
spot_instance_error=False,
|
|
34
35
|
spot_price_counter=0,
|
|
35
36
|
full_price_counter=0,
|
|
37
|
+
architecture=ARCH_X86,
|
|
36
38
|
):
|
|
37
39
|
server_plaintext_port = args.db_port
|
|
38
40
|
db_ssh_port = args.db_ssh_port
|
|
39
41
|
client_ssh_port = args.client_ssh_port
|
|
40
42
|
username = args.user
|
|
43
|
+
if architecture != ARCH_X86 and tf_folder_path is not None:
|
|
44
|
+
logging.info(
|
|
45
|
+
f"Checking if the architecture info is specified on the terraform path {tf_folder_path}"
|
|
46
|
+
)
|
|
47
|
+
if architecture is ARCH_ARM and ARCH_ARM not in tf_folder_path:
|
|
48
|
+
logging.info(f"adding suffix '-{ARCH_ARM}' to {tf_folder_path}")
|
|
49
|
+
tf_folder_path = "{tf_folder_path}-{ARCH_ARM}"
|
|
50
|
+
else:
|
|
51
|
+
logging.info(f"'-{ARCH_ARM}' suffix already in {tf_folder_path}")
|
|
52
|
+
|
|
41
53
|
if args.inventory is not None:
|
|
42
54
|
(
|
|
43
55
|
status,
|
|
@@ -274,7 +274,6 @@ def post_process_remote_run(
|
|
|
274
274
|
tmp,
|
|
275
275
|
result_csv_filename="result.csv",
|
|
276
276
|
):
|
|
277
|
-
results_dict = {}
|
|
278
277
|
if benchmark_tool == "redis-benchmark":
|
|
279
278
|
local_benchmark_output_filename = tmp
|
|
280
279
|
with open(result_csv_filename, "r", encoding="utf-8") as txt_file:
|
|
@@ -21,7 +21,7 @@ from redisbench_admin.profilers.perf_daemon_caller import (
|
|
|
21
21
|
PerfDaemonRemoteCaller,
|
|
22
22
|
PERF_DAEMON_LOGNAME,
|
|
23
23
|
)
|
|
24
|
-
from redisbench_admin.run.args import PROFILE_FREQ
|
|
24
|
+
from redisbench_admin.run.args import PROFILE_FREQ, VALID_ARCHS
|
|
25
25
|
from redisbench_admin.run.common import (
|
|
26
26
|
get_start_time_vars,
|
|
27
27
|
BENCHMARK_REPETITIONS,
|
|
@@ -300,6 +300,14 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
300
300
|
benchmark_artifacts_table_name = "Benchmark client artifacts"
|
|
301
301
|
benchmark_artifacts_table_headers = ["Setup", "Test-case", "Artifact", "link"]
|
|
302
302
|
benchmark_artifacts_links = []
|
|
303
|
+
architecture = args.architecture
|
|
304
|
+
if architecture not in VALID_ARCHS:
|
|
305
|
+
logging.critical(
|
|
306
|
+
f"The specified architecture {architecture} is not valid. Specify one of {VALID_ARCHS}"
|
|
307
|
+
)
|
|
308
|
+
exit(1)
|
|
309
|
+
else:
|
|
310
|
+
logging.info("Running benchmark for architecture {architecture}")
|
|
303
311
|
|
|
304
312
|
# contains the overall target-tables ( if any target is defined )
|
|
305
313
|
overall_tables = {}
|
|
@@ -346,10 +354,7 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
346
354
|
|
|
347
355
|
# map from setup name to overall target-tables ( if any target is defined )
|
|
348
356
|
overall_tables[setup_name] = {}
|
|
349
|
-
total_benchmarks = len(benchmarks_map.keys())
|
|
350
|
-
import tqdm
|
|
351
357
|
|
|
352
|
-
pbar = tqdm.tqdm(total=total_benchmarks, unit="benchmarks")
|
|
353
358
|
for test_name, benchmark_config in benchmarks_map.items():
|
|
354
359
|
if return_code != 0 and args.fail_fast:
|
|
355
360
|
logging.warning(
|
|
@@ -374,7 +379,9 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
374
379
|
continue
|
|
375
380
|
remote_perf = None
|
|
376
381
|
logging.info(
|
|
377
|
-
|
|
382
|
+
"Repetition {} of {}. Running test {}".format(
|
|
383
|
+
repetition, BENCHMARK_REPETITIONS, test_name
|
|
384
|
+
)
|
|
378
385
|
)
|
|
379
386
|
(
|
|
380
387
|
setup_name,
|
|
@@ -442,6 +449,7 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
442
449
|
spot_instance_error,
|
|
443
450
|
0,
|
|
444
451
|
0,
|
|
452
|
+
architecture,
|
|
445
453
|
)
|
|
446
454
|
|
|
447
455
|
# after we've created the env, even on error we should always teardown
|
|
@@ -1093,7 +1101,6 @@ def run_remote_command_logic(args, project_name, project_version):
|
|
|
1093
1101
|
f"Test {test_name} does not have remote config. Skipping test."
|
|
1094
1102
|
)
|
|
1095
1103
|
|
|
1096
|
-
pbar.update()
|
|
1097
1104
|
if len(benchmark_artifacts_links) > 0:
|
|
1098
1105
|
writer = MarkdownTableWriter(
|
|
1099
1106
|
table_name=benchmark_artifacts_table_name,
|
|
@@ -1376,20 +1383,20 @@ def commandstats_latencystats_process_name(
|
|
|
1376
1383
|
branch = variant_labels_dict["branch"]
|
|
1377
1384
|
|
|
1378
1385
|
if version is not None:
|
|
1379
|
-
variant_labels_dict[
|
|
1380
|
-
"
|
|
1381
|
-
|
|
1382
|
-
variant_labels_dict[
|
|
1383
|
-
"
|
|
1384
|
-
|
|
1386
|
+
variant_labels_dict["command_and_metric_and_version"] = (
|
|
1387
|
+
"{} - {} - {}".format(command, metric, version)
|
|
1388
|
+
)
|
|
1389
|
+
variant_labels_dict["command_and_metric_and_setup_and_version"] = (
|
|
1390
|
+
"{} - {} - {} - {}".format(command, metric, setup_name, version)
|
|
1391
|
+
)
|
|
1385
1392
|
|
|
1386
1393
|
if branch is not None:
|
|
1387
|
-
variant_labels_dict[
|
|
1388
|
-
"
|
|
1389
|
-
|
|
1390
|
-
variant_labels_dict[
|
|
1391
|
-
"
|
|
1392
|
-
|
|
1394
|
+
variant_labels_dict["command_and_metric_and_branch"] = (
|
|
1395
|
+
"{} - {} - {}".format(command, metric, branch)
|
|
1396
|
+
)
|
|
1397
|
+
variant_labels_dict["command_and_metric_and_setup_and_branch"] = (
|
|
1398
|
+
"{} - {} - {} - {}".format(command, metric, setup_name, branch)
|
|
1399
|
+
)
|
|
1393
1400
|
|
|
1394
1401
|
|
|
1395
1402
|
def shutdown_remote_redis(redis_conns, ssh_tunnel):
|
|
@@ -76,7 +76,6 @@ def remote_module_files_cp(
|
|
|
76
76
|
):
|
|
77
77
|
remote_module_files = []
|
|
78
78
|
if local_module_files is not None:
|
|
79
|
-
logging.info(f"local_module_files: {local_module_files}")
|
|
80
79
|
for local_module_file in local_module_files:
|
|
81
80
|
splitted_module_and_plugins = []
|
|
82
81
|
if type(local_module_file) is str:
|
|
@@ -136,10 +135,7 @@ def remote_module_files_cp(
|
|
|
136
135
|
if pos > 1:
|
|
137
136
|
remote_module_files_in = remote_module_files_in + " "
|
|
138
137
|
remote_module_files_in = remote_module_files_in + remote_module_file
|
|
139
|
-
|
|
140
|
-
f"appending to {remote_module_files} remote file {remote_module_files_in}"
|
|
141
|
-
)
|
|
142
|
-
remote_module_files.append(remote_module_files_in)
|
|
138
|
+
remote_module_files.append(remote_module_files_in)
|
|
143
139
|
logging.info(
|
|
144
140
|
"There are a total of {} remote files {}".format(
|
|
145
141
|
len(remote_module_files), remote_module_files
|
|
@@ -157,9 +153,12 @@ def generate_remote_standalone_redis_cmd(
|
|
|
157
153
|
enable_redis_7_config_directives=True,
|
|
158
154
|
enable_debug_command="yes",
|
|
159
155
|
):
|
|
160
|
-
initial_redis_cmd = "redis-server --save '' --logfile {} --dir {} --daemonize yes --protected-mode no
|
|
156
|
+
initial_redis_cmd = "redis-server --save '' --logfile {} --dir {} --daemonize yes --protected-mode no ".format(
|
|
161
157
|
logfile, temporary_dir
|
|
162
158
|
)
|
|
159
|
+
if enable_redis_7_config_directives:
|
|
160
|
+
extra_str = " --enable-debug-command {} ".format(enable_debug_command)
|
|
161
|
+
initial_redis_cmd = initial_redis_cmd + extra_str
|
|
163
162
|
full_logfile = "{}/{}".format(temporary_dir, logfile)
|
|
164
163
|
if redis_configuration_parameters is not None:
|
|
165
164
|
for (
|
|
@@ -31,7 +31,11 @@ def terraform_spin_or_reuse_env(
|
|
|
31
31
|
tf_override_name=None,
|
|
32
32
|
tf_folder_path=None,
|
|
33
33
|
):
|
|
34
|
-
(
|
|
34
|
+
(
|
|
35
|
+
remote_setup,
|
|
36
|
+
deployment_type,
|
|
37
|
+
remote_id,
|
|
38
|
+
) = fetch_remote_setup_from_config(
|
|
35
39
|
benchmark_config["remote"],
|
|
36
40
|
"https://github.com/redis-performance/testing-infrastructure.git",
|
|
37
41
|
"master",
|
|
@@ -565,7 +565,6 @@ def get_testfiles_to_process(
|
|
|
565
565
|
|
|
566
566
|
|
|
567
567
|
def check_required_modules(module_names, required_modules):
|
|
568
|
-
position = -1
|
|
569
568
|
if required_modules is not None:
|
|
570
569
|
if len(required_modules) > 0:
|
|
571
570
|
logging.info(
|
|
@@ -573,12 +572,6 @@ def check_required_modules(module_names, required_modules):
|
|
|
573
572
|
required_modules
|
|
574
573
|
)
|
|
575
574
|
)
|
|
576
|
-
first_module = required_modules[0]
|
|
577
|
-
if first_module in module_names:
|
|
578
|
-
position = module_names.index(first_module)
|
|
579
|
-
logging.info(
|
|
580
|
-
f"POSITION of 1st required module :{first_module} in the module names list {module_names}: pos={position} "
|
|
581
|
-
)
|
|
582
575
|
for required_module in required_modules:
|
|
583
576
|
if required_module not in module_names:
|
|
584
577
|
raise Exception(
|
|
@@ -587,7 +580,6 @@ def check_required_modules(module_names, required_modules):
|
|
|
587
580
|
module_names,
|
|
588
581
|
)
|
|
589
582
|
)
|
|
590
|
-
return position
|
|
591
583
|
|
|
592
584
|
|
|
593
585
|
def results_dict_kpi_check(benchmark_config, results_dict, return_code):
|
redisbench_admin/utils/remote.py
CHANGED
|
@@ -142,7 +142,7 @@ def execute_remote_commands(
|
|
|
142
142
|
c = connect_remote_ssh(port, private_key, server_public_ip, username)
|
|
143
143
|
for command in commands:
|
|
144
144
|
logging.info('Executing remote command "{}"'.format(command))
|
|
145
|
-
stdin, stdout, stderr = c.exec_command(command, get_pty=get_pty
|
|
145
|
+
stdin, stdout, stderr = c.exec_command(command, get_pty=get_pty)
|
|
146
146
|
recv_exit_status = stdout.channel.recv_exit_status() # status is 0
|
|
147
147
|
stdout = stdout.readlines()
|
|
148
148
|
stderr = stderr.readlines()
|
|
@@ -158,46 +158,13 @@ def execute_remote_commands(
|
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
def connect_remote_ssh(port, private_key, server_public_ip, username):
|
|
161
|
-
import time
|
|
162
|
-
import socket
|
|
163
|
-
|
|
164
161
|
k = paramiko.RSAKey.from_private_key_file(private_key)
|
|
165
162
|
c = paramiko.SSHClient()
|
|
166
163
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
for attempt in range(max_retries):
|
|
173
|
-
try:
|
|
174
|
-
logging.info(
|
|
175
|
-
f"Connecting to remote server {server_public_ip}, attempt {attempt + 1}"
|
|
176
|
-
)
|
|
177
|
-
c.connect(
|
|
178
|
-
hostname=server_public_ip,
|
|
179
|
-
port=port,
|
|
180
|
-
username=username,
|
|
181
|
-
pkey=k,
|
|
182
|
-
timeout=300,
|
|
183
|
-
)
|
|
184
|
-
logging.info(f"Connected to remote server {server_public_ip}")
|
|
185
|
-
return c
|
|
186
|
-
except (
|
|
187
|
-
paramiko.ssh_exception.NoValidConnectionsError,
|
|
188
|
-
socket.timeout,
|
|
189
|
-
paramiko.ssh_exception.SSHException,
|
|
190
|
-
) as e:
|
|
191
|
-
wait_time = min(base_delay * (2**attempt), max_delay)
|
|
192
|
-
logging.warning(
|
|
193
|
-
f"Connection attempt {attempt + 1} failed: {e}. Retrying in {wait_time} seconds..."
|
|
194
|
-
)
|
|
195
|
-
time.sleep(wait_time)
|
|
196
|
-
|
|
197
|
-
logging.error("Failed to connect after multiple attempts.")
|
|
198
|
-
raise Exception(
|
|
199
|
-
f"Could not connect to {server_public_ip} after {max_retries} attempts."
|
|
200
|
-
)
|
|
164
|
+
logging.info("Connecting to remote server {}".format(server_public_ip))
|
|
165
|
+
c.connect(hostname=server_public_ip, port=port, username=username, pkey=k)
|
|
166
|
+
logging.info("Connected to remote server {}".format(server_public_ip))
|
|
167
|
+
return c
|
|
201
168
|
|
|
202
169
|
|
|
203
170
|
def check_dataset_remote_requirements(
|
|
@@ -303,9 +270,7 @@ def setup_remote_environment(
|
|
|
303
270
|
_, _, _ = tf.init(
|
|
304
271
|
capture_output=True,
|
|
305
272
|
backend_config={
|
|
306
|
-
"key": "benchmarks/infrastructure/{}.tfstate".format(tf_setup_name)
|
|
307
|
-
"/", "-"
|
|
308
|
-
)
|
|
273
|
+
"key": "benchmarks/infrastructure/{}.tfstate".format(tf_setup_name)
|
|
309
274
|
},
|
|
310
275
|
)
|
|
311
276
|
_, _, _ = tf.refresh()
|
|
@@ -579,21 +544,12 @@ def common_tf(branch, path, repo, temporary_dir=None, destroy=False):
|
|
|
579
544
|
temporary_dir = tempfile.mkdtemp()
|
|
580
545
|
if destroy is False:
|
|
581
546
|
logging.info(
|
|
582
|
-
"Fetching infrastructure definition from git repo {}{} (branch={}). Using local dir {} to store state".format(
|
|
547
|
+
"Fetching infrastructure definition from git repo {}/{} (branch={}). Using local dir {} to store state".format(
|
|
583
548
|
repo, path, branch, temporary_dir
|
|
584
549
|
)
|
|
585
550
|
)
|
|
586
551
|
git.Repo.clone_from(repo, temporary_dir, branch=branch, depth=1)
|
|
587
|
-
logging.info(f"ensuring folder exists: {temporary_dir}")
|
|
588
|
-
assert os.path.exists(temporary_dir) and os.path.isdir(
|
|
589
|
-
temporary_dir
|
|
590
|
-
), f"Folder '{temporary_dir}' does not exist"
|
|
591
|
-
if path[0] != "/":
|
|
592
|
-
temporary_dir = temporary_dir + "/"
|
|
593
552
|
terraform_working_dir = temporary_dir + path
|
|
594
|
-
logging.info(
|
|
595
|
-
f"terraform_working_dir={terraform_working_dir}. temporary_dir={temporary_dir}. path={path}"
|
|
596
|
-
)
|
|
597
553
|
return terraform_working_dir
|
|
598
554
|
|
|
599
555
|
|
|
@@ -605,7 +561,7 @@ def check_remote_setup_spot_instance(
|
|
|
605
561
|
contains_spot_instance = False
|
|
606
562
|
for remote_setup_property in remote_setup_config:
|
|
607
563
|
if "spot_instance" in remote_setup_property:
|
|
608
|
-
spot_path = "terraform/" + remote_setup_property["spot_instance"]
|
|
564
|
+
spot_path = "/terraform/" + remote_setup_property["spot_instance"]
|
|
609
565
|
contains_spot_instance = True
|
|
610
566
|
logging.info(f"Detected spot instance config. Setup path: {spot_path}")
|
|
611
567
|
|
|
@@ -775,7 +731,10 @@ def extract_perversion_timeseries_from_results(
|
|
|
775
731
|
):
|
|
776
732
|
break_by_key = "version"
|
|
777
733
|
break_by_str = "by.{}".format(break_by_key)
|
|
778
|
-
(
|
|
734
|
+
(
|
|
735
|
+
branch_time_series_dict,
|
|
736
|
+
target_tables,
|
|
737
|
+
) = common_timeseries_extraction(
|
|
779
738
|
break_by_key,
|
|
780
739
|
break_by_str,
|
|
781
740
|
datapoints_timestamp,
|
|
@@ -946,9 +905,9 @@ def from_metric_kv_to_timeserie(
|
|
|
946
905
|
|
|
947
906
|
target_table_dict[target_name] = target_value
|
|
948
907
|
|
|
949
|
-
target_table_dict[
|
|
950
|
-
|
|
951
|
-
|
|
908
|
+
target_table_dict["{}:percent {}".format(target_name, comparison_type)] = (
|
|
909
|
+
target_value_pct_str
|
|
910
|
+
)
|
|
952
911
|
return target_table_keyname, target_table_dict
|
|
953
912
|
|
|
954
913
|
|
redisbench_admin/utils/utils.py
CHANGED
|
@@ -100,12 +100,17 @@ def generate_common_server_args(
|
|
|
100
100
|
"''",
|
|
101
101
|
"--port",
|
|
102
102
|
"{}".format(port),
|
|
103
|
-
"--enable-debug-command",
|
|
104
|
-
"yes",
|
|
105
103
|
"--dir",
|
|
106
104
|
dbdir,
|
|
107
105
|
]
|
|
108
106
|
)
|
|
107
|
+
if enable_redis_7_config_directives:
|
|
108
|
+
command.extend(
|
|
109
|
+
[
|
|
110
|
+
"--enable-debug-command",
|
|
111
|
+
enable_debug_command,
|
|
112
|
+
]
|
|
113
|
+
)
|
|
109
114
|
|
|
110
115
|
return command
|
|
111
116
|
|
|
@@ -31,15 +31,14 @@ def get_ci_ec2_instances_by_state(ec2_client, ci_machines_prefix, requested_stat
|
|
|
31
31
|
instances = group["Instances"]
|
|
32
32
|
for instance in instances:
|
|
33
33
|
state = instance["State"]["Name"]
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if
|
|
39
|
-
if
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
state_instances.append(instance)
|
|
34
|
+
for tag_dict in instance["Tags"]:
|
|
35
|
+
key = tag_dict["Key"]
|
|
36
|
+
key_v = tag_dict["Value"]
|
|
37
|
+
if key == "Name":
|
|
38
|
+
if ci_machines_prefix in key_v:
|
|
39
|
+
if state == requested_state:
|
|
40
|
+
count = count + 1
|
|
41
|
+
state_instances.append(instance)
|
|
43
42
|
return count, state_instances
|
|
44
43
|
|
|
45
44
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: redisbench-admin
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.21
|
|
4
4
|
Summary: Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... ).
|
|
5
5
|
Author: filipecosta90
|
|
6
6
|
Author-email: filipecosta.90@gmail.com
|
|
7
|
-
Requires-Python: >=3.
|
|
7
|
+
Requires-Python: >=3.10.0,<4.0.0
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
10
9
|
Classifier: Programming Language :: Python :: 3.10
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -3,11 +3,11 @@ redisbench_admin/cli.py,sha256=LAS5qnqScXKhxHYfXWB0mvAYaUYrSurIwadhexEa9g4,7740
|
|
|
3
3
|
redisbench_admin/commands/__init__.py,sha256=mzVrEtqefFdopyzR-W6xx3How95dyZfToGKm1-_YzeY,95
|
|
4
4
|
redisbench_admin/commands/commands.json.py,sha256=mzVrEtqefFdopyzR-W6xx3How95dyZfToGKm1-_YzeY,95
|
|
5
5
|
redisbench_admin/compare/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
6
|
-
redisbench_admin/compare/args.py,sha256=
|
|
7
|
-
redisbench_admin/compare/compare.py,sha256=
|
|
6
|
+
redisbench_admin/compare/args.py,sha256=10zbiT8roeTGnAubvoVFZTbJNbVxuRaRPtCKjxV8iNE,5226
|
|
7
|
+
redisbench_admin/compare/compare.py,sha256=ANCm4kKCR8IBBoeBRgsPOOYW2s5qJV1QVIIPcY-WNUk,37725
|
|
8
8
|
redisbench_admin/deploy/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
9
9
|
redisbench_admin/deploy/args.py,sha256=neLUcQqI__HkJItkQg2C293hl5g3yHG40t171r7-E5Y,1732
|
|
10
|
-
redisbench_admin/deploy/deploy.py,sha256=
|
|
10
|
+
redisbench_admin/deploy/deploy.py,sha256=MtfJbsL97DLrbBYut6zRCzyEMebX4xWoZE-m4-JDRB8,3885
|
|
11
11
|
redisbench_admin/environments/__init__.py,sha256=cD7zfXt0VEmy0b7452HvcAxX_9kVj6Vm213yNdUHP20,95
|
|
12
12
|
redisbench_admin/environments/oss_cluster.py,sha256=lUOG6oN8VXAnDXFK7Xns-ag-hSOSxxxL8jZ4Mh03hQY,6681
|
|
13
13
|
redisbench_admin/environments/oss_standalone.py,sha256=Sl38rUpwJ3wNOl9zn38iK8q2iJi2pRFmaJAZJbuT_SQ,2474
|
|
@@ -15,7 +15,7 @@ redisbench_admin/export/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8z
|
|
|
15
15
|
redisbench_admin/export/args.py,sha256=kzBfU21mXYWLZ8YPhKA8MCfxJo-OU4m8-OBZFY7VKnA,3189
|
|
16
16
|
redisbench_admin/export/common/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
17
17
|
redisbench_admin/export/common/common.py,sha256=LnvXjMLlJRzMTxiFIjrfRFfDx9JJm88OZHu7lnTOpFA,4331
|
|
18
|
-
redisbench_admin/export/export.py,sha256=
|
|
18
|
+
redisbench_admin/export/export.py,sha256=JkdoMpbFnMEooNVSEmXQdyEfcU0SlFkO4jV6jGwYWRA,10593
|
|
19
19
|
redisbench_admin/export/google_benchmark/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
20
20
|
redisbench_admin/export/google_benchmark/google_benchmark_json_format.py,sha256=OuMaMmmma5VvXA0rcLIQSMxIq81oa5I3xYDFhbWj-IA,1804
|
|
21
21
|
redisbench_admin/export/memtier_benchmark/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
@@ -35,7 +35,7 @@ redisbench_admin/grafana_api/grafana_api.py,sha256=dG17GCYmWRILmy7h3-OiBeGzuNGnR
|
|
|
35
35
|
redisbench_admin/profilers/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
36
36
|
redisbench_admin/profilers/daemon.py,sha256=Y4ZbbH-cRHJk9cvpsb60UZFq_HVHWXtatb7T2vtlRKo,12973
|
|
37
37
|
redisbench_admin/profilers/flamegraph.pl,sha256=Za5XE-1gb_U-nzqwoyRwfe1TB182c64gITa-2klWTTA,35898
|
|
38
|
-
redisbench_admin/profilers/perf.py,sha256=
|
|
38
|
+
redisbench_admin/profilers/perf.py,sha256=HtzzMVsXEJa1H7tOAfKlbFYDn2KnxAG_IU9yKPKZB7w,27772
|
|
39
39
|
redisbench_admin/profilers/perf_daemon_caller.py,sha256=nD97cXmX3JytyafvNMmhUBq40uYrf6vtjdJ1TXZbvVY,4948
|
|
40
40
|
redisbench_admin/profilers/pprof.py,sha256=g7oNC3AtNDTUOBIh_mIi5bFl_b0mL8tqBu6qKvAOrKw,3949
|
|
41
41
|
redisbench_admin/profilers/profilers.py,sha256=4C1xaPyLoPydJ3eBAxW7IlSHG-3qj3A3BAKejiZXEK0,510
|
|
@@ -174,11 +174,11 @@ redisbench_admin/run/ann/pkg/templates/summary.html,sha256=Y-jePm8EGM41ensKay18R
|
|
|
174
174
|
redisbench_admin/run/ann/pkg/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
175
175
|
redisbench_admin/run/ann/pkg/test/test-jaccard.py,sha256=oIhaQCQKrQokwv3fvgLSwPlRwkY0MNppG9Fc08oS3ZI,462
|
|
176
176
|
redisbench_admin/run/ann/pkg/test/test-metrics.py,sha256=vJdS8Kuk8bAnpB65Uqb-9rUUI35XrHwaO3cNwKX5gxc,3057
|
|
177
|
-
redisbench_admin/run/args.py,sha256=
|
|
177
|
+
redisbench_admin/run/args.py,sha256=tevHZrezJ4RreHp6K-MGHko3e1Gi_IdsS2Q0jD2ZSoU,8173
|
|
178
178
|
redisbench_admin/run/cluster.py,sha256=QuptSW-IhdyFIoQ3hzY613jtQWxBrVIlgc8OarcEK20,6072
|
|
179
|
-
redisbench_admin/run/common.py,sha256=
|
|
179
|
+
redisbench_admin/run/common.py,sha256=zRh2AxYks1-O_50qmk1WoD95C6xBaa5Hvs_-o7Q4ZFQ,28404
|
|
180
180
|
redisbench_admin/run/ftsb/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
181
|
-
redisbench_admin/run/ftsb/ftsb.py,sha256=
|
|
181
|
+
redisbench_admin/run/ftsb/ftsb.py,sha256=aupMl27UZU6byUFsApBz5GLcdGd7lxtY6vCjJ3jnqJE,2387
|
|
182
182
|
redisbench_admin/run/git.py,sha256=6UYGcTN0MPzf4QDVoJnFkou0yZasLF6jLG7f0zoySq8,3064
|
|
183
183
|
redisbench_admin/run/grafana.py,sha256=iMDgMyJKinpZMTD43rZ1IcRGkadjFjCxaB48mYWkvG4,9421
|
|
184
184
|
redisbench_admin/run/memtier_benchmark/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
@@ -192,24 +192,24 @@ redisbench_admin/run/redisgraph_benchmark_go/redisgraph_benchmark_go.py,sha256=D
|
|
|
192
192
|
redisbench_admin/run/redistimeseries.py,sha256=x3PA7QoHXu53zs5v0ekK2sVmUnA9_ZF2JxgCDf1Mui4,21331
|
|
193
193
|
redisbench_admin/run/run.py,sha256=WIBc1q5198Ln3Elfgk6D1_ezuAKx5kM_xsxnxGe66-I,5586
|
|
194
194
|
redisbench_admin/run/s3.py,sha256=pXQXZ1rrwDCWeBegGR4aKzbKqWWwMrmqvIjFxEB3bh4,442
|
|
195
|
-
redisbench_admin/run/ssh.py,sha256=
|
|
195
|
+
redisbench_admin/run/ssh.py,sha256=gRW6ROoTKlaxLKhS5tM-Ejjd6zk2iO1KN9dzBzw7GOk,2835
|
|
196
196
|
redisbench_admin/run/tsbs_run_queries_redistimeseries/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
197
197
|
redisbench_admin/run/tsbs_run_queries_redistimeseries/tsbs_run_queries_redistimeseries.py,sha256=9JWh23vG_4pNZuv6-kVk7_5C6qJ2ZOBWv53LxGMKXgs,2426
|
|
198
198
|
redisbench_admin/run/ycsb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
199
199
|
redisbench_admin/run/ycsb/ycsb.py,sha256=cs5saVH7C4YpDvzhoa15PwEho59qTVR1E90v_FYjMVw,6873
|
|
200
200
|
redisbench_admin/run_async/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
201
201
|
redisbench_admin/run_async/async_env.py,sha256=tE1turaaZNHfOaSpGxh62EJWp88zoQFUf3sMbaS7JRA,2408
|
|
202
|
-
redisbench_admin/run_async/async_terraform.py,sha256=
|
|
202
|
+
redisbench_admin/run_async/async_terraform.py,sha256=ngOQnECUuC20pZwiJItaiBnzlwT2DiKciPTHtqLURe4,11299
|
|
203
203
|
redisbench_admin/run_async/benchmark.py,sha256=S-dsaWGjgsPQxj8sXAACnbtNw5zlJnRFoo53ULbrMEY,1630
|
|
204
204
|
redisbench_admin/run_async/log.py,sha256=cD7zfXt0VEmy0b7452HvcAxX_9kVj6Vm213yNdUHP20,95
|
|
205
|
-
redisbench_admin/run_async/render_files.py,sha256=
|
|
205
|
+
redisbench_admin/run_async/render_files.py,sha256=NMagmx-2hsMET_XN8tkmQz55g-azqW7SjAqaq4GL8F0,2676
|
|
206
206
|
redisbench_admin/run_async/run_async.py,sha256=g2ZOQqj9vXZYaRyNpJZtgfYyY9tMuRmEv3Hh3qWOUs8,14525
|
|
207
207
|
redisbench_admin/run_local/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
208
|
-
redisbench_admin/run_local/args.py,sha256=
|
|
208
|
+
redisbench_admin/run_local/args.py,sha256=9Qr-IVQJ3TMqFkn9Jp597KjU2AGq3u0X5Eb82CWD7wk,1504
|
|
209
209
|
redisbench_admin/run_local/local_client.py,sha256=gwawMDOBrf7m--uyxu8kMZC5LBiLjbUBSKvzVOdOAas,124
|
|
210
|
-
redisbench_admin/run_local/local_db.py,sha256=
|
|
210
|
+
redisbench_admin/run_local/local_db.py,sha256=9vINqKOs-wDMFEuEHT0I8KO9YnEo_h4NWNk5da3LwSY,7518
|
|
211
211
|
redisbench_admin/run_local/local_helpers.py,sha256=JyqLW2-Sbm35BXjxxfOB1yK7ADdLfcVrq08NLNdIwac,7026
|
|
212
|
-
redisbench_admin/run_local/run_local.py,sha256=
|
|
212
|
+
redisbench_admin/run_local/run_local.py,sha256=u2smgDsml6-nnjf4ptb4JeEetmtLyVhLGtzho-GGeNU,31149
|
|
213
213
|
redisbench_admin/run_remote/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
214
214
|
redisbench_admin/run_remote/args.py,sha256=vhV87avBwXL8c2QLqrAkIyWD53MYhN06F-3wRv3l5xE,3829
|
|
215
215
|
redisbench_admin/run_remote/consts.py,sha256=bCMkwyeBD-EmOpoHKni7LjWy5WuaxGJhGhqpi4AL0RQ,386
|
|
@@ -217,26 +217,26 @@ redisbench_admin/run_remote/log.py,sha256=cD7zfXt0VEmy0b7452HvcAxX_9kVj6Vm213yNd
|
|
|
217
217
|
redisbench_admin/run_remote/notifications.py,sha256=-W9fLaftEFNfplBl2clHk37jbYxliDbHftQ62khN31k,2157
|
|
218
218
|
redisbench_admin/run_remote/remote_client.py,sha256=JqxsUjyxRtsChIkOWrVTGF_mQH0_8h7v5j-5rud448Y,14079
|
|
219
219
|
redisbench_admin/run_remote/remote_db.py,sha256=a1_fnLhsCGv_0HMBB91zscHTFcHwmab_u1W7u-u1r3E,12929
|
|
220
|
-
redisbench_admin/run_remote/remote_env.py,sha256=
|
|
220
|
+
redisbench_admin/run_remote/remote_env.py,sha256=jUbqijwivVmbC4VKEnUkKVFogy1TRTswxUt4ObqYMeU,5187
|
|
221
221
|
redisbench_admin/run_remote/remote_failures.py,sha256=IOo6DyxarcwwMPCeN4gWB2JrhuC9iBLwq0nCROqr5ak,1567
|
|
222
|
-
redisbench_admin/run_remote/remote_helpers.py,sha256=
|
|
223
|
-
redisbench_admin/run_remote/run_remote.py,sha256=
|
|
224
|
-
redisbench_admin/run_remote/standalone.py,sha256=
|
|
225
|
-
redisbench_admin/run_remote/terraform.py,sha256=
|
|
222
|
+
redisbench_admin/run_remote/remote_helpers.py,sha256=gy10SuKheBiL568ldiOdJaHRPJ_J7DxH_uZpqgOuylo,9818
|
|
223
|
+
redisbench_admin/run_remote/run_remote.py,sha256=uI-c_7FpVjNeVBXcD1uBMLECJZ62Rpfg2Kidmoucle8,67820
|
|
224
|
+
redisbench_admin/run_remote/standalone.py,sha256=vWmm0CdFtrasy-_1BDKO7I_gVPBjjiypv94_Fq2Sm7o,6660
|
|
225
|
+
redisbench_admin/run_remote/terraform.py,sha256=ZOBrSjHrWRMHa9_ER_cS3UxbWK7IdzMkO0ZD-Hq8BAo,3975
|
|
226
226
|
redisbench_admin/utils/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
|
|
227
|
-
redisbench_admin/utils/benchmark_config.py,sha256=
|
|
227
|
+
redisbench_admin/utils/benchmark_config.py,sha256=bC2C6rnj89wkkSlOXyyfe0N15unn_M1t1zfskfVkb98,21387
|
|
228
228
|
redisbench_admin/utils/local.py,sha256=zUvyVI9LZMT3qyxs1pO3mXL6Bt_1z9EZUGppaRcWNRA,3890
|
|
229
229
|
redisbench_admin/utils/redisearch.py,sha256=lchUEzpt0zB1rHwlDlw9LLifAnxFWcLP-PePw7TjL-0,1602
|
|
230
230
|
redisbench_admin/utils/redisgraph_benchmark_go.py,sha256=os7EJt6kBxsFJLKkSoANbjMT7-cEq4-Ns-49alk2Tf8,2048
|
|
231
|
-
redisbench_admin/utils/remote.py,sha256=
|
|
231
|
+
redisbench_admin/utils/remote.py,sha256=nNKKNmzZ4a44U7I3Wzc4fwaiKYNDDIGy-i-seovDkqU,38952
|
|
232
232
|
redisbench_admin/utils/results.py,sha256=uKk3uNJ--bSXlUj_HGQ2OaV6MVqmXJVM8xTzFV6EOw4,3267
|
|
233
233
|
redisbench_admin/utils/ssh.py,sha256=QW4AwlocMHJt05QMdN_4f8WeDmxiEwR80ny8VBThq6k,6533
|
|
234
|
-
redisbench_admin/utils/utils.py,sha256=
|
|
234
|
+
redisbench_admin/utils/utils.py,sha256=FLDjhGkW0PWwcu_nlTnIW6aZtHzJGz4LIwvu1CpCajw,14160
|
|
235
235
|
redisbench_admin/watchdog/__init__.py,sha256=cD7zfXt0VEmy0b7452HvcAxX_9kVj6Vm213yNdUHP20,95
|
|
236
236
|
redisbench_admin/watchdog/args.py,sha256=nKsG1G6ATOZlAMHMtT9u3kXxduKCbejSZ5x8oB_ynZ8,1312
|
|
237
|
-
redisbench_admin/watchdog/watchdog.py,sha256=
|
|
238
|
-
redisbench_admin-0.11.
|
|
239
|
-
redisbench_admin-0.11.
|
|
240
|
-
redisbench_admin-0.11.
|
|
241
|
-
redisbench_admin-0.11.
|
|
242
|
-
redisbench_admin-0.11.
|
|
237
|
+
redisbench_admin/watchdog/watchdog.py,sha256=jFGtm5ktjKuXKWvH7lnmf3pp-ch1WBJUOomXILJMDAg,6158
|
|
238
|
+
redisbench_admin-0.11.21.dist-info/LICENSE,sha256=AAMtfs82zOOvmG68vILivm6lxi2rcOlGObmA8jzxQvw,10768
|
|
239
|
+
redisbench_admin-0.11.21.dist-info/METADATA,sha256=RrK5OW8EH3XQEaaQmFvtHOtMCCJJutOkGYvvHBpTKJo,5389
|
|
240
|
+
redisbench_admin-0.11.21.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
241
|
+
redisbench_admin-0.11.21.dist-info/entry_points.txt,sha256=UUawXk_AS-PlieKJ1QxPQXGsRLb6OW_F0MtmA1W0KE8,113
|
|
242
|
+
redisbench_admin-0.11.21.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|