1 # Copyright 2017 gRPC authors. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 # Autogenerated by tools/codegen/core/gen_stats_data.py 16 17 import massage_qps_stats_helpers 18 19 20 def massage_qps_stats(scenario_result): 21 for stats in scenario_result["serverStats"] + scenario_result["clientStats"]: 22 if "coreStats" in stats: 23 # Get rid of the "coreStats" element and replace it by statistics 24 # that correspond to columns in the bigquery schema. 25 core_stats = stats["coreStats"] 26 del stats["coreStats"] 27 stats[ 28 "core_client_calls_created"] = massage_qps_stats_helpers.counter( 29 core_stats, "client_calls_created") 30 stats[ 31 "core_server_calls_created"] = massage_qps_stats_helpers.counter( 32 core_stats, "server_calls_created") 33 stats["core_cqs_created"] = massage_qps_stats_helpers.counter( 34 core_stats, "cqs_created") 35 stats[ 36 "core_client_channels_created"] = massage_qps_stats_helpers.counter( 37 core_stats, "client_channels_created") 38 stats[ 39 "core_client_subchannels_created"] = massage_qps_stats_helpers.counter( 40 core_stats, "client_subchannels_created") 41 stats[ 42 "core_server_channels_created"] = massage_qps_stats_helpers.counter( 43 core_stats, "server_channels_created") 44 stats["core_syscall_poll"] = massage_qps_stats_helpers.counter( 45 core_stats, "syscall_poll") 46 stats["core_syscall_wait"] = massage_qps_stats_helpers.counter( 47 core_stats, "syscall_wait") 48 stats["core_pollset_kick"] = massage_qps_stats_helpers.counter( 49 core_stats, "pollset_kick") 50 stats[ 51 "core_pollset_kicked_without_poller"] = massage_qps_stats_helpers.counter( 52 core_stats, "pollset_kicked_without_poller") 53 stats[ 54 "core_pollset_kicked_again"] = massage_qps_stats_helpers.counter( 55 core_stats, "pollset_kicked_again") 56 stats[ 57 "core_pollset_kick_wakeup_fd"] = massage_qps_stats_helpers.counter( 58 core_stats, "pollset_kick_wakeup_fd") 59 stats[ 60 "core_pollset_kick_wakeup_cv"] = massage_qps_stats_helpers.counter( 61 core_stats, "pollset_kick_wakeup_cv") 62 stats[ 63 "core_pollset_kick_own_thread"] = massage_qps_stats_helpers.counter( 64 core_stats, "pollset_kick_own_thread") 65 stats["core_syscall_epoll_ctl"] = massage_qps_stats_helpers.counter( 66 core_stats, "syscall_epoll_ctl") 67 stats[ 68 "core_pollset_fd_cache_hits"] = massage_qps_stats_helpers.counter( 69 core_stats, "pollset_fd_cache_hits") 70 stats[ 71 "core_histogram_slow_lookups"] = massage_qps_stats_helpers.counter( 72 core_stats, "histogram_slow_lookups") 73 stats["core_syscall_write"] = massage_qps_stats_helpers.counter( 74 core_stats, "syscall_write") 75 stats["core_syscall_read"] = massage_qps_stats_helpers.counter( 76 core_stats, "syscall_read") 77 stats[ 78 "core_tcp_backup_pollers_created"] = massage_qps_stats_helpers.counter( 79 core_stats, "tcp_backup_pollers_created") 80 stats[ 81 "core_tcp_backup_poller_polls"] = massage_qps_stats_helpers.counter( 82 core_stats, "tcp_backup_poller_polls") 83 stats["core_http2_op_batches"] = massage_qps_stats_helpers.counter( 84 core_stats, "http2_op_batches") 85 stats["core_http2_op_cancel"] = massage_qps_stats_helpers.counter( 86 core_stats, "http2_op_cancel") 87 stats[ 88 "core_http2_op_send_initial_metadata"] = massage_qps_stats_helpers.counter( 89 core_stats, "http2_op_send_initial_metadata") 90 stats[ 91 "core_http2_op_send_message"] = massage_qps_stats_helpers.counter( 92 core_stats, "http2_op_send_message") 93 stats[ 94 "core_http2_op_send_trailing_metadata"] = massage_qps_stats_helpers.counter( 95 core_stats, "http2_op_send_trailing_metadata") 96 stats[ 97 "core_http2_op_recv_initial_metadata"] = massage_qps_stats_helpers.counter( 98 core_stats, "http2_op_recv_initial_metadata") 99 stats[ 100 "core_http2_op_recv_message"] = massage_qps_stats_helpers.counter( 101 core_stats, "http2_op_recv_message") 102 stats[ 103 "core_http2_op_recv_trailing_metadata"] = massage_qps_stats_helpers.counter( 104 core_stats, "http2_op_recv_trailing_metadata") 105 stats[ 106 "core_http2_settings_writes"] = massage_qps_stats_helpers.counter( 107 core_stats, "http2_settings_writes") 108 stats["core_http2_pings_sent"] = massage_qps_stats_helpers.counter( 109 core_stats, "http2_pings_sent") 110 stats[ 111 "core_http2_writes_begun"] = massage_qps_stats_helpers.counter( 112 core_stats, "http2_writes_begun") 113 stats[ 114 "core_http2_writes_offloaded"] = massage_qps_stats_helpers.counter( 115 core_stats, "http2_writes_offloaded") 116 stats[ 117 "core_http2_writes_continued"] = massage_qps_stats_helpers.counter( 118 core_stats, "http2_writes_continued") 119 stats[ 120 "core_http2_partial_writes"] = massage_qps_stats_helpers.counter( 121 core_stats, "http2_partial_writes") 122 stats[ 123 "core_http2_initiate_write_due_to_initial_write"] = massage_qps_stats_helpers.counter( 124 core_stats, "http2_initiate_write_due_to_initial_write") 125 stats[ 126 "core_http2_initiate_write_due_to_start_new_stream"] = massage_qps_stats_helpers.counter( 127 core_stats, "http2_initiate_write_due_to_start_new_stream") 128 stats[ 129 "core_http2_initiate_write_due_to_send_message"] = massage_qps_stats_helpers.counter( 130 core_stats, "http2_initiate_write_due_to_send_message") 131 stats[ 132 "core_http2_initiate_write_due_to_send_initial_metadata"] = massage_qps_stats_helpers.counter( 133 core_stats, 134 "http2_initiate_write_due_to_send_initial_metadata") 135 stats[ 136 "core_http2_initiate_write_due_to_send_trailing_metadata"] = massage_qps_stats_helpers.counter( 137 core_stats, 138 "http2_initiate_write_due_to_send_trailing_metadata") 139 stats[ 140 "core_http2_initiate_write_due_to_retry_send_ping"] = massage_qps_stats_helpers.counter( 141 core_stats, "http2_initiate_write_due_to_retry_send_ping") 142 stats[ 143 "core_http2_initiate_write_due_to_continue_pings"] = massage_qps_stats_helpers.counter( 144 core_stats, "http2_initiate_write_due_to_continue_pings") 145 stats[ 146 "core_http2_initiate_write_due_to_goaway_sent"] = massage_qps_stats_helpers.counter( 147 core_stats, "http2_initiate_write_due_to_goaway_sent") 148 stats[ 149 "core_http2_initiate_write_due_to_rst_stream"] = massage_qps_stats_helpers.counter( 150 core_stats, "http2_initiate_write_due_to_rst_stream") 151 stats[ 152 "core_http2_initiate_write_due_to_close_from_api"] = massage_qps_stats_helpers.counter( 153 core_stats, "http2_initiate_write_due_to_close_from_api") 154 stats[ 155 "core_http2_initiate_write_due_to_stream_flow_control"] = massage_qps_stats_helpers.counter( 156 core_stats, 157 "http2_initiate_write_due_to_stream_flow_control") 158 stats[ 159 "core_http2_initiate_write_due_to_transport_flow_control"] = massage_qps_stats_helpers.counter( 160 core_stats, 161 "http2_initiate_write_due_to_transport_flow_control") 162 stats[ 163 "core_http2_initiate_write_due_to_send_settings"] = massage_qps_stats_helpers.counter( 164 core_stats, "http2_initiate_write_due_to_send_settings") 165 stats[ 166 "core_http2_initiate_write_due_to_bdp_estimator_ping"] = massage_qps_stats_helpers.counter( 167 core_stats, 168 "http2_initiate_write_due_to_bdp_estimator_ping") 169 stats[ 170 "core_http2_initiate_write_due_to_flow_control_unstalled_by_setting"] = massage_qps_stats_helpers.counter( 171 core_stats, 172 "http2_initiate_write_due_to_flow_control_unstalled_by_setting" 173 ) 174 stats[ 175 "core_http2_initiate_write_due_to_flow_control_unstalled_by_update"] = massage_qps_stats_helpers.counter( 176 core_stats, 177 "http2_initiate_write_due_to_flow_control_unstalled_by_update" 178 ) 179 stats[ 180 "core_http2_initiate_write_due_to_application_ping"] = massage_qps_stats_helpers.counter( 181 core_stats, "http2_initiate_write_due_to_application_ping") 182 stats[ 183 "core_http2_initiate_write_due_to_keepalive_ping"] = massage_qps_stats_helpers.counter( 184 core_stats, "http2_initiate_write_due_to_keepalive_ping") 185 stats[ 186 "core_http2_initiate_write_due_to_transport_flow_control_unstalled"] = massage_qps_stats_helpers.counter( 187 core_stats, 188 "http2_initiate_write_due_to_transport_flow_control_unstalled" 189 ) 190 stats[ 191 "core_http2_initiate_write_due_to_ping_response"] = massage_qps_stats_helpers.counter( 192 core_stats, "http2_initiate_write_due_to_ping_response") 193 stats[ 194 "core_http2_initiate_write_due_to_force_rst_stream"] = massage_qps_stats_helpers.counter( 195 core_stats, "http2_initiate_write_due_to_force_rst_stream") 196 stats[ 197 "core_http2_spurious_writes_begun"] = massage_qps_stats_helpers.counter( 198 core_stats, "http2_spurious_writes_begun") 199 stats[ 200 "core_hpack_recv_indexed"] = massage_qps_stats_helpers.counter( 201 core_stats, "hpack_recv_indexed") 202 stats[ 203 "core_hpack_recv_lithdr_incidx"] = massage_qps_stats_helpers.counter( 204 core_stats, "hpack_recv_lithdr_incidx") 205 stats[ 206 "core_hpack_recv_lithdr_incidx_v"] = massage_qps_stats_helpers.counter( 207 core_stats, "hpack_recv_lithdr_incidx_v") 208 stats[ 209 "core_hpack_recv_lithdr_notidx"] = massage_qps_stats_helpers.counter( 210 core_stats, "hpack_recv_lithdr_notidx") 211 stats[ 212 "core_hpack_recv_lithdr_notidx_v"] = massage_qps_stats_helpers.counter( 213 core_stats, "hpack_recv_lithdr_notidx_v") 214 stats[ 215 "core_hpack_recv_lithdr_nvridx"] = massage_qps_stats_helpers.counter( 216 core_stats, "hpack_recv_lithdr_nvridx") 217 stats[ 218 "core_hpack_recv_lithdr_nvridx_v"] = massage_qps_stats_helpers.counter( 219 core_stats, "hpack_recv_lithdr_nvridx_v") 220 stats[ 221 "core_hpack_recv_uncompressed"] = massage_qps_stats_helpers.counter( 222 core_stats, "hpack_recv_uncompressed") 223 stats[ 224 "core_hpack_recv_huffman"] = massage_qps_stats_helpers.counter( 225 core_stats, "hpack_recv_huffman") 226 stats["core_hpack_recv_binary"] = massage_qps_stats_helpers.counter( 227 core_stats, "hpack_recv_binary") 228 stats[ 229 "core_hpack_recv_binary_base64"] = massage_qps_stats_helpers.counter( 230 core_stats, "hpack_recv_binary_base64") 231 stats[ 232 "core_hpack_send_indexed"] = massage_qps_stats_helpers.counter( 233 core_stats, "hpack_send_indexed") 234 stats[ 235 "core_hpack_send_lithdr_incidx"] = massage_qps_stats_helpers.counter( 236 core_stats, "hpack_send_lithdr_incidx") 237 stats[ 238 "core_hpack_send_lithdr_incidx_v"] = massage_qps_stats_helpers.counter( 239 core_stats, "hpack_send_lithdr_incidx_v") 240 stats[ 241 "core_hpack_send_lithdr_notidx"] = massage_qps_stats_helpers.counter( 242 core_stats, "hpack_send_lithdr_notidx") 243 stats[ 244 "core_hpack_send_lithdr_notidx_v"] = massage_qps_stats_helpers.counter( 245 core_stats, "hpack_send_lithdr_notidx_v") 246 stats[ 247 "core_hpack_send_lithdr_nvridx"] = massage_qps_stats_helpers.counter( 248 core_stats, "hpack_send_lithdr_nvridx") 249 stats[ 250 "core_hpack_send_lithdr_nvridx_v"] = massage_qps_stats_helpers.counter( 251 core_stats, "hpack_send_lithdr_nvridx_v") 252 stats[ 253 "core_hpack_send_uncompressed"] = massage_qps_stats_helpers.counter( 254 core_stats, "hpack_send_uncompressed") 255 stats[ 256 "core_hpack_send_huffman"] = massage_qps_stats_helpers.counter( 257 core_stats, "hpack_send_huffman") 258 stats["core_hpack_send_binary"] = massage_qps_stats_helpers.counter( 259 core_stats, "hpack_send_binary") 260 stats[ 261 "core_hpack_send_binary_base64"] = massage_qps_stats_helpers.counter( 262 core_stats, "hpack_send_binary_base64") 263 stats[ 264 "core_combiner_locks_initiated"] = massage_qps_stats_helpers.counter( 265 core_stats, "combiner_locks_initiated") 266 stats[ 267 "core_combiner_locks_scheduled_items"] = massage_qps_stats_helpers.counter( 268 core_stats, "combiner_locks_scheduled_items") 269 stats[ 270 "core_combiner_locks_scheduled_final_items"] = massage_qps_stats_helpers.counter( 271 core_stats, "combiner_locks_scheduled_final_items") 272 stats[ 273 "core_combiner_locks_offloaded"] = massage_qps_stats_helpers.counter( 274 core_stats, "combiner_locks_offloaded") 275 stats[ 276 "core_call_combiner_locks_initiated"] = massage_qps_stats_helpers.counter( 277 core_stats, "call_combiner_locks_initiated") 278 stats[ 279 "core_call_combiner_locks_scheduled_items"] = massage_qps_stats_helpers.counter( 280 core_stats, "call_combiner_locks_scheduled_items") 281 stats[ 282 "core_call_combiner_set_notify_on_cancel"] = massage_qps_stats_helpers.counter( 283 core_stats, "call_combiner_set_notify_on_cancel") 284 stats[ 285 "core_call_combiner_cancelled"] = massage_qps_stats_helpers.counter( 286 core_stats, "call_combiner_cancelled") 287 stats[ 288 "core_executor_scheduled_short_items"] = massage_qps_stats_helpers.counter( 289 core_stats, "executor_scheduled_short_items") 290 stats[ 291 "core_executor_scheduled_long_items"] = massage_qps_stats_helpers.counter( 292 core_stats, "executor_scheduled_long_items") 293 stats[ 294 "core_executor_scheduled_to_self"] = massage_qps_stats_helpers.counter( 295 core_stats, "executor_scheduled_to_self") 296 stats[ 297 "core_executor_wakeup_initiated"] = massage_qps_stats_helpers.counter( 298 core_stats, "executor_wakeup_initiated") 299 stats[ 300 "core_executor_queue_drained"] = massage_qps_stats_helpers.counter( 301 core_stats, "executor_queue_drained") 302 stats[ 303 "core_executor_push_retries"] = massage_qps_stats_helpers.counter( 304 core_stats, "executor_push_retries") 305 stats[ 306 "core_server_requested_calls"] = massage_qps_stats_helpers.counter( 307 core_stats, "server_requested_calls") 308 stats[ 309 "core_server_slowpath_requests_queued"] = massage_qps_stats_helpers.counter( 310 core_stats, "server_slowpath_requests_queued") 311 stats[ 312 "core_cq_ev_queue_trylock_failures"] = massage_qps_stats_helpers.counter( 313 core_stats, "cq_ev_queue_trylock_failures") 314 stats[ 315 "core_cq_ev_queue_trylock_successes"] = massage_qps_stats_helpers.counter( 316 core_stats, "cq_ev_queue_trylock_successes") 317 stats[ 318 "core_cq_ev_queue_transient_pop_failures"] = massage_qps_stats_helpers.counter( 319 core_stats, "cq_ev_queue_transient_pop_failures") 320 h = massage_qps_stats_helpers.histogram(core_stats, 321 "call_initial_size") 322 stats["core_call_initial_size"] = ",".join( 323 "%f" % x for x in h.buckets) 324 stats["core_call_initial_size_bkts"] = ",".join( 325 "%f" % x for x in h.boundaries) 326 stats[ 327 "core_call_initial_size_50p"] = massage_qps_stats_helpers.percentile( 328 h.buckets, 50, h.boundaries) 329 stats[ 330 "core_call_initial_size_95p"] = massage_qps_stats_helpers.percentile( 331 h.buckets, 95, h.boundaries) 332 stats[ 333 "core_call_initial_size_99p"] = massage_qps_stats_helpers.percentile( 334 h.buckets, 99, h.boundaries) 335 h = massage_qps_stats_helpers.histogram(core_stats, 336 "poll_events_returned") 337 stats["core_poll_events_returned"] = ",".join( 338 "%f" % x for x in h.buckets) 339 stats["core_poll_events_returned_bkts"] = ",".join( 340 "%f" % x for x in h.boundaries) 341 stats[ 342 "core_poll_events_returned_50p"] = massage_qps_stats_helpers.percentile( 343 h.buckets, 50, h.boundaries) 344 stats[ 345 "core_poll_events_returned_95p"] = massage_qps_stats_helpers.percentile( 346 h.buckets, 95, h.boundaries) 347 stats[ 348 "core_poll_events_returned_99p"] = massage_qps_stats_helpers.percentile( 349 h.buckets, 99, h.boundaries) 350 h = massage_qps_stats_helpers.histogram(core_stats, 351 "tcp_write_size") 352 stats["core_tcp_write_size"] = ",".join("%f" % x for x in h.buckets) 353 stats["core_tcp_write_size_bkts"] = ",".join( 354 "%f" % x for x in h.boundaries) 355 stats[ 356 "core_tcp_write_size_50p"] = massage_qps_stats_helpers.percentile( 357 h.buckets, 50, h.boundaries) 358 stats[ 359 "core_tcp_write_size_95p"] = massage_qps_stats_helpers.percentile( 360 h.buckets, 95, h.boundaries) 361 stats[ 362 "core_tcp_write_size_99p"] = massage_qps_stats_helpers.percentile( 363 h.buckets, 99, h.boundaries) 364 h = massage_qps_stats_helpers.histogram(core_stats, 365 "tcp_write_iov_size") 366 stats["core_tcp_write_iov_size"] = ",".join( 367 "%f" % x for x in h.buckets) 368 stats["core_tcp_write_iov_size_bkts"] = ",".join( 369 "%f" % x for x in h.boundaries) 370 stats[ 371 "core_tcp_write_iov_size_50p"] = massage_qps_stats_helpers.percentile( 372 h.buckets, 50, h.boundaries) 373 stats[ 374 "core_tcp_write_iov_size_95p"] = massage_qps_stats_helpers.percentile( 375 h.buckets, 95, h.boundaries) 376 stats[ 377 "core_tcp_write_iov_size_99p"] = massage_qps_stats_helpers.percentile( 378 h.buckets, 99, h.boundaries) 379 h = massage_qps_stats_helpers.histogram(core_stats, "tcp_read_size") 380 stats["core_tcp_read_size"] = ",".join("%f" % x for x in h.buckets) 381 stats["core_tcp_read_size_bkts"] = ",".join( 382 "%f" % x for x in h.boundaries) 383 stats[ 384 "core_tcp_read_size_50p"] = massage_qps_stats_helpers.percentile( 385 h.buckets, 50, h.boundaries) 386 stats[ 387 "core_tcp_read_size_95p"] = massage_qps_stats_helpers.percentile( 388 h.buckets, 95, h.boundaries) 389 stats[ 390 "core_tcp_read_size_99p"] = massage_qps_stats_helpers.percentile( 391 h.buckets, 99, h.boundaries) 392 h = massage_qps_stats_helpers.histogram(core_stats, 393 "tcp_read_offer") 394 stats["core_tcp_read_offer"] = ",".join("%f" % x for x in h.buckets) 395 stats["core_tcp_read_offer_bkts"] = ",".join( 396 "%f" % x for x in h.boundaries) 397 stats[ 398 "core_tcp_read_offer_50p"] = massage_qps_stats_helpers.percentile( 399 h.buckets, 50, h.boundaries) 400 stats[ 401 "core_tcp_read_offer_95p"] = massage_qps_stats_helpers.percentile( 402 h.buckets, 95, h.boundaries) 403 stats[ 404 "core_tcp_read_offer_99p"] = massage_qps_stats_helpers.percentile( 405 h.buckets, 99, h.boundaries) 406 h = massage_qps_stats_helpers.histogram(core_stats, 407 "tcp_read_offer_iov_size") 408 stats["core_tcp_read_offer_iov_size"] = ",".join( 409 "%f" % x for x in h.buckets) 410 stats["core_tcp_read_offer_iov_size_bkts"] = ",".join( 411 "%f" % x for x in h.boundaries) 412 stats[ 413 "core_tcp_read_offer_iov_size_50p"] = massage_qps_stats_helpers.percentile( 414 h.buckets, 50, h.boundaries) 415 stats[ 416 "core_tcp_read_offer_iov_size_95p"] = massage_qps_stats_helpers.percentile( 417 h.buckets, 95, h.boundaries) 418 stats[ 419 "core_tcp_read_offer_iov_size_99p"] = massage_qps_stats_helpers.percentile( 420 h.buckets, 99, h.boundaries) 421 h = massage_qps_stats_helpers.histogram(core_stats, 422 "http2_send_message_size") 423 stats["core_http2_send_message_size"] = ",".join( 424 "%f" % x for x in h.buckets) 425 stats["core_http2_send_message_size_bkts"] = ",".join( 426 "%f" % x for x in h.boundaries) 427 stats[ 428 "core_http2_send_message_size_50p"] = massage_qps_stats_helpers.percentile( 429 h.buckets, 50, h.boundaries) 430 stats[ 431 "core_http2_send_message_size_95p"] = massage_qps_stats_helpers.percentile( 432 h.buckets, 95, h.boundaries) 433 stats[ 434 "core_http2_send_message_size_99p"] = massage_qps_stats_helpers.percentile( 435 h.buckets, 99, h.boundaries) 436 h = massage_qps_stats_helpers.histogram( 437 core_stats, "http2_send_initial_metadata_per_write") 438 stats["core_http2_send_initial_metadata_per_write"] = ",".join( 439 "%f" % x for x in h.buckets) 440 stats["core_http2_send_initial_metadata_per_write_bkts"] = ",".join( 441 "%f" % x for x in h.boundaries) 442 stats[ 443 "core_http2_send_initial_metadata_per_write_50p"] = massage_qps_stats_helpers.percentile( 444 h.buckets, 50, h.boundaries) 445 stats[ 446 "core_http2_send_initial_metadata_per_write_95p"] = massage_qps_stats_helpers.percentile( 447 h.buckets, 95, h.boundaries) 448 stats[ 449 "core_http2_send_initial_metadata_per_write_99p"] = massage_qps_stats_helpers.percentile( 450 h.buckets, 99, h.boundaries) 451 h = massage_qps_stats_helpers.histogram( 452 core_stats, "http2_send_message_per_write") 453 stats["core_http2_send_message_per_write"] = ",".join( 454 "%f" % x for x in h.buckets) 455 stats["core_http2_send_message_per_write_bkts"] = ",".join( 456 "%f" % x for x in h.boundaries) 457 stats[ 458 "core_http2_send_message_per_write_50p"] = massage_qps_stats_helpers.percentile( 459 h.buckets, 50, h.boundaries) 460 stats[ 461 "core_http2_send_message_per_write_95p"] = massage_qps_stats_helpers.percentile( 462 h.buckets, 95, h.boundaries) 463 stats[ 464 "core_http2_send_message_per_write_99p"] = massage_qps_stats_helpers.percentile( 465 h.buckets, 99, h.boundaries) 466 h = massage_qps_stats_helpers.histogram( 467 core_stats, "http2_send_trailing_metadata_per_write") 468 stats["core_http2_send_trailing_metadata_per_write"] = ",".join( 469 "%f" % x for x in h.buckets) 470 stats[ 471 "core_http2_send_trailing_metadata_per_write_bkts"] = ",".join( 472 "%f" % x for x in h.boundaries) 473 stats[ 474 "core_http2_send_trailing_metadata_per_write_50p"] = massage_qps_stats_helpers.percentile( 475 h.buckets, 50, h.boundaries) 476 stats[ 477 "core_http2_send_trailing_metadata_per_write_95p"] = massage_qps_stats_helpers.percentile( 478 h.buckets, 95, h.boundaries) 479 stats[ 480 "core_http2_send_trailing_metadata_per_write_99p"] = massage_qps_stats_helpers.percentile( 481 h.buckets, 99, h.boundaries) 482 h = massage_qps_stats_helpers.histogram( 483 core_stats, "http2_send_flowctl_per_write") 484 stats["core_http2_send_flowctl_per_write"] = ",".join( 485 "%f" % x for x in h.buckets) 486 stats["core_http2_send_flowctl_per_write_bkts"] = ",".join( 487 "%f" % x for x in h.boundaries) 488 stats[ 489 "core_http2_send_flowctl_per_write_50p"] = massage_qps_stats_helpers.percentile( 490 h.buckets, 50, h.boundaries) 491 stats[ 492 "core_http2_send_flowctl_per_write_95p"] = massage_qps_stats_helpers.percentile( 493 h.buckets, 95, h.boundaries) 494 stats[ 495 "core_http2_send_flowctl_per_write_99p"] = massage_qps_stats_helpers.percentile( 496 h.buckets, 99, h.boundaries) 497 h = massage_qps_stats_helpers.histogram(core_stats, 498 "server_cqs_checked") 499 stats["core_server_cqs_checked"] = ",".join( 500 "%f" % x for x in h.buckets) 501 stats["core_server_cqs_checked_bkts"] = ",".join( 502 "%f" % x for x in h.boundaries) 503 stats[ 504 "core_server_cqs_checked_50p"] = massage_qps_stats_helpers.percentile( 505 h.buckets, 50, h.boundaries) 506 stats[ 507 "core_server_cqs_checked_95p"] = massage_qps_stats_helpers.percentile( 508 h.buckets, 95, h.boundaries) 509 stats[ 510 "core_server_cqs_checked_99p"] = massage_qps_stats_helpers.percentile( 511 h.buckets, 99, h.boundaries) 512