xref: /aosp_15_r20/external/grpc-grpc/include/grpcpp/opencensus.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 //
2 //
3 // Copyright 2019 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18 
19 #ifndef GRPCPP_OPENCENSUS_H
20 #define GRPCPP_OPENCENSUS_H
21 
22 #include "opencensus/stats/view_descriptor.h"
23 #include "opencensus/tags/tag_map.h"
24 #include "opencensus/trace/span.h"
25 #include "opencensus/trace/span_context.h"
26 
27 namespace grpc {
28 class ServerContext;
29 // These symbols in this file will not be included in the binary unless
30 // grpc_opencensus_plugin build target was added as a dependency. At the moment
31 // it is only setup to be built with Bazel.
32 
33 // Registers the OpenCensus plugin with gRPC, so that it will be used for future
34 // RPCs. This must be called before any views are created.
35 void RegisterOpenCensusPlugin();
36 
37 // RPC stats definitions, defined by
38 // https://github.com/census-instrumentation/opencensus-specs/blob/master/stats/gRPC.md
39 
40 // Registers the cumulative gRPC views so that they will be exported by any
41 // registered stats exporter. For on-task stats, construct a View using the
42 // ViewDescriptors below.
43 void RegisterOpenCensusViewsForExport();
44 
45 // Returns the tracing Span for the current RPC.
46 ::opencensus::trace::Span GetSpanFromServerContext(ServerContext* context);
47 
48 namespace experimental {
49 
50 // The tag keys set when recording RPC stats.
51 ::opencensus::tags::TagKey ClientMethodTagKey();
52 ::opencensus::tags::TagKey ClientStatusTagKey();
53 ::opencensus::tags::TagKey ServerMethodTagKey();
54 ::opencensus::tags::TagKey ServerStatusTagKey();
55 
56 // Names of measures used by the plugin--users can create views on these
57 // measures but should not record data for them.
58 extern const absl::string_view kRpcClientSentMessagesPerRpcMeasureName;
59 extern const absl::string_view kRpcClientSentBytesPerRpcMeasureName;
60 extern const absl::string_view kRpcClientReceivedMessagesPerRpcMeasureName;
61 extern const absl::string_view kRpcClientReceivedBytesPerRpcMeasureName;
62 extern const absl::string_view kRpcClientRoundtripLatencyMeasureName;
63 extern const absl::string_view kRpcClientServerLatencyMeasureName;
64 extern const absl::string_view kRpcClientStartedRpcsMeasureName;
65 extern const absl::string_view kRpcClientRetriesPerCallMeasureName;
66 extern const absl::string_view kRpcClientTransparentRetriesPerCallMeasureName;
67 extern const absl::string_view kRpcClientRetryDelayPerCallMeasureName;
68 extern const absl::string_view kRpcClientTransportLatencyMeasureName;
69 
70 extern const absl::string_view kRpcServerSentMessagesPerRpcMeasureName;
71 extern const absl::string_view kRpcServerSentBytesPerRpcMeasureName;
72 extern const absl::string_view kRpcServerReceivedMessagesPerRpcMeasureName;
73 extern const absl::string_view kRpcServerReceivedBytesPerRpcMeasureName;
74 extern const absl::string_view kRpcServerServerLatencyMeasureName;
75 extern const absl::string_view kRpcServerStartedRpcsMeasureName;
76 
77 // Canonical gRPC view definitions.
78 const ::opencensus::stats::ViewDescriptor& ClientStartedRpcs();
79 const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcs();
80 const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatency();
81 const ::opencensus::stats::ViewDescriptor&
82 ClientSentCompressedMessageBytesPerRpc();
83 const ::opencensus::stats::ViewDescriptor&
84 ClientReceivedCompressedMessageBytesPerRpc();
85 const ::opencensus::stats::ViewDescriptor& ClientTransportLatency();
86 
87 const ::opencensus::stats::ViewDescriptor& ServerStartedRpcs();
88 const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcs();
89 const ::opencensus::stats::ViewDescriptor&
90 ServerSentCompressedMessageBytesPerRpc();
91 const ::opencensus::stats::ViewDescriptor&
92 ServerReceivedCompressedMessageBytesPerRpc();
93 const ::opencensus::stats::ViewDescriptor& ServerServerLatency();
94 
95 const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcCumulative();
96 const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcCumulative();
97 const ::opencensus::stats::ViewDescriptor&
98 ClientReceivedMessagesPerRpcCumulative();
99 const ::opencensus::stats::ViewDescriptor&
100 ClientReceivedBytesPerRpcCumulative();
101 const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyCumulative();
102 const ::opencensus::stats::ViewDescriptor& ClientServerLatencyCumulative();
103 const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsCumulative();
104 const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsCumulative();
105 const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallCumulative();
106 const ::opencensus::stats::ViewDescriptor& ClientRetriesCumulative();
107 const ::opencensus::stats::ViewDescriptor&
108 ClientTransparentRetriesPerCallCumulative();
109 const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesCumulative();
110 const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallCumulative();
111 
112 const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcCumulative();
113 const ::opencensus::stats::ViewDescriptor&
114 ServerReceivedBytesPerRpcCumulative();
115 const ::opencensus::stats::ViewDescriptor& ServerServerLatencyCumulative();
116 const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsCumulative();
117 const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsCumulative();
118 const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcCumulative();
119 const ::opencensus::stats::ViewDescriptor&
120 ServerReceivedMessagesPerRpcCumulative();
121 
122 const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcMinute();
123 const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcMinute();
124 const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcMinute();
125 const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcMinute();
126 const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyMinute();
127 const ::opencensus::stats::ViewDescriptor& ClientServerLatencyMinute();
128 const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsMinute();
129 const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsMinute();
130 const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallMinute();
131 const ::opencensus::stats::ViewDescriptor& ClientRetriesMinute();
132 const ::opencensus::stats::ViewDescriptor&
133 ClientTransparentRetriesPerCallMinute();
134 const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesMinute();
135 const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallMinute();
136 
137 const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcMinute();
138 const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcMinute();
139 const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcMinute();
140 const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcMinute();
141 const ::opencensus::stats::ViewDescriptor& ServerServerLatencyMinute();
142 const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsMinute();
143 const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsMinute();
144 
145 const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcHour();
146 const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcHour();
147 const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcHour();
148 const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcHour();
149 const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyHour();
150 const ::opencensus::stats::ViewDescriptor& ClientServerLatencyHour();
151 const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsHour();
152 const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsHour();
153 const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallHour();
154 const ::opencensus::stats::ViewDescriptor& ClientRetriesHour();
155 const ::opencensus::stats::ViewDescriptor&
156 ClientTransparentRetriesPerCallHour();
157 const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesHour();
158 const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallHour();
159 
160 const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcHour();
161 const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcHour();
162 const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcHour();
163 const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcHour();
164 const ::opencensus::stats::ViewDescriptor& ServerServerLatencyHour();
165 const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsHour();
166 const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsHour();
167 
168 // Thread compatible.
169 class CensusContext {
170  public:
CensusContext()171   CensusContext() : span_(::opencensus::trace::Span::BlankSpan()), tags_({}) {}
172 
CensusContext(absl::string_view name,const::opencensus::tags::TagMap & tags)173   explicit CensusContext(absl::string_view name,
174                          const ::opencensus::tags::TagMap& tags)
175       : span_(::opencensus::trace::Span::StartSpan(name)), tags_(tags) {}
176 
CensusContext(const::opencensus::tags::TagMap & tags)177   explicit CensusContext(const ::opencensus::tags::TagMap& tags)
178       : span_(::opencensus::trace::Span::BlankSpan()), tags_(tags) {}
179 
CensusContext(absl::string_view name,const::opencensus::trace::Span * parent,const::opencensus::tags::TagMap & tags)180   CensusContext(absl::string_view name, const ::opencensus::trace::Span* parent,
181                 const ::opencensus::tags::TagMap& tags)
182       : span_(::opencensus::trace::Span::StartSpan(name, parent)),
183         tags_(tags) {}
184 
CensusContext(absl::string_view name,const::opencensus::trace::SpanContext & parent_ctxt)185   CensusContext(absl::string_view name,
186                 const ::opencensus::trace::SpanContext& parent_ctxt)
187       : span_(::opencensus::trace::Span::StartSpanWithRemoteParent(
188             name, parent_ctxt)),
189         tags_({}) {}
190 
CensusContext(absl::string_view name,const::opencensus::trace::SpanContext & parent_ctxt,const::opencensus::tags::TagMap & tags)191   CensusContext(absl::string_view name,
192                 const ::opencensus::trace::SpanContext& parent_ctxt,
193                 const ::opencensus::tags::TagMap& tags)
194       : span_(::opencensus::trace::Span::StartSpanWithRemoteParent(
195             name, parent_ctxt)),
196         tags_(tags) {}
197 
AddSpanAttribute(absl::string_view key,opencensus::trace::AttributeValueRef attribute)198   void AddSpanAttribute(absl::string_view key,
199                         opencensus::trace::AttributeValueRef attribute) {
200     span_.AddAttribute(key, attribute);
201   }
202 
AddSpanAnnotation(absl::string_view description,opencensus::trace::AttributesRef attributes)203   void AddSpanAnnotation(absl::string_view description,
204                          opencensus::trace::AttributesRef attributes) {
205     span_.AddAnnotation(description, attributes);
206   }
207 
Span()208   const ::opencensus::trace::Span& Span() const { return span_; }
tags()209   const ::opencensus::tags::TagMap& tags() const { return tags_; }
210 
Context()211   ::opencensus::trace::SpanContext Context() const { return Span().context(); }
EndSpan()212   void EndSpan() { Span().End(); }
213 
214  private:
215   ::opencensus::trace::Span span_;
216   ::opencensus::tags::TagMap tags_;
217 };
218 
219 }  // namespace experimental
220 
221 }  // namespace grpc
222 
223 #endif  // GRPCPP_OPENCENSUS_H
224