# Copyright 2017 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Stats data declaration
# use tools / codegen / core / gen_stats_data.py to turn this into stats_data.h

# overall
- counter: client_calls_created
  doc: Number of client side calls created by this process
- counter: server_calls_created
  doc: Number of server side calls created by this process
- histogram: call_initial_size
  max: 262144
  buckets: 64
  doc: Initial size of the grpc_call arena created at call start
- counter: cqs_created
  doc: Number of completion queues created
- counter: client_channels_created
  doc: Number of client channels created
- counter: client_subchannels_created
  doc: Number of client subchannels created
- counter: server_channels_created
  doc: Number of server channels created
# polling
- counter: syscall_poll
  doc: Number of polling syscalls (epoll_wait, poll, etc) made by this process
- counter: syscall_wait
  doc: Number of sleeping syscalls made by this process
- histogram: poll_events_returned
  max: 1024
  buckets: 128
  doc: How many events are called for each syscall_poll
- counter: pollset_kick
  doc: How many polling wakeups were performed by the process
       (only valid for epoll1 right now)
- counter: pollset_kicked_without_poller
  doc: How many times was a polling wakeup requested without an active poller
       (only valid for epoll1 right now)
- counter: pollset_kicked_again
  doc: How many times was the same polling worker awoken repeatedly before
       waking up
       (only valid for epoll1 right now)
- counter: pollset_kick_wakeup_fd
  doc: How many times was an eventfd used as the wakeup vector for a polling
       wakeup
       (only valid for epoll1 right now)
- counter: pollset_kick_wakeup_cv
  doc: How many times was a condition variable used as the wakeup vector for a
       polling wakeup
       (only valid for epoll1 right now)
- counter: pollset_kick_own_thread
  doc: How many times could a polling wakeup be satisfied by keeping the waking
       thread awake?
       (only valid for epoll1 right now)
# polling
- counter: syscall_epoll_ctl
  doc: Number of epoll_ctl calls made (only valid for epollex right now)
- counter: pollset_fd_cache_hits
  doc: Number of epoll_ctl calls skipped because the fd was cached as
       already being added.  (only valid for epollex right now)
# stats system
- counter: histogram_slow_lookups
  doc: Number of times histogram increments went through the slow
       (binary search) path
# tcp
- counter: syscall_write
  doc: Number of write syscalls (or equivalent - eg sendmsg) made by this process
- counter: syscall_read
  doc: Number of read syscalls (or equivalent - eg recvmsg) made by this process
- histogram: tcp_write_size
  max: 16777216 # 16 meg max write tracked
  buckets: 64
  doc: Number of bytes offered to each syscall_write
- histogram: tcp_write_iov_size
  max: 1024
  buckets: 64
  doc: Number of byte segments offered to each syscall_write
- histogram: tcp_read_size
  max: 16777216
  buckets: 64
  doc: Number of bytes received by each syscall_read
- histogram: tcp_read_offer
  max: 16777216
  buckets: 64
  doc: Number of bytes offered to each syscall_read
- histogram: tcp_read_offer_iov_size
  max: 1024
  buckets: 64
  doc: Number of byte segments offered to each syscall_read
- counter: tcp_backup_pollers_created
  doc: Number of times a backup poller has been created (this can be expensive)
- counter: tcp_backup_poller_polls
  doc: Number of polls performed on the backup poller
# chttp2
- counter: http2_op_batches
  doc: Number of batches received by HTTP2 transport
- counter: http2_op_cancel
  doc: Number of cancelations received by HTTP2 transport
- counter: http2_op_send_initial_metadata
  doc: Number of batches containing send initial metadata
- counter: http2_op_send_message
  doc: Number of batches containing send message
- counter: http2_op_send_trailing_metadata
  doc: Number of batches containing send trailing metadata
- counter: http2_op_recv_initial_metadata
  doc: Number of batches containing receive initial metadata
- counter: http2_op_recv_message
  doc: Number of batches containing receive message
- counter: http2_op_recv_trailing_metadata
  doc: Number of batches containing receive trailing metadata
- histogram: http2_send_message_size
  max: 16777216
  buckets: 64
  doc: Size of messages received by HTTP2 transport
- histogram: http2_send_initial_metadata_per_write
  max: 1024
  buckets: 64
  doc: Number of streams initiated written per TCP write
- histogram: http2_send_message_per_write
  max: 1024
  buckets: 64
  doc: Number of streams whose payload was written per TCP write
- histogram: http2_send_trailing_metadata_per_write
  max: 1024
  buckets: 64
  doc: Number of streams terminated per TCP write
- histogram: http2_send_flowctl_per_write
  max: 1024
  buckets: 64
  doc: Number of flow control updates written per TCP write
- counter: http2_settings_writes
  doc: Number of settings frames sent
- counter: http2_pings_sent
  doc: Number of HTTP2 pings sent by process
- counter: http2_writes_begun
  doc: Number of HTTP2 writes initiated
- counter: http2_writes_offloaded
  doc: Number of HTTP2 writes offloaded to the executor from application threads
- counter: http2_writes_continued
  doc: Number of HTTP2 writes that finished seeing more data needed to be
       written
- counter: http2_partial_writes
  doc: Number of HTTP2 writes that were made knowing there was still more data
       to be written (we cap maximum write size to syscall_write)
- counter: http2_initiate_write_due_to_initial_write
  doc: Number of HTTP2 writes initiated due to 'initial_write'
- counter: http2_initiate_write_due_to_start_new_stream
  doc: Number of HTTP2 writes initiated due to 'start_new_stream'
- counter: http2_initiate_write_due_to_send_message
  doc: Number of HTTP2 writes initiated due to 'send_message'
- counter: http2_initiate_write_due_to_send_initial_metadata
  doc: Number of HTTP2 writes initiated due to 'send_initial_metadata'
- counter: http2_initiate_write_due_to_send_trailing_metadata
  doc: Number of HTTP2 writes initiated due to 'send_trailing_metadata'
- counter: http2_initiate_write_due_to_retry_send_ping
  doc: Number of HTTP2 writes initiated due to 'retry_send_ping'
- counter: http2_initiate_write_due_to_continue_pings
  doc: Number of HTTP2 writes initiated due to 'continue_pings'
- counter: http2_initiate_write_due_to_goaway_sent
  doc: Number of HTTP2 writes initiated due to 'goaway_sent'
- counter: http2_initiate_write_due_to_rst_stream
  doc: Number of HTTP2 writes initiated due to 'rst_stream'
- counter: http2_initiate_write_due_to_close_from_api
  doc: Number of HTTP2 writes initiated due to 'close_from_api'
- counter: http2_initiate_write_due_to_stream_flow_control
  doc: Number of HTTP2 writes initiated due to 'stream_flow_control'
- counter: http2_initiate_write_due_to_transport_flow_control
  doc: Number of HTTP2 writes initiated due to 'transport_flow_control'
- counter: http2_initiate_write_due_to_send_settings
  doc: Number of HTTP2 writes initiated due to 'send_settings'
- counter: http2_initiate_write_due_to_bdp_estimator_ping
  doc: Number of HTTP2 writes initiated due to 'bdp_estimator_ping'
- counter: http2_initiate_write_due_to_flow_control_unstalled_by_setting
  doc: Number of HTTP2 writes initiated due to 'flow_control_unstalled_by_setting'
- counter: http2_initiate_write_due_to_flow_control_unstalled_by_update
  doc: Number of HTTP2 writes initiated due to 'flow_control_unstalled_by_update'
- counter: http2_initiate_write_due_to_application_ping
  doc: Number of HTTP2 writes initiated due to 'application_ping'
- counter: http2_initiate_write_due_to_keepalive_ping
  doc: Number of HTTP2 writes initiated due to 'keepalive_ping'
- counter: http2_initiate_write_due_to_transport_flow_control_unstalled
  doc: Number of HTTP2 writes initiated due to 'transport_flow_control_unstalled'
- counter: http2_initiate_write_due_to_ping_response
  doc: Number of HTTP2 writes initiated due to 'ping_response'
- counter: http2_initiate_write_due_to_force_rst_stream
  doc: Number of HTTP2 writes initiated due to 'force_rst_stream'
- counter: http2_spurious_writes_begun
  doc: Number of HTTP2 writes initiated with nothing to write
- counter: hpack_recv_indexed
  doc: Number of HPACK indexed fields received
- counter: hpack_recv_lithdr_incidx
  doc: Number of HPACK literal headers received with incremental indexing
- counter: hpack_recv_lithdr_incidx_v
  doc: Number of HPACK literal headers received with incremental indexing and literal keys
- counter: hpack_recv_lithdr_notidx
  doc: Number of HPACK literal headers received with no indexing
- counter: hpack_recv_lithdr_notidx_v
  doc: Number of HPACK literal headers received with no indexing and literal keys
- counter: hpack_recv_lithdr_nvridx
  doc: Number of HPACK literal headers received with never-indexing
- counter: hpack_recv_lithdr_nvridx_v
  doc: Number of HPACK literal headers received with never-indexing and literal keys
- counter: hpack_recv_uncompressed
  doc: Number of uncompressed strings received in metadata
- counter: hpack_recv_huffman
  doc: Number of huffman encoded strings received in metadata
- counter: hpack_recv_binary
  doc: Number of binary strings received in metadata
- counter: hpack_recv_binary_base64
  doc: Number of binary strings received encoded in base64 in metadata
- counter: hpack_send_indexed
  doc: Number of HPACK indexed fields sent
- counter: hpack_send_lithdr_incidx
  doc: Number of HPACK literal headers sent with incremental indexing
- counter: hpack_send_lithdr_incidx_v
  doc: Number of HPACK literal headers sent with incremental indexing and literal keys
- counter: hpack_send_lithdr_notidx
  doc: Number of HPACK literal headers sent with no indexing
- counter: hpack_send_lithdr_notidx_v
  doc: Number of HPACK literal headers sent with no indexing and literal keys
- counter: hpack_send_lithdr_nvridx
  doc: Number of HPACK literal headers sent with never-indexing
- counter: hpack_send_lithdr_nvridx_v
  doc: Number of HPACK literal headers sent with never-indexing and literal keys
- counter: hpack_send_uncompressed
  doc: Number of uncompressed strings sent in metadata
- counter: hpack_send_huffman
  doc: Number of huffman encoded strings sent in metadata
- counter: hpack_send_binary
  doc: Number of binary strings received in metadata
- counter: hpack_send_binary_base64
  doc: Number of binary strings received encoded in base64 in metadata
# combiner locks
- counter: combiner_locks_initiated
  doc: Number of combiner lock entries by process
       (first items queued to a combiner)
- counter: combiner_locks_scheduled_items
  doc: Number of items scheduled against combiner locks
- counter: combiner_locks_scheduled_final_items
  doc: Number of final items scheduled against combiner locks
- counter: combiner_locks_offloaded
  doc: Number of combiner locks offloaded to different threads
# call combiner locks
- counter: call_combiner_locks_initiated
  doc: Number of call combiner lock entries by process
       (first items queued to a call combiner)
- counter: call_combiner_locks_scheduled_items
  doc: Number of items scheduled against call combiner locks
- counter: call_combiner_set_notify_on_cancel
  doc: Number of times a cancellation callback was set on a call combiner
- counter: call_combiner_cancelled
  doc: Number of times a call combiner was cancelled
# executor
- counter: executor_scheduled_short_items
  doc: Number of finite runtime closures scheduled against the executor
       (gRPC thread pool)
- counter: executor_scheduled_long_items
  doc: Number of potentially infinite runtime closures scheduled against the
       executor (gRPC thread pool)
- counter: executor_scheduled_to_self
  doc: Number of closures scheduled by the executor to the executor
- counter: executor_wakeup_initiated
  doc: Number of thread wakeups initiated within the executor
- counter: executor_queue_drained
  doc: Number of times an executor queue was drained
- counter: executor_push_retries
  doc: Number of times we raced and were forced to retry pushing a closure to
       the executor
# server
- counter: server_requested_calls
  doc: How many calls were requested (not necessarily received) by the server
- histogram: server_cqs_checked
  buckets: 8
  max: 64
  doc: How many completion queues were checked looking for a CQ that had
       requested the incoming call
- counter: server_slowpath_requests_queued
  doc: How many times was the server slow path taken (indicates too few
       outstanding requests)
# cq
- counter: cq_ev_queue_trylock_failures
  doc: Number of lock (trylock) acquisition failures on completion queue event
       queue. High value here indicates high contention on completion queues
- counter: cq_ev_queue_trylock_successes
  doc: Number of lock (trylock) acquisition successes on completion queue event
       queue.
- counter: cq_ev_queue_transient_pop_failures
  doc: Number of times NULL was popped out of completion queue's event queue
       even though the event queue was not empty
