• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
17import massage_qps_stats_helpers
18
19
20def 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