redis-benchmarks-specification 0.1.282__py3-none-any.whl → 0.1.283__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.

Potentially problematic release.


This version of redis-benchmarks-specification might be problematic. Click here for more details.

@@ -81,6 +81,157 @@ def extract_redis_metadata(redis_conn) -> Dict[str, Any]:
81
81
  }
82
82
 
83
83
 
84
+ def extract_server_info_for_args(redis_conn) -> Dict[str, str]:
85
+ """
86
+ Extract server information from Redis INFO SERVER to auto-detect
87
+ github_org, github_repo, and github_version when not explicitly provided.
88
+
89
+ Args:
90
+ redis_conn: Redis connection object
91
+
92
+ Returns:
93
+ Dictionary containing detected server information:
94
+ - github_org: Detected organization (e.g., 'redis', 'valkey-io')
95
+ - github_repo: Detected repository (e.g., 'redis', 'valkey')
96
+ - github_version: Detected version
97
+ - server_name: Server name from INFO
98
+ """
99
+ try:
100
+ server_info = redis_conn.info("server")
101
+
102
+ # Extract server name and version info
103
+ server_name = server_info.get("server_name", "").lower()
104
+ redis_version = server_info.get("redis_version", "unknown")
105
+
106
+ # Default values
107
+ github_org = "redis"
108
+ github_repo = "redis"
109
+ github_version = redis_version
110
+
111
+ # Check for Valkey
112
+ if "valkey" in server_name:
113
+ github_org = "valkey-io"
114
+ github_repo = "valkey"
115
+ # Use valkey_version if available, fallback to redis_version
116
+ valkey_version = server_info.get("valkey_version")
117
+ if valkey_version:
118
+ github_version = valkey_version
119
+
120
+ logging.info(
121
+ f"Auto-detected server info: org={github_org}, repo={github_repo}, "
122
+ f"version={github_version}, server_name={server_name}"
123
+ )
124
+
125
+ return {
126
+ "github_org": github_org,
127
+ "github_repo": github_repo,
128
+ "github_version": github_version,
129
+ "server_name": server_name,
130
+ }
131
+
132
+ except Exception as e:
133
+ logging.error(f"Failed to extract server info: {e}")
134
+ return {
135
+ "github_org": "redis",
136
+ "github_repo": "redis",
137
+ "github_version": "unknown",
138
+ "server_name": "unknown",
139
+ }
140
+
141
+
142
+ def extract_server_metadata_for_timeseries(redis_conn) -> Dict[str, str]:
143
+ """
144
+ Extract comprehensive server metadata from Redis INFO SERVER for use as
145
+ timeseries metadata tags.
146
+
147
+ Args:
148
+ redis_conn: Redis connection object
149
+
150
+ Returns:
151
+ Dictionary containing server metadata for timeseries tags:
152
+ - os: Operating system information
153
+ - arch_bits: Architecture bits (32/64)
154
+ - gcc_version: GCC compiler version
155
+ - server_mode: Server mode (standalone/cluster/sentinel)
156
+ - multiplexing_api: Multiplexing API used (epoll/kqueue/etc)
157
+ - atomicvar_api: Atomic variable API
158
+ - redis_build_id: Build ID
159
+ - redis_git_dirty: Git dirty flag
160
+ - process_supervised: Process supervision status
161
+ - availability_zone: Availability zone (if available)
162
+ - And other interesting metadata fields
163
+ """
164
+ try:
165
+ server_info = redis_conn.info("server")
166
+
167
+ # Extract interesting metadata fields for timeseries tags
168
+ metadata = {}
169
+
170
+ # Core system information
171
+ if "os" in server_info:
172
+ metadata["os"] = str(server_info["os"])
173
+ if "arch_bits" in server_info:
174
+ metadata["arch_bits"] = str(server_info["arch_bits"])
175
+ if "gcc_version" in server_info:
176
+ metadata["gcc_version"] = str(server_info["gcc_version"])
177
+
178
+ # Server configuration
179
+ if "server_mode" in server_info:
180
+ metadata["server_mode"] = str(server_info["server_mode"])
181
+ elif "redis_mode" in server_info: # Fallback for older versions
182
+ metadata["server_mode"] = str(server_info["redis_mode"])
183
+
184
+ # Performance-related APIs
185
+ if "multiplexing_api" in server_info:
186
+ metadata["multiplexing_api"] = str(server_info["multiplexing_api"])
187
+ if "atomicvar_api" in server_info:
188
+ metadata["atomicvar_api"] = str(server_info["atomicvar_api"])
189
+ if "monotonic_clock" in server_info:
190
+ metadata["monotonic_clock"] = str(server_info["monotonic_clock"])
191
+
192
+ # Build information
193
+ if "redis_build_id" in server_info:
194
+ metadata["redis_build_id"] = str(server_info["redis_build_id"])
195
+ if "redis_git_dirty" in server_info:
196
+ metadata["redis_git_dirty"] = str(server_info["redis_git_dirty"])
197
+
198
+ # Process information
199
+ if "process_supervised" in server_info:
200
+ metadata["process_supervised"] = str(server_info["process_supervised"])
201
+
202
+ # Cloud/deployment information
203
+ if "availability_zone" in server_info and server_info["availability_zone"]:
204
+ metadata["availability_zone"] = str(server_info["availability_zone"])
205
+
206
+ # IO threads (performance relevant)
207
+ if "io_threads_active" in server_info:
208
+ metadata["io_threads_active"] = str(server_info["io_threads_active"])
209
+
210
+ # Server name and version info
211
+ if "server_name" in server_info and server_info["server_name"]:
212
+ metadata["server_name"] = str(server_info["server_name"])
213
+ if "redis_version" in server_info:
214
+ metadata["redis_version"] = str(server_info["redis_version"])
215
+ if "valkey_version" in server_info:
216
+ metadata["valkey_version"] = str(server_info["valkey_version"])
217
+ if "valkey_release_stage" in server_info:
218
+ metadata["valkey_release_stage"] = str(server_info["valkey_release_stage"])
219
+
220
+ # Configuration file info
221
+ if "config_file" in server_info and server_info["config_file"]:
222
+ metadata["config_file"] = str(server_info["config_file"])
223
+ else:
224
+ metadata["config_file"] = "none"
225
+
226
+ logging.info(f"Extracted {len(metadata)} server metadata fields for timeseries: {list(metadata.keys())}")
227
+
228
+ return metadata
229
+
230
+ except Exception as e:
231
+ logging.error(f"Failed to extract server metadata: {e}")
232
+ return {}
233
+
234
+
84
235
  def calculate_profile_duration(benchmark_duration_seconds: int) -> int:
85
236
  """
86
237
  Calculate profiling duration based on benchmark duration.
@@ -1125,6 +1125,7 @@ def process_self_contained_coordinator_stream(
1125
1125
  current_cpu_pos = args.cpuset_start_pos
1126
1126
  temporary_dir_client = tempfile.mkdtemp(dir=home)
1127
1127
 
1128
+ # These will be updated after auto-detection
1128
1129
  tf_github_org = args.github_org
1129
1130
  tf_github_repo = args.github_repo
1130
1131
  tf_triggering_env = args.platform_name
@@ -1157,6 +1158,56 @@ def process_self_contained_coordinator_stream(
1157
1158
  )
1158
1159
  setup_name = "oss-standalone"
1159
1160
  r.ping()
1161
+
1162
+ # Auto-detect server information if not explicitly provided
1163
+ from redis_benchmarks_specification.__runner__.remote_profiling import (
1164
+ extract_server_info_for_args,
1165
+ extract_server_metadata_for_timeseries
1166
+ )
1167
+
1168
+ detected_info = extract_server_info_for_args(r)
1169
+ server_metadata = extract_server_metadata_for_timeseries(r)
1170
+
1171
+ # Use detected values if arguments weren't explicitly provided
1172
+ github_org = args.github_org
1173
+ github_repo = args.github_repo
1174
+
1175
+ # Auto-detect github_org if it's the default value
1176
+ if args.github_org == "redis" and detected_info["github_org"] != "redis":
1177
+ github_org = detected_info["github_org"]
1178
+ logging.info(f"Auto-detected github_org: {github_org}")
1179
+
1180
+ # Auto-detect github_repo if it's the default value
1181
+ if args.github_repo == "redis" and detected_info["github_repo"] != "redis":
1182
+ github_repo = detected_info["github_repo"]
1183
+ logging.info(f"Auto-detected github_repo: {github_repo}")
1184
+
1185
+ # Auto-detect version if it's the default value
1186
+ if args.github_version == "NA" and detected_info["github_version"] != "unknown":
1187
+ git_version = detected_info["github_version"]
1188
+ logging.info(f"Auto-detected github_version: {git_version}")
1189
+
1190
+ # Auto-detect git hash from server info if available
1191
+ if git_hash == "NA":
1192
+ try:
1193
+ server_info = r.info("server")
1194
+ redis_git_sha1 = server_info.get("redis_git_sha1", "")
1195
+ redis_build_id = server_info.get("redis_build_id", "")
1196
+
1197
+ # Use git_sha1 if available and not empty/zero
1198
+ if redis_git_sha1 and redis_git_sha1 not in ("", "0", "00000000"):
1199
+ git_hash = redis_git_sha1
1200
+ logging.info(f"Auto-detected git_hash from redis_git_sha1: {git_hash}")
1201
+ # Fallback to build_id if git_sha1 is not available
1202
+ elif redis_build_id and redis_build_id not in ("", "0"):
1203
+ git_hash = redis_build_id
1204
+ logging.info(f"Auto-detected git_hash from redis_build_id: {git_hash}")
1205
+ except Exception as e:
1206
+ logging.warning(f"Failed to auto-detect git hash: {e}")
1207
+
1208
+ # Update tf_github_org and tf_github_repo with detected values
1209
+ tf_github_org = github_org
1210
+ tf_github_repo = github_repo
1160
1211
  redis_conns = [r]
1161
1212
  if oss_cluster_api_enabled:
1162
1213
  redis_conns = []
@@ -1271,6 +1322,8 @@ def process_self_contained_coordinator_stream(
1271
1322
  benchmark_tool_workdir = client_mnt_point
1272
1323
 
1273
1324
  metadata = {}
1325
+ # Add server metadata from Redis INFO SERVER
1326
+ metadata.update(server_metadata)
1274
1327
  test_tls_cacert = None
1275
1328
  test_tls_cert = None
1276
1329
  test_tls_key = None
@@ -1979,6 +2032,7 @@ def process_self_contained_coordinator_stream(
1979
2032
  tf_triggering_env,
1980
2033
  topology_spec_name,
1981
2034
  default_metrics,
2035
+ git_hash,
1982
2036
  )
1983
2037
  test_result = True
1984
2038
  total_test_suite_runs = total_test_suite_runs + 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: redis-benchmarks-specification
3
- Version: 0.1.282
3
+ Version: 0.1.283
4
4
  Summary: The Redis benchmarks specification describes the cross-language/tools requirements and expectations to foster performance and observability standards around redis related technologies. Members from both industry and academia, including organizations and individuals are encouraged to contribute.
5
5
  Author: filipecosta90
6
6
  Author-email: filipecosta.90@gmail.com
@@ -24,8 +24,8 @@ redis_benchmarks_specification/__compare__/compare.py,sha256=8mtvlwQRYR4c4oOji2q
24
24
  redis_benchmarks_specification/__init__.py,sha256=YQIEx2sLPPA0JR9OuCuMNMNtm-f_gqDKgzvNJnkGNKY,491
25
25
  redis_benchmarks_specification/__runner__/__init__.py,sha256=l-G1z-t6twUgi8QLueqoTQLvJmv3hJoEYskGm6H7L6M,83
26
26
  redis_benchmarks_specification/__runner__/args.py,sha256=4NaHTfT3FB0wGrYslWb_DKHGf9Za963TjXKk648cjqw,9679
27
- redis_benchmarks_specification/__runner__/remote_profiling.py,sha256=oTcV_GbtduUE2jnodkLBmnyO53Kgralvi08peLKMXYk,12030
28
- redis_benchmarks_specification/__runner__/runner.py,sha256=l0h2uCEtQkkzlP8fHlY4BwnBTm1ysu0u52OgiHOsLNo,102241
27
+ redis_benchmarks_specification/__runner__/remote_profiling.py,sha256=DNl4Wx4wHHcbmKrXFrS51gLVVBY-hftUB8awb_p9kY4,17887
28
+ redis_benchmarks_specification/__runner__/runner.py,sha256=tX59OElteutpg5-phvoK4aLFS-oPVa9GXb8IYWrQQyk,105398
29
29
  redis_benchmarks_specification/__self_contained_coordinator__/__init__.py,sha256=l-G1z-t6twUgi8QLueqoTQLvJmv3hJoEYskGm6H7L6M,83
30
30
  redis_benchmarks_specification/__self_contained_coordinator__/args.py,sha256=uxBjdQ78klvsVi6lOfGYQVaWIxc8OI-DwYKY16SgvCY,5952
31
31
  redis_benchmarks_specification/__self_contained_coordinator__/artifacts.py,sha256=OVHqJzDgeSSRfUSiKp1ZTAVv14PvSbk-5yJsAAoUfpw,936
@@ -273,8 +273,8 @@ redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-publi
273
273
  redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-server-time-pipeline-10.yml,sha256=rJuWWXubUeRKQ2GSfHlbPMLeOyM9Eu_MzvN2vgKcAhA,672
274
274
  redis_benchmarks_specification/test-suites/template.txt,sha256=d_edIE7Sxa5X7I2yG-Io0bPdbDIHR0oWFoCA3XUt_EU,435
275
275
  redis_benchmarks_specification/vector-search-test-suites/vector_db_benchmark_test.yml,sha256=uhaSP6YUVmPvZU-qMtPPGdvNEUgUBqOfveUbeJ9WsbI,972
276
- redis_benchmarks_specification-0.1.282.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
277
- redis_benchmarks_specification-0.1.282.dist-info/METADATA,sha256=iPeWrG4jBoFKIZ3uGvr_lNUA4w6MgexW1sk8jCKhzjc,22726
278
- redis_benchmarks_specification-0.1.282.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
279
- redis_benchmarks_specification-0.1.282.dist-info/entry_points.txt,sha256=x5WBXCZsnDRTZxV7SBGmC65L2k-ygdDOxV8vuKN00Nk,715
280
- redis_benchmarks_specification-0.1.282.dist-info/RECORD,,
276
+ redis_benchmarks_specification-0.1.283.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
277
+ redis_benchmarks_specification-0.1.283.dist-info/METADATA,sha256=j1bjZAVxEJYs0T-lDHCswASqzOd5pbtABJOwlGUFXKM,22726
278
+ redis_benchmarks_specification-0.1.283.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
279
+ redis_benchmarks_specification-0.1.283.dist-info/entry_points.txt,sha256=x5WBXCZsnDRTZxV7SBGmC65L2k-ygdDOxV8vuKN00Nk,715
280
+ redis_benchmarks_specification-0.1.283.dist-info/RECORD,,