From 3b6675c2dec626e9fef00050b98517f0a2e629c6 Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Thu, 20 Oct 2022 17:42:08 -0700 Subject: [PATCH] OpenCensus: Move measures, views and CensusContext to include file (#31341) * OpenCensus: Move measure and view declarations to include file * Move CensusContext class too * Fix IWYU * Guard with experimental * Formatting * clang tidy fixes * cleanup * Reviewer comments --- include/grpcpp/opencensus.h | 143 +++++++++++++ src/cpp/ext/filters/census/client_filter.cc | 1 + src/cpp/ext/filters/census/context.cc | 1 + src/cpp/ext/filters/census/context.h | 39 +--- src/cpp/ext/filters/census/grpc_plugin.cc | 9 +- src/cpp/ext/filters/census/grpc_plugin.h | 195 ++++++++---------- src/cpp/ext/filters/census/measures.cc | 58 +++--- .../filters/census/open_census_call_tracer.h | 10 +- src/cpp/ext/filters/census/server_filter.cc | 1 + src/cpp/ext/filters/census/server_filter.h | 4 +- src/cpp/ext/filters/census/views.cc | 28 +-- .../census/stats_plugin_end2end_test.cc | 94 +++++++++ 12 files changed, 391 insertions(+), 192 deletions(-) diff --git a/include/grpcpp/opencensus.h b/include/grpcpp/opencensus.h index 0da949ab73c3a..d939b6fb01a65 100644 --- a/include/grpcpp/opencensus.h +++ b/include/grpcpp/opencensus.h @@ -19,7 +19,10 @@ #ifndef GRPCPP_OPENCENSUS_H #define GRPCPP_OPENCENSUS_H +#include "opencensus/stats/view_descriptor.h" +#include "opencensus/tags/tag_map.h" #include "opencensus/trace/span.h" +#include "opencensus/trace/span_context.h" namespace grpc { class ServerContext; @@ -42,6 +45,146 @@ void RegisterOpenCensusViewsForExport(); // Returns the tracing Span for the current RPC. ::opencensus::trace::Span GetSpanFromServerContext(ServerContext* context); +namespace experimental { + +// The tag keys set when recording RPC stats. +::opencensus::tags::TagKey ClientMethodTagKey(); +::opencensus::tags::TagKey ClientStatusTagKey(); +::opencensus::tags::TagKey ServerMethodTagKey(); +::opencensus::tags::TagKey ServerStatusTagKey(); + +// Names of measures used by the plugin--users can create views on these +// measures but should not record data for them. +extern const absl::string_view kRpcClientSentMessagesPerRpcMeasureName; +extern const absl::string_view kRpcClientSentBytesPerRpcMeasureName; +extern const absl::string_view kRpcClientReceivedMessagesPerRpcMeasureName; +extern const absl::string_view kRpcClientReceivedBytesPerRpcMeasureName; +extern const absl::string_view kRpcClientRoundtripLatencyMeasureName; +extern const absl::string_view kRpcClientServerLatencyMeasureName; +extern const absl::string_view kRpcClientStartedRpcsMeasureName; +extern const absl::string_view kRpcClientRetriesPerCallMeasureName; +extern const absl::string_view kRpcClientTransparentRetriesPerCallMeasureName; +extern const absl::string_view kRpcClientRetryDelayPerCallMeasureName; + +extern const absl::string_view kRpcServerSentMessagesPerRpcMeasureName; +extern const absl::string_view kRpcServerSentBytesPerRpcMeasureName; +extern const absl::string_view kRpcServerReceivedMessagesPerRpcMeasureName; +extern const absl::string_view kRpcServerReceivedBytesPerRpcMeasureName; +extern const absl::string_view kRpcServerServerLatencyMeasureName; +extern const absl::string_view kRpcServerStartedRpcsMeasureName; + +// Canonical gRPC view definitions. +const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& +ClientReceivedMessagesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& +ClientReceivedBytesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientServerLatencyCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientRetriesCumulative(); +const ::opencensus::stats::ViewDescriptor& +ClientTransparentRetriesPerCallCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesCumulative(); +const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallCumulative(); + +const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& +ServerReceivedBytesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& ServerServerLatencyCumulative(); +const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsCumulative(); +const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsCumulative(); +const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcCumulative(); +const ::opencensus::stats::ViewDescriptor& +ServerReceivedMessagesPerRpcCumulative(); + +const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyMinute(); +const ::opencensus::stats::ViewDescriptor& ClientServerLatencyMinute(); +const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsMinute(); +const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsMinute(); +const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallMinute(); +const ::opencensus::stats::ViewDescriptor& ClientRetriesMinute(); +const ::opencensus::stats::ViewDescriptor& +ClientTransparentRetriesPerCallMinute(); +const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesMinute(); +const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallMinute(); + +const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcMinute(); +const ::opencensus::stats::ViewDescriptor& ServerServerLatencyMinute(); +const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsMinute(); +const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsMinute(); + +const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyHour(); +const ::opencensus::stats::ViewDescriptor& ClientServerLatencyHour(); +const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsHour(); +const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsHour(); +const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallHour(); +const ::opencensus::stats::ViewDescriptor& ClientRetriesHour(); +const ::opencensus::stats::ViewDescriptor& +ClientTransparentRetriesPerCallHour(); +const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesHour(); +const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallHour(); + +const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcHour(); +const ::opencensus::stats::ViewDescriptor& ServerServerLatencyHour(); +const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsHour(); +const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsHour(); + +// Thread compatible. +class CensusContext { + public: + CensusContext() : span_(::opencensus::trace::Span::BlankSpan()), tags_({}) {} + + explicit CensusContext(absl::string_view name, + const ::opencensus::tags::TagMap& tags) + : span_(::opencensus::trace::Span::StartSpan(name)), tags_(tags) {} + + CensusContext(absl::string_view name, const ::opencensus::trace::Span* parent, + const ::opencensus::tags::TagMap& tags) + : span_(::opencensus::trace::Span::StartSpan(name, parent)), + tags_(tags) {} + + CensusContext(absl::string_view name, + const ::opencensus::trace::SpanContext& parent_ctxt) + : span_(::opencensus::trace::Span::StartSpanWithRemoteParent( + name, parent_ctxt)), + tags_({}) {} + + void AddSpanAttribute(absl::string_view key, + opencensus::trace::AttributeValueRef attribute) { + span_.AddAttribute(key, attribute); + } + + const ::opencensus::trace::Span& Span() const { return span_; } + const ::opencensus::tags::TagMap& tags() const { return tags_; } + + ::opencensus::trace::SpanContext Context() const { return Span().context(); } + void EndSpan() { Span().End(); } + + private: + ::opencensus::trace::Span span_; + ::opencensus::tags::TagMap tags_; +}; + +} // namespace experimental + } // namespace grpc #endif // GRPCPP_OPENCENSUS_H diff --git a/src/cpp/ext/filters/census/client_filter.cc b/src/cpp/ext/filters/census/client_filter.cc index 26b47b5325694..dede8f2bf7776 100644 --- a/src/cpp/ext/filters/census/client_filter.cc +++ b/src/cpp/ext/filters/census/client_filter.cc @@ -44,6 +44,7 @@ #include #include #include +#include #include #include "src/core/lib/channel/channel_args.h" diff --git a/src/cpp/ext/filters/census/context.cc b/src/cpp/ext/filters/census/context.cc index 9e5ead22aced1..2e977d7993bd4 100644 --- a/src/cpp/ext/filters/census/context.cc +++ b/src/cpp/ext/filters/census/context.cc @@ -23,6 +23,7 @@ #include #include "opencensus/tags/context_util.h" +#include "opencensus/tags/tag_map.h" #include "opencensus/trace/context_util.h" #include "opencensus/trace/propagation/grpc_trace_bin.h" diff --git a/src/cpp/ext/filters/census/context.h b/src/cpp/ext/filters/census/context.h index e38fda8cda1dc..0486283fdd76e 100644 --- a/src/cpp/ext/filters/census/context.h +++ b/src/cpp/ext/filters/census/context.h @@ -26,55 +26,20 @@ #include "absl/strings/string_view.h" #include "absl/strings/strip.h" -#include "opencensus/tags/tag_map.h" -#include "opencensus/trace/attribute_value_ref.h" #include "opencensus/trace/span.h" #include "opencensus/trace/span_context.h" #include #include #include +#include #include "src/core/lib/channel/channel_stack.h" #include "src/core/lib/slice/slice.h" namespace grpc { -// Thread compatible. -class CensusContext { - public: - CensusContext() : span_(::opencensus::trace::Span::BlankSpan()), tags_({}) {} - - explicit CensusContext(absl::string_view name, - const ::opencensus::tags::TagMap& tags) - : span_(::opencensus::trace::Span::StartSpan(name)), tags_(tags) {} - - CensusContext(absl::string_view name, const ::opencensus::trace::Span* parent, - const ::opencensus::tags::TagMap& tags) - : span_(::opencensus::trace::Span::StartSpan(name, parent)), - tags_(tags) {} - - CensusContext(absl::string_view name, - const ::opencensus::trace::SpanContext& parent_ctxt) - : span_(::opencensus::trace::Span::StartSpanWithRemoteParent( - name, parent_ctxt)), - tags_({}) {} - - void AddSpanAttribute(absl::string_view key, - opencensus::trace::AttributeValueRef attribute) { - span_.AddAttribute(key, attribute); - } - - const ::opencensus::trace::Span& Span() const { return span_; } - const ::opencensus::tags::TagMap& tags() const { return tags_; } - - ::opencensus::trace::SpanContext Context() const { return Span().context(); } - void EndSpan() { Span().End(); } - - private: - ::opencensus::trace::Span span_; - ::opencensus::tags::TagMap tags_; -}; +using experimental::CensusContext; // Serializes the outgoing trace context. tracing_buf must be // opencensus::trace::propagation::kGrpcTraceBinHeaderLen bytes long. diff --git a/src/cpp/ext/filters/census/grpc_plugin.cc b/src/cpp/ext/filters/census/grpc_plugin.cc index 60155e8b8eaa7..25afaf9306a81 100644 --- a/src/cpp/ext/filters/census/grpc_plugin.cc +++ b/src/cpp/ext/filters/census/grpc_plugin.cc @@ -25,6 +25,7 @@ #include #include "absl/base/attributes.h" +#include "absl/strings/string_view.h" #include "opencensus/tags/tag_key.h" #include "opencensus/trace/span.h" @@ -35,7 +36,6 @@ #include "src/cpp/common/channel_filter.h" #include "src/cpp/ext/filters/census/channel_filter.h" #include "src/cpp/ext/filters/census/client_filter.h" -#include "src/cpp/ext/filters/census/context.h" #include "src/cpp/ext/filters/census/measures.h" #include "src/cpp/ext/filters/census/server_filter.h" @@ -75,10 +75,13 @@ ::opencensus::trace::Span GetSpanFromServerContext( grpc::ServerContext* context) { if (context == nullptr) return opencensus::trace::Span::BlankSpan(); - return reinterpret_cast(context->census_context()) + return reinterpret_cast( + context->census_context()) ->Span(); } +namespace experimental { + // These measure definitions should be kept in sync across opencensus // implementations--see // https://github.com/census-instrumentation/opencensus-java/blob/master/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java. @@ -163,6 +166,8 @@ ABSL_CONST_INIT const absl::string_view kRpcServerServerLatencyMeasureName = ABSL_CONST_INIT const absl::string_view kRpcServerStartedRpcsMeasureName = "grpc.io/server/started_rpcs"; +} // namespace experimental + std::atomic g_open_census_stats_enabled(true); std::atomic g_open_census_tracing_enabled(true); diff --git a/src/cpp/ext/filters/census/grpc_plugin.h b/src/cpp/ext/filters/census/grpc_plugin.h index 715024c89585c..aab2897f10ef6 100644 --- a/src/cpp/ext/filters/census/grpc_plugin.h +++ b/src/cpp/ext/filters/census/grpc_plugin.h @@ -21,113 +21,100 @@ #include -#include "absl/strings/string_view.h" -#include "opencensus/stats/stats.h" -#include "opencensus/tags/tag_key.h" +#include namespace grpc { -// The tag keys set when recording RPC stats. -::opencensus::tags::TagKey ClientMethodTagKey(); -::opencensus::tags::TagKey ClientStatusTagKey(); -::opencensus::tags::TagKey ServerMethodTagKey(); -::opencensus::tags::TagKey ServerStatusTagKey(); - -// Names of measures used by the plugin--users can create views on these -// measures but should not record data for them. -extern const absl::string_view kRpcClientSentMessagesPerRpcMeasureName; -extern const absl::string_view kRpcClientSentBytesPerRpcMeasureName; -extern const absl::string_view kRpcClientReceivedMessagesPerRpcMeasureName; -extern const absl::string_view kRpcClientReceivedBytesPerRpcMeasureName; -extern const absl::string_view kRpcClientRoundtripLatencyMeasureName; -extern const absl::string_view kRpcClientServerLatencyMeasureName; -extern const absl::string_view kRpcClientStartedRpcsMeasureName; -extern const absl::string_view kRpcClientRetriesPerCallMeasureName; -extern const absl::string_view kRpcClientTransparentRetriesPerCallMeasureName; -extern const absl::string_view kRpcClientRetryDelayPerCallMeasureName; - -extern const absl::string_view kRpcServerSentMessagesPerRpcMeasureName; -extern const absl::string_view kRpcServerSentBytesPerRpcMeasureName; -extern const absl::string_view kRpcServerReceivedMessagesPerRpcMeasureName; -extern const absl::string_view kRpcServerReceivedBytesPerRpcMeasureName; -extern const absl::string_view kRpcServerServerLatencyMeasureName; -extern const absl::string_view kRpcServerStartedRpcsMeasureName; - -// Canonical gRPC view definitions. -const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& -ClientReceivedMessagesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& -ClientReceivedBytesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientServerLatencyCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientRetriesCumulative(); -const ::opencensus::stats::ViewDescriptor& -ClientTransparentRetriesPerCallCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesCumulative(); -const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallCumulative(); - -const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& -ServerReceivedBytesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& ServerServerLatencyCumulative(); -const ::opencensus::stats::ViewDescriptor& ServerStartedCountCumulative(); -const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsCumulative(); -const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsCumulative(); -const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcCumulative(); -const ::opencensus::stats::ViewDescriptor& -ServerReceivedMessagesPerRpcCumulative(); - -const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyMinute(); -const ::opencensus::stats::ViewDescriptor& ClientServerLatencyMinute(); -const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsMinute(); -const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsMinute(); -const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallMinute(); -const ::opencensus::stats::ViewDescriptor& ClientRetriesMinute(); -const ::opencensus::stats::ViewDescriptor& -ClientTransparentRetriesPerCallMinute(); -const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesMinute(); -const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallMinute(); - -const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcMinute(); -const ::opencensus::stats::ViewDescriptor& ServerServerLatencyMinute(); -const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsMinute(); -const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsMinute(); - -const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyHour(); -const ::opencensus::stats::ViewDescriptor& ClientServerLatencyHour(); -const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsHour(); -const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsHour(); -const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallHour(); -const ::opencensus::stats::ViewDescriptor& ClientRetriesHour(); -const ::opencensus::stats::ViewDescriptor& -ClientTransparentRetriesPerCallHour(); -const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesHour(); -const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallHour(); - -const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcHour(); -const ::opencensus::stats::ViewDescriptor& ServerServerLatencyHour(); -const ::opencensus::stats::ViewDescriptor& ServerStartedCountHour(); -const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsHour(); -const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsHour(); +// The following using declarations have been added to prevent breaking users +// that were directly using this header file. +using experimental::ClientMethodTagKey; // NOLINT +using experimental::ClientStatusTagKey; // NOLINT +using experimental::ServerMethodTagKey; // NOLINT +using experimental::ServerStatusTagKey; // NOLINT + +using experimental::kRpcClientReceivedBytesPerRpcMeasureName; // NOLINT +using experimental::kRpcClientReceivedMessagesPerRpcMeasureName; // NOLINT +using experimental::kRpcClientRetriesPerCallMeasureName; // NOLINT +using experimental::kRpcClientRetryDelayPerCallMeasureName; // NOLINT +using experimental::kRpcClientRoundtripLatencyMeasureName; // NOLINT +using experimental::kRpcClientSentBytesPerRpcMeasureName; // NOLINT +using experimental::kRpcClientSentMessagesPerRpcMeasureName; // NOLINT +using experimental::kRpcClientServerLatencyMeasureName; // NOLINT +using experimental::kRpcClientStartedRpcsMeasureName; // NOLINT +using experimental::kRpcClientTransparentRetriesPerCallMeasureName; // NOLINT + +using experimental::kRpcServerReceivedBytesPerRpcMeasureName; // NOLINT +using experimental::kRpcServerReceivedMessagesPerRpcMeasureName; // NOLINT +using experimental::kRpcServerSentBytesPerRpcMeasureName; // NOLINT +using experimental::kRpcServerSentMessagesPerRpcMeasureName; // NOLINT +using experimental::kRpcServerServerLatencyMeasureName; // NOLINT +using experimental::kRpcServerStartedRpcsMeasureName; // NOLINT + +using experimental::ClientCompletedRpcsCumulative; // NOLINT +using experimental::ClientReceivedBytesPerRpcCumulative; // NOLINT +using experimental::ClientReceivedMessagesPerRpcCumulative; // NOLINT +using experimental::ClientRetriesCumulative; // NOLINT +using experimental::ClientRetriesPerCallCumulative; // NOLINT +using experimental::ClientRetryDelayPerCallCumulative; // NOLINT +using experimental::ClientRoundtripLatencyCumulative; // NOLINT +using experimental::ClientSentBytesPerRpcCumulative; // NOLINT +using experimental::ClientSentMessagesPerRpcCumulative; // NOLINT +using experimental::ClientServerLatencyCumulative; // NOLINT +using experimental::ClientStartedRpcsCumulative; // NOLINT +using experimental::ClientTransparentRetriesCumulative; // NOLINT +using experimental::ClientTransparentRetriesPerCallCumulative; // NOLINT + +using experimental::ServerCompletedRpcsCumulative; // NOLINT +using experimental::ServerReceivedBytesPerRpcCumulative; // NOLINT +using experimental::ServerReceivedMessagesPerRpcCumulative; // NOLINT +using experimental::ServerSentBytesPerRpcCumulative; // NOLINT +using experimental::ServerSentMessagesPerRpcCumulative; // NOLINT +using experimental::ServerServerLatencyCumulative; // NOLINT +using experimental::ServerStartedRpcsCumulative; // NOLINT + +using experimental::ClientCompletedRpcsMinute; // NOLINT +using experimental::ClientReceivedBytesPerRpcMinute; // NOLINT +using experimental::ClientReceivedMessagesPerRpcMinute; // NOLINT +using experimental::ClientRetriesMinute; // NOLINT +using experimental::ClientRetriesPerCallMinute; // NOLINT +using experimental::ClientRetryDelayPerCallMinute; // NOLINT +using experimental::ClientRoundtripLatencyMinute; // NOLINT +using experimental::ClientSentBytesPerRpcMinute; // NOLINT +using experimental::ClientSentMessagesPerRpcMinute; // NOLINT +using experimental::ClientServerLatencyMinute; // NOLINT +using experimental::ClientStartedRpcsMinute; // NOLINT +using experimental::ClientTransparentRetriesMinute; // NOLINT +using experimental::ClientTransparentRetriesPerCallMinute; // NOLINT + +using experimental::ServerCompletedRpcsMinute; // NOLINT +using experimental::ServerReceivedBytesPerRpcMinute; // NOLINT +using experimental::ServerReceivedMessagesPerRpcMinute; // NOLINT +using experimental::ServerSentBytesPerRpcMinute; // NOLINT +using experimental::ServerSentMessagesPerRpcMinute; // NOLINT +using experimental::ServerServerLatencyMinute; // NOLINT +using experimental::ServerStartedRpcsMinute; // NOLINT + +using experimental::ClientCompletedRpcsHour; // NOLINT +using experimental::ClientReceivedBytesPerRpcHour; // NOLINT +using experimental::ClientReceivedMessagesPerRpcHour; // NOLINT +using experimental::ClientRetriesHour; // NOLINT +using experimental::ClientRetriesPerCallHour; // NOLINT +using experimental::ClientRetryDelayPerCallHour; // NOLINT +using experimental::ClientRoundtripLatencyHour; // NOLINT +using experimental::ClientSentBytesPerRpcHour; // NOLINT +using experimental::ClientSentMessagesPerRpcHour; // NOLINT +using experimental::ClientServerLatencyHour; // NOLINT +using experimental::ClientStartedRpcsHour; // NOLINT +using experimental::ClientTransparentRetriesHour; // NOLINT +using experimental::ClientTransparentRetriesPerCallHour; // NOLINT + +using experimental::ServerCompletedRpcsHour; // NOLINT +using experimental::ServerReceivedBytesPerRpcHour; // NOLINT +using experimental::ServerReceivedMessagesPerRpcHour; // NOLINT +using experimental::ServerSentBytesPerRpcHour; // NOLINT +using experimental::ServerSentMessagesPerRpcHour; // NOLINT +using experimental::ServerServerLatencyHour; // NOLINT +using experimental::ServerStartedRpcsHour; // NOLINT // Enables/Disables OpenCensus stats/tracing. It's only safe to do at the start // of a program, before any channels/servers are built. diff --git a/src/cpp/ext/filters/census/measures.cc b/src/cpp/ext/filters/census/measures.cc index 29f90fac11a04..b813db88182d0 100644 --- a/src/cpp/ext/filters/census/measures.cc +++ b/src/cpp/ext/filters/census/measures.cc @@ -22,7 +22,7 @@ #include "opencensus/stats/stats.h" -#include "src/cpp/ext/filters/census/grpc_plugin.h" +#include namespace grpc { @@ -45,21 +45,21 @@ constexpr char kCount[] = "1"; // Client MeasureDouble RpcClientSentBytesPerRpc() { static const auto measure = MeasureDouble::Register( - kRpcClientSentBytesPerRpcMeasureName, + experimental::kRpcClientSentBytesPerRpcMeasureName, "Total bytes sent across all request messages per RPC", kUnitBytes); return measure; } MeasureDouble RpcClientReceivedBytesPerRpc() { static const auto measure = MeasureDouble::Register( - kRpcClientReceivedBytesPerRpcMeasureName, + experimental::kRpcClientReceivedBytesPerRpcMeasureName, "Total bytes received across all response messages per RPC", kUnitBytes); return measure; } MeasureDouble RpcClientRoundtripLatency() { static const auto measure = MeasureDouble::Register( - kRpcClientRoundtripLatencyMeasureName, + experimental::kRpcClientRoundtripLatencyMeasureName, "Time between first byte of request sent to last byte of response " "received, or terminal error", kUnitMilliseconds); @@ -68,7 +68,7 @@ MeasureDouble RpcClientRoundtripLatency() { MeasureDouble RpcClientServerLatency() { static const auto measure = MeasureDouble::Register( - kRpcClientServerLatencyMeasureName, + experimental::kRpcClientServerLatencyMeasureName, "Time between first byte of request received to last byte of response " "sent, or terminal error (propagated from the server)", kUnitMilliseconds); @@ -76,22 +76,22 @@ MeasureDouble RpcClientServerLatency() { } MeasureInt64 RpcClientSentMessagesPerRpc() { - static const auto measure = - MeasureInt64::Register(kRpcClientSentMessagesPerRpcMeasureName, - "Number of messages sent per RPC", kCount); + static const auto measure = MeasureInt64::Register( + experimental::kRpcClientSentMessagesPerRpcMeasureName, + "Number of messages sent per RPC", kCount); return measure; } MeasureInt64 RpcClientReceivedMessagesPerRpc() { - static const auto measure = - MeasureInt64::Register(kRpcClientReceivedMessagesPerRpcMeasureName, - "Number of messages received per RPC", kCount); + static const auto measure = MeasureInt64::Register( + experimental::kRpcClientReceivedMessagesPerRpcMeasureName, + "Number of messages received per RPC", kCount); return measure; } MeasureInt64 RpcClientStartedRpcs() { static const auto measure = - MeasureInt64::Register(kRpcClientStartedRpcsMeasureName, + MeasureInt64::Register(experimental::kRpcClientStartedRpcsMeasureName, "The total number of client RPCs ever opened, " "including those that have not been completed.", kCount); @@ -101,7 +101,7 @@ MeasureInt64 RpcClientStartedRpcs() { // Client per-overall-client-call measures MeasureInt64 RpcClientRetriesPerCall() { static const auto measure = - MeasureInt64::Register(kRpcClientRetriesPerCallMeasureName, + MeasureInt64::Register(experimental::kRpcClientRetriesPerCallMeasureName, "Number of retry or hedging attempts excluding " "transparent retries made during the client call", kCount); @@ -110,38 +110,38 @@ MeasureInt64 RpcClientRetriesPerCall() { MeasureInt64 RpcClientTransparentRetriesPerCall() { static const auto measure = MeasureInt64::Register( - kRpcClientTransparentRetriesPerCallMeasureName, + experimental::kRpcClientTransparentRetriesPerCallMeasureName, "Number of transparent retries made during the client call", kCount); return measure; } MeasureDouble RpcClientRetryDelayPerCall() { - static const auto measure = - MeasureDouble::Register(kRpcClientRetryDelayPerCallMeasureName, - "Total time of delay while there is no active " - "attempt during the client call", - kUnitMilliseconds); + static const auto measure = MeasureDouble::Register( + experimental::kRpcClientRetryDelayPerCallMeasureName, + "Total time of delay while there is no active " + "attempt during the client call", + kUnitMilliseconds); return measure; } // Server MeasureDouble RpcServerSentBytesPerRpc() { static const auto measure = MeasureDouble::Register( - kRpcServerSentBytesPerRpcMeasureName, + experimental::kRpcServerSentBytesPerRpcMeasureName, "Total bytes sent across all messages per RPC", kUnitBytes); return measure; } MeasureDouble RpcServerReceivedBytesPerRpc() { static const auto measure = MeasureDouble::Register( - kRpcServerReceivedBytesPerRpcMeasureName, + experimental::kRpcServerReceivedBytesPerRpcMeasureName, "Total bytes received across all messages per RPC", kUnitBytes); return measure; } MeasureDouble RpcServerServerLatency() { static const auto measure = MeasureDouble::Register( - kRpcServerServerLatencyMeasureName, + experimental::kRpcServerServerLatencyMeasureName, "Time between first byte of request received to last byte of response " "sent, or terminal error", kUnitMilliseconds); @@ -150,7 +150,7 @@ MeasureDouble RpcServerServerLatency() { MeasureInt64 RpcServerStartedRpcs() { static const auto measure = - MeasureInt64::Register(kRpcServerStartedRpcsMeasureName, + MeasureInt64::Register(experimental::kRpcServerStartedRpcsMeasureName, "The total number of server RPCs ever opened, " "including those that have not been completed.", kCount); @@ -158,16 +158,16 @@ MeasureInt64 RpcServerStartedRpcs() { } MeasureInt64 RpcServerSentMessagesPerRpc() { - static const auto measure = - MeasureInt64::Register(kRpcServerSentMessagesPerRpcMeasureName, - "Number of messages sent per RPC", kCount); + static const auto measure = MeasureInt64::Register( + experimental::kRpcServerSentMessagesPerRpcMeasureName, + "Number of messages sent per RPC", kCount); return measure; } MeasureInt64 RpcServerReceivedMessagesPerRpc() { - static const auto measure = - MeasureInt64::Register(kRpcServerReceivedMessagesPerRpcMeasureName, - "Number of messages received per RPC", kCount); + static const auto measure = MeasureInt64::Register( + experimental::kRpcServerReceivedMessagesPerRpcMeasureName, + "Number of messages received per RPC", kCount); return measure; } diff --git a/src/cpp/ext/filters/census/open_census_call_tracer.h b/src/cpp/ext/filters/census/open_census_call_tracer.h index 1c8fd265c648a..1ecfdf6359389 100644 --- a/src/cpp/ext/filters/census/open_census_call_tracer.h +++ b/src/cpp/ext/filters/census/open_census_call_tracer.h @@ -30,6 +30,7 @@ #include #include +#include #include "src/core/lib/channel/call_tracer.h" #include "src/core/lib/channel/channel_stack.h" @@ -41,7 +42,6 @@ #include "src/core/lib/slice/slice_buffer.h" #include "src/core/lib/transport/metadata_batch.h" #include "src/core/lib/transport/transport.h" -#include "src/cpp/ext/filters/census/context.h" // TODO(yashykt): This might not be the right place for this channel arg, but we // don't have a better place for this right now. @@ -82,7 +82,7 @@ class OpenCensusCallTracer : public grpc_core::CallTracer { void RecordCancel(grpc_error_handle cancel_error) override; void RecordEnd(const gpr_timespec& /*latency*/) override; - CensusContext* context() { return &context_; } + experimental::CensusContext* context() { return &context_; } private: // Maximum size of trace context is sent on the wire. @@ -91,7 +91,7 @@ class OpenCensusCallTracer : public grpc_core::CallTracer { static constexpr uint32_t kMaxTagsLen = 2048; OpenCensusCallTracer* parent_; const bool arena_allocated_; - CensusContext context_; + experimental::CensusContext context_; // Start time (for measuring latency). absl::Time start_time_; // Number of messages in this RPC. @@ -110,13 +110,13 @@ class OpenCensusCallTracer : public grpc_core::CallTracer { bool is_transparent_retry) override; private: - CensusContext CreateCensusContextForCallAttempt(); + experimental::CensusContext CreateCensusContextForCallAttempt(); const grpc_call_context_element* call_context_; // Client method. grpc_core::Slice path_; absl::string_view method_; - CensusContext context_; + experimental::CensusContext context_; grpc_core::Arena* arena_; bool tracing_enabled_; grpc_core::Mutex mu_; diff --git a/src/cpp/ext/filters/census/server_filter.cc b/src/cpp/ext/filters/census/server_filter.cc index 622ae26add9f6..ada41d7242c26 100644 --- a/src/cpp/ext/filters/census/server_filter.cc +++ b/src/cpp/ext/filters/census/server_filter.cc @@ -38,6 +38,7 @@ #include "src/core/lib/surface/call.h" #include "src/core/lib/transport/transport.h" #include "src/cpp/ext/filters/census/channel_filter.h" +#include "src/cpp/ext/filters/census/context.h" #include "src/cpp/ext/filters/census/grpc_plugin.h" #include "src/cpp/ext/filters/census/measures.h" diff --git a/src/cpp/ext/filters/census/server_filter.h b/src/cpp/ext/filters/census/server_filter.h index 55e542cb5d709..84b80f996bf61 100644 --- a/src/cpp/ext/filters/census/server_filter.h +++ b/src/cpp/ext/filters/census/server_filter.h @@ -32,6 +32,7 @@ #include #include +#include #include #include "src/core/lib/channel/channel_fwd.h" @@ -42,7 +43,6 @@ #include "src/core/lib/slice/slice_buffer.h" #include "src/core/lib/transport/metadata_batch.h" #include "src/cpp/common/channel_filter.h" -#include "src/cpp/ext/filters/census/context.h" namespace grpc { @@ -83,7 +83,7 @@ class CensusServerCallData : public CallData { static void OnDoneRecvMessageCb(void* user_data, grpc_error_handle error); private: - CensusContext context_; + experimental::CensusContext context_; // server method absl::string_view method_; std::string qualified_method_; diff --git a/src/cpp/ext/filters/census/views.cc b/src/cpp/ext/filters/census/views.cc index 6885fd00c87f7..1dd20321dd9e3 100644 --- a/src/cpp/ext/filters/census/views.cc +++ b/src/cpp/ext/filters/census/views.cc @@ -25,8 +25,6 @@ #include -#include "src/cpp/ext/filters/census/grpc_plugin.h" - namespace grpc { using ::opencensus::stats::Aggregation; @@ -74,20 +72,22 @@ ViewDescriptor HourDescriptor() { } // namespace void RegisterOpenCensusViewsForExport() { - ClientSentMessagesPerRpcCumulative().RegisterForExport(); - ClientSentBytesPerRpcCumulative().RegisterForExport(); - ClientReceivedMessagesPerRpcCumulative().RegisterForExport(); - ClientReceivedBytesPerRpcCumulative().RegisterForExport(); - ClientRoundtripLatencyCumulative().RegisterForExport(); - ClientServerLatencyCumulative().RegisterForExport(); + experimental::ClientSentMessagesPerRpcCumulative().RegisterForExport(); + experimental::ClientSentBytesPerRpcCumulative().RegisterForExport(); + experimental::ClientReceivedMessagesPerRpcCumulative().RegisterForExport(); + experimental::ClientReceivedBytesPerRpcCumulative().RegisterForExport(); + experimental::ClientRoundtripLatencyCumulative().RegisterForExport(); + experimental::ClientServerLatencyCumulative().RegisterForExport(); - ServerSentMessagesPerRpcCumulative().RegisterForExport(); - ServerSentBytesPerRpcCumulative().RegisterForExport(); - ServerReceivedMessagesPerRpcCumulative().RegisterForExport(); - ServerReceivedBytesPerRpcCumulative().RegisterForExport(); - ServerServerLatencyCumulative().RegisterForExport(); + experimental::ServerSentMessagesPerRpcCumulative().RegisterForExport(); + experimental::ServerSentBytesPerRpcCumulative().RegisterForExport(); + experimental::ServerReceivedMessagesPerRpcCumulative().RegisterForExport(); + experimental::ServerReceivedBytesPerRpcCumulative().RegisterForExport(); + experimental::ServerServerLatencyCumulative().RegisterForExport(); } +namespace experimental { + // client cumulative const ViewDescriptor& ClientSentBytesPerRpcCumulative() { const static ViewDescriptor descriptor = @@ -700,4 +700,6 @@ const ViewDescriptor& ServerReceivedMessagesPerRpcHour() { return descriptor; } +} // namespace experimental + } // namespace grpc diff --git a/test/cpp/ext/filters/census/stats_plugin_end2end_test.cc b/test/cpp/ext/filters/census/stats_plugin_end2end_test.cc index 7d022be30e667..6e2389f797575 100644 --- a/test/cpp/ext/filters/census/stats_plugin_end2end_test.cc +++ b/test/cpp/ext/filters/census/stats_plugin_end2end_test.cc @@ -852,6 +852,100 @@ TEST_F(StatsPluginEnd2EndTest, TestGlobalEnableOpenCensusTracing) { EnableOpenCensusTracing(true); } +// This test verifies that users depending on src/cpp/ext/filters/census header +// files can continue using the non-experimental names. +TEST(StatsPluginDeclarationTest, Declarations) { + gpr_log(GPR_INFO, "%p", ClientMethodTagKey); + gpr_log(GPR_INFO, "%p", ClientStatusTagKey); + gpr_log(GPR_INFO, "%p", ServerMethodTagKey); + gpr_log(GPR_INFO, "%p", ServerStatusTagKey); + + gpr_log(GPR_INFO, "%p", kRpcClientReceivedBytesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientReceivedMessagesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientRetriesPerCallMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientRetryDelayPerCallMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientRoundtripLatencyMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientSentBytesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientSentMessagesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientServerLatencyMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcClientStartedRpcsMeasureName.data()); + gpr_log(GPR_INFO, "%p", + kRpcClientTransparentRetriesPerCallMeasureName.data()); + + gpr_log(GPR_INFO, "%p", kRpcServerReceivedBytesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcServerReceivedMessagesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcServerSentBytesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcServerSentMessagesPerRpcMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcServerServerLatencyMeasureName.data()); + gpr_log(GPR_INFO, "%p", kRpcServerStartedRpcsMeasureName.data()); + + gpr_log(GPR_INFO, "%p", ClientCompletedRpcsCumulative); + gpr_log(GPR_INFO, "%p", ClientReceivedBytesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ClientReceivedMessagesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ClientRetriesCumulative); + gpr_log(GPR_INFO, "%p", ClientRetriesPerCallCumulative); + gpr_log(GPR_INFO, "%p", ClientRetryDelayPerCallCumulative); + gpr_log(GPR_INFO, "%p", ClientRoundtripLatencyCumulative); + gpr_log(GPR_INFO, "%p", ClientSentBytesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ClientSentMessagesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ClientServerLatencyCumulative); + gpr_log(GPR_INFO, "%p", ClientStartedRpcsCumulative); + gpr_log(GPR_INFO, "%p", ClientTransparentRetriesCumulative); + gpr_log(GPR_INFO, "%p", ClientTransparentRetriesPerCallCumulative); + + gpr_log(GPR_INFO, "%p", ServerCompletedRpcsCumulative); + gpr_log(GPR_INFO, "%p", ServerReceivedBytesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ServerReceivedMessagesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ServerSentBytesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ServerSentMessagesPerRpcCumulative); + gpr_log(GPR_INFO, "%p", ServerServerLatencyCumulative); + gpr_log(GPR_INFO, "%p", ServerStartedRpcsCumulative); + + gpr_log(GPR_INFO, "%p", ClientCompletedRpcsMinute); + gpr_log(GPR_INFO, "%p", ClientReceivedBytesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ClientReceivedMessagesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ClientRetriesMinute); + gpr_log(GPR_INFO, "%p", ClientRetriesPerCallMinute); + gpr_log(GPR_INFO, "%p", ClientRetryDelayPerCallMinute); + gpr_log(GPR_INFO, "%p", ClientRoundtripLatencyMinute); + gpr_log(GPR_INFO, "%p", ClientSentBytesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ClientSentMessagesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ClientServerLatencyMinute); + gpr_log(GPR_INFO, "%p", ClientStartedRpcsMinute); + gpr_log(GPR_INFO, "%p", ClientTransparentRetriesMinute); + gpr_log(GPR_INFO, "%p", ClientTransparentRetriesPerCallMinute); + + gpr_log(GPR_INFO, "%p", ServerCompletedRpcsMinute); + gpr_log(GPR_INFO, "%p", ServerReceivedBytesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ServerReceivedMessagesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ServerSentBytesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ServerSentMessagesPerRpcMinute); + gpr_log(GPR_INFO, "%p", ServerServerLatencyMinute); + gpr_log(GPR_INFO, "%p", ServerStartedRpcsMinute); + + gpr_log(GPR_INFO, "%p", ClientCompletedRpcsHour); + gpr_log(GPR_INFO, "%p", ClientReceivedBytesPerRpcHour); + gpr_log(GPR_INFO, "%p", ClientReceivedMessagesPerRpcHour); + gpr_log(GPR_INFO, "%p", ClientRetriesHour); + gpr_log(GPR_INFO, "%p", ClientRetriesPerCallHour); + gpr_log(GPR_INFO, "%p", ClientRetryDelayPerCallHour); + gpr_log(GPR_INFO, "%p", ClientRoundtripLatencyHour); + gpr_log(GPR_INFO, "%p", ClientSentBytesPerRpcHour); + gpr_log(GPR_INFO, "%p", ClientSentMessagesPerRpcHour); + gpr_log(GPR_INFO, "%p", ClientServerLatencyHour); + gpr_log(GPR_INFO, "%p", ClientStartedRpcsHour); + gpr_log(GPR_INFO, "%p", ClientTransparentRetriesHour); + gpr_log(GPR_INFO, "%p", ClientTransparentRetriesPerCallHour); + + gpr_log(GPR_INFO, "%p", ServerCompletedRpcsHour); + gpr_log(GPR_INFO, "%p", ServerReceivedBytesPerRpcHour); + gpr_log(GPR_INFO, "%p", ServerReceivedMessagesPerRpcHour); + gpr_log(GPR_INFO, "%p", ServerSentBytesPerRpcHour); + gpr_log(GPR_INFO, "%p", ServerSentMessagesPerRpcHour); + gpr_log(GPR_INFO, "%p", ServerServerLatencyHour); + gpr_log(GPR_INFO, "%p", ServerStartedRpcsHour); +} + } // namespace } // namespace testing