• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 //
3 // Copyright 2018 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 #include <grpc/support/port_platform.h>
20 #include <grpcpp/opencensus.h>
21 
22 #include <vector>
23 
24 #include "absl/time/time.h"
25 #include "opencensus/stats/stats.h"
26 #include "src/cpp/ext/filters/census/grpc_plugin.h"
27 
28 namespace grpc {
29 
30 using ::opencensus::stats::Aggregation;
31 using ::opencensus::stats::AggregationWindow;
32 using ::opencensus::stats::BucketBoundaries;
33 using ::opencensus::stats::ViewDescriptor;
34 
35 // These measure definitions should be kept in sync across opencensus
36 // implementations.
37 
38 namespace {
39 
BytesDistributionAggregation()40 Aggregation BytesDistributionAggregation() {
41   return Aggregation::Distribution(BucketBoundaries::Explicit(
42       {0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216,
43        67108864, 268435456, 1073741824, 4294967296}));
44 }
45 
MillisDistributionAggregation()46 Aggregation MillisDistributionAggregation() {
47   return Aggregation::Distribution(BucketBoundaries::Explicit(
48       {0,   0.01, 0.05, 0.1,  0.3,   0.6,   0.8,   1,     2,   3,   4,
49        5,   6,    8,    10,   13,    16,    20,    25,    30,  40,  50,
50        65,  80,   100,  130,  160,   200,   250,   300,   400, 500, 650,
51        800, 1000, 2000, 5000, 10000, 20000, 50000, 100000}));
52 }
53 
SetConstantLabels(ViewDescriptor * descriptor)54 void SetConstantLabels(ViewDescriptor* descriptor) {
55   for (const auto& label :
56        grpc::internal::OpenCensusRegistry::Get().ConstantLabels()) {
57     descriptor->add_column(label.tag_key);
58   }
59 }
60 
CountDistributionAggregation()61 Aggregation CountDistributionAggregation() {
62   return Aggregation::Distribution(BucketBoundaries::Exponential(17, 1.0, 2.0));
63 }
64 
DefaultViewDescriptor()65 ViewDescriptor DefaultViewDescriptor() {
66   auto descriptor = ViewDescriptor();
67   SetConstantLabels(&descriptor);
68   return descriptor;
69 }
70 
MinuteDescriptor()71 ViewDescriptor MinuteDescriptor() {
72   auto descriptor = DefaultViewDescriptor();
73   SetAggregationWindow(AggregationWindow::Interval(absl::Minutes(1)),
74                        &descriptor);
75   return descriptor;
76 }
77 
HourDescriptor()78 ViewDescriptor HourDescriptor() {
79   auto descriptor = DefaultViewDescriptor();
80   SetAggregationWindow(AggregationWindow::Interval(absl::Hours(1)),
81                        &descriptor);
82   return descriptor;
83 }
84 
85 }  // namespace
86 
RegisterOpenCensusViewsForExport()87 void RegisterOpenCensusViewsForExport() {
88   experimental::ClientSentMessagesPerRpcCumulative().RegisterForExport();
89   experimental::ClientSentBytesPerRpcCumulative().RegisterForExport();
90   experimental::ClientReceivedMessagesPerRpcCumulative().RegisterForExport();
91   experimental::ClientReceivedBytesPerRpcCumulative().RegisterForExport();
92   experimental::ClientRoundtripLatencyCumulative().RegisterForExport();
93   experimental::ClientServerLatencyCumulative().RegisterForExport();
94 
95   experimental::ServerSentMessagesPerRpcCumulative().RegisterForExport();
96   experimental::ServerSentBytesPerRpcCumulative().RegisterForExport();
97   experimental::ServerReceivedMessagesPerRpcCumulative().RegisterForExport();
98   experimental::ServerReceivedBytesPerRpcCumulative().RegisterForExport();
99   experimental::ServerServerLatencyCumulative().RegisterForExport();
100 }
101 
102 namespace experimental {
103 
104 // client
ClientStartedRpcs()105 const ViewDescriptor& ClientStartedRpcs() {
106   const static ViewDescriptor descriptor =
107       DefaultViewDescriptor()
108           .set_name("grpc.io/client/started_rpcs")
109           .set_measure(kRpcClientStartedRpcsMeasureName)
110           .set_aggregation(Aggregation::Count())
111           .add_column(ClientMethodTagKey());
112   return descriptor;
113 }
114 
ClientCompletedRpcs()115 const ViewDescriptor& ClientCompletedRpcs() {
116   const static ViewDescriptor descriptor =
117       DefaultViewDescriptor()
118           .set_name("grpc.io/client/completed_rpcs")
119           .set_measure(kRpcClientRoundtripLatencyMeasureName)
120           .set_aggregation(Aggregation::Count())
121           .add_column(ClientMethodTagKey())
122           .add_column(ClientStatusTagKey());
123   return descriptor;
124 }
125 
ClientRoundtripLatency()126 const ViewDescriptor& ClientRoundtripLatency() {
127   const static ViewDescriptor descriptor =
128       DefaultViewDescriptor()
129           .set_name("grpc.io/client/roundtrip_latency")
130           .set_measure(kRpcClientRoundtripLatencyMeasureName)
131           .set_aggregation(MillisDistributionAggregation())
132           .add_column(ClientMethodTagKey());
133   return descriptor;
134 }
135 
ClientTransportLatency()136 const ViewDescriptor& ClientTransportLatency() {
137   const static ViewDescriptor descriptor =
138       DefaultViewDescriptor()
139           .set_name("grpc.io/client/transport_latency")
140           .set_measure(kRpcClientTransportLatencyMeasureName)
141           .set_aggregation(MillisDistributionAggregation())
142           .add_column(ClientMethodTagKey());
143   return descriptor;
144 }
145 
ClientSentCompressedMessageBytesPerRpc()146 const ViewDescriptor& ClientSentCompressedMessageBytesPerRpc() {
147   const static ViewDescriptor descriptor =
148       DefaultViewDescriptor()
149           .set_name("grpc.io/client/sent_compressed_message_bytes_per_rpc")
150           .set_measure(kRpcClientSentBytesPerRpcMeasureName)
151           .set_aggregation(BytesDistributionAggregation())
152           .add_column(ClientMethodTagKey())
153           .add_column(ClientStatusTagKey());
154   return descriptor;
155 }
156 
ClientReceivedCompressedMessageBytesPerRpc()157 const ViewDescriptor& ClientReceivedCompressedMessageBytesPerRpc() {
158   const static ViewDescriptor descriptor =
159       DefaultViewDescriptor()
160           .set_name("grpc.io/client/received_compressed_message_bytes_per_rpc")
161           .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
162           .set_aggregation(BytesDistributionAggregation())
163           .add_column(ClientMethodTagKey())
164           .add_column(ClientStatusTagKey());
165   return descriptor;
166 }
167 
168 // server
ServerStartedRpcs()169 const ViewDescriptor& ServerStartedRpcs() {
170   const static ViewDescriptor descriptor =
171       DefaultViewDescriptor()
172           .set_name("grpc.io/server/started_rpcs")
173           .set_measure(kRpcServerStartedRpcsMeasureName)
174           .set_aggregation(Aggregation::Count())
175           .add_column(ServerMethodTagKey());
176   return descriptor;
177 }
178 
ServerCompletedRpcs()179 const ViewDescriptor& ServerCompletedRpcs() {
180   const static ViewDescriptor descriptor =
181       DefaultViewDescriptor()
182           .set_name("grpc.io/server/completed_rpcs")
183           .set_measure(kRpcServerServerLatencyMeasureName)
184           .set_aggregation(Aggregation::Count())
185           .add_column(ServerMethodTagKey())
186           .add_column(ServerStatusTagKey());
187   return descriptor;
188 }
189 
ServerSentCompressedMessageBytesPerRpc()190 const ViewDescriptor& ServerSentCompressedMessageBytesPerRpc() {
191   const static ViewDescriptor descriptor =
192       DefaultViewDescriptor()
193           .set_name("grpc.io/server/sent_compressed_message_bytes_per_rpc")
194           .set_measure(kRpcServerSentBytesPerRpcMeasureName)
195           .set_aggregation(BytesDistributionAggregation())
196           .add_column(ServerMethodTagKey())
197           .add_column(ServerStatusTagKey());
198   return descriptor;
199 }
200 
ServerReceivedCompressedMessageBytesPerRpc()201 const ViewDescriptor& ServerReceivedCompressedMessageBytesPerRpc() {
202   const static ViewDescriptor descriptor =
203       DefaultViewDescriptor()
204           .set_name("grpc.io/server/received_compressed_message_bytes_per_rpc")
205           .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
206           .set_aggregation(BytesDistributionAggregation())
207           .add_column(ServerMethodTagKey())
208           .add_column(ServerStatusTagKey());
209   return descriptor;
210 }
211 
ServerServerLatency()212 const ViewDescriptor& ServerServerLatency() {
213   const static ViewDescriptor descriptor =
214       DefaultViewDescriptor()
215           .set_name("grpc.io/server/server_latency")
216           .set_measure(kRpcServerServerLatencyMeasureName)
217           .set_aggregation(MillisDistributionAggregation())
218           .add_column(ServerMethodTagKey())
219           .add_column(ServerStatusTagKey());
220   return descriptor;
221 }
222 
223 // client cumulative
ClientSentBytesPerRpcCumulative()224 const ViewDescriptor& ClientSentBytesPerRpcCumulative() {
225   const static ViewDescriptor descriptor =
226       DefaultViewDescriptor()
227           .set_name("grpc.io/client/sent_bytes_per_rpc/cumulative")
228           .set_measure(kRpcClientSentBytesPerRpcMeasureName)
229           .set_aggregation(BytesDistributionAggregation())
230           .add_column(ClientMethodTagKey());
231   return descriptor;
232 }
233 
ClientReceivedBytesPerRpcCumulative()234 const ViewDescriptor& ClientReceivedBytesPerRpcCumulative() {
235   const static ViewDescriptor descriptor =
236       DefaultViewDescriptor()
237           .set_name("grpc.io/client/received_bytes_per_rpc/cumulative")
238           .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
239           .set_aggregation(BytesDistributionAggregation())
240           .add_column(ClientMethodTagKey());
241   return descriptor;
242 }
243 
ClientRoundtripLatencyCumulative()244 const ViewDescriptor& ClientRoundtripLatencyCumulative() {
245   const static ViewDescriptor descriptor =
246       DefaultViewDescriptor()
247           .set_name("grpc.io/client/roundtrip_latency/cumulative")
248           .set_measure(kRpcClientRoundtripLatencyMeasureName)
249           .set_aggregation(MillisDistributionAggregation())
250           .add_column(ClientMethodTagKey());
251   return descriptor;
252 }
253 
ClientServerLatencyCumulative()254 const ViewDescriptor& ClientServerLatencyCumulative() {
255   const static ViewDescriptor descriptor =
256       DefaultViewDescriptor()
257           .set_name("grpc.io/client/server_latency/cumulative")
258           .set_measure(kRpcClientServerLatencyMeasureName)
259           .set_aggregation(MillisDistributionAggregation())
260           .add_column(ClientMethodTagKey());
261   return descriptor;
262 }
263 
ClientStartedRpcsCumulative()264 const ViewDescriptor& ClientStartedRpcsCumulative() {
265   const static ViewDescriptor descriptor =
266       DefaultViewDescriptor()
267           .set_name("grpc.io/client/started_rpcs/cumulative")
268           .set_measure(kRpcClientStartedRpcsMeasureName)
269           .set_aggregation(Aggregation::Count())
270           .add_column(ClientMethodTagKey());
271   return descriptor;
272 }
273 
ClientCompletedRpcsCumulative()274 const ViewDescriptor& ClientCompletedRpcsCumulative() {
275   const static ViewDescriptor descriptor =
276       DefaultViewDescriptor()
277           .set_name("grpc.io/client/completed_rpcs/cumulative")
278           .set_measure(kRpcClientRoundtripLatencyMeasureName)
279           .set_aggregation(Aggregation::Count())
280           .add_column(ClientMethodTagKey())
281           .add_column(ClientStatusTagKey());
282   return descriptor;
283 }
284 
ClientSentMessagesPerRpcCumulative()285 const ViewDescriptor& ClientSentMessagesPerRpcCumulative() {
286   const static ViewDescriptor descriptor =
287       DefaultViewDescriptor()
288           .set_name("grpc.io/client/received_messages_per_rpc/cumulative")
289           .set_measure(kRpcClientSentMessagesPerRpcMeasureName)
290           .set_aggregation(CountDistributionAggregation())
291           .add_column(ClientMethodTagKey());
292   return descriptor;
293 }
294 
ClientReceivedMessagesPerRpcCumulative()295 const ViewDescriptor& ClientReceivedMessagesPerRpcCumulative() {
296   const static ViewDescriptor descriptor =
297       DefaultViewDescriptor()
298           .set_name("grpc.io/client/sent_messages_per_rpc/cumulative")
299           .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName)
300           .set_aggregation(CountDistributionAggregation())
301           .add_column(ClientMethodTagKey());
302   return descriptor;
303 }
304 
ClientRetriesPerCallCumulative()305 const ViewDescriptor& ClientRetriesPerCallCumulative() {
306   const static ViewDescriptor descriptor =
307       DefaultViewDescriptor()
308           .set_name("grpc.io/client/retries_per_call/cumulative")
309           .set_measure(kRpcClientRetriesPerCallMeasureName)
310           .set_aggregation(CountDistributionAggregation())
311           .add_column(ClientMethodTagKey());
312   return descriptor;
313 }
314 
ClientRetriesCumulative()315 const ViewDescriptor& ClientRetriesCumulative() {
316   const static ViewDescriptor descriptor =
317       DefaultViewDescriptor()
318           .set_name("grpc.io/client/retries/cumulative")
319           .set_measure(kRpcClientRetriesPerCallMeasureName)
320           .set_aggregation(Aggregation::Sum())
321           .add_column(ClientMethodTagKey());
322   return descriptor;
323 }
324 
ClientTransparentRetriesPerCallCumulative()325 const ViewDescriptor& ClientTransparentRetriesPerCallCumulative() {
326   const static ViewDescriptor descriptor =
327       DefaultViewDescriptor()
328           .set_name("grpc.io/client/transparent_retries_per_call/cumulative")
329           .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
330           .set_aggregation(CountDistributionAggregation())
331           .add_column(ClientMethodTagKey());
332   return descriptor;
333 }
334 
ClientTransparentRetriesCumulative()335 const ViewDescriptor& ClientTransparentRetriesCumulative() {
336   const static ViewDescriptor descriptor =
337       DefaultViewDescriptor()
338           .set_name("grpc.io/client/transparent_retries/cumulative")
339           .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
340           .set_aggregation(Aggregation::Sum())
341           .add_column(ClientMethodTagKey());
342   return descriptor;
343 }
344 
ClientRetryDelayPerCallCumulative()345 const ViewDescriptor& ClientRetryDelayPerCallCumulative() {
346   const static ViewDescriptor descriptor =
347       DefaultViewDescriptor()
348           .set_name("grpc.io/client/retry_delay_per_call/cumulative")
349           .set_measure(kRpcClientRetryDelayPerCallMeasureName)
350           .set_aggregation(MillisDistributionAggregation())
351           .add_column(ClientMethodTagKey());
352   return descriptor;
353 }
354 
355 // server cumulative
ServerSentBytesPerRpcCumulative()356 const ViewDescriptor& ServerSentBytesPerRpcCumulative() {
357   const static ViewDescriptor descriptor =
358       DefaultViewDescriptor()
359           .set_name("grpc.io/server/received_bytes_per_rpc/cumulative")
360           .set_measure(kRpcServerSentBytesPerRpcMeasureName)
361           .set_aggregation(BytesDistributionAggregation())
362           .add_column(ServerMethodTagKey());
363   return descriptor;
364 }
365 
ServerReceivedBytesPerRpcCumulative()366 const ViewDescriptor& ServerReceivedBytesPerRpcCumulative() {
367   const static ViewDescriptor descriptor =
368       DefaultViewDescriptor()
369           .set_name("grpc.io/server/sent_bytes_per_rpc/cumulative")
370           .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
371           .set_aggregation(BytesDistributionAggregation())
372           .add_column(ServerMethodTagKey());
373   return descriptor;
374 }
375 
ServerServerLatencyCumulative()376 const ViewDescriptor& ServerServerLatencyCumulative() {
377   const static ViewDescriptor descriptor =
378       DefaultViewDescriptor()
379           .set_name("grpc.io/server/elapsed_time/cumulative")
380           .set_measure(kRpcServerServerLatencyMeasureName)
381           .set_aggregation(MillisDistributionAggregation())
382           .add_column(ServerMethodTagKey());
383   return descriptor;
384 }
385 
ServerStartedRpcsCumulative()386 const ViewDescriptor& ServerStartedRpcsCumulative() {
387   const static ViewDescriptor descriptor =
388       DefaultViewDescriptor()
389           .set_name("grpc.io/server/started_rpcs/cumulative")
390           .set_measure(kRpcServerStartedRpcsMeasureName)
391           .set_aggregation(Aggregation::Count())
392           .add_column(ServerMethodTagKey());
393   return descriptor;
394 }
395 
ServerCompletedRpcsCumulative()396 const ViewDescriptor& ServerCompletedRpcsCumulative() {
397   const static ViewDescriptor descriptor =
398       DefaultViewDescriptor()
399           .set_name("grpc.io/server/completed_rpcs/cumulative")
400           .set_measure(kRpcServerServerLatencyMeasureName)
401           .set_aggregation(Aggregation::Count())
402           .add_column(ServerMethodTagKey())
403           .add_column(ServerStatusTagKey());
404   return descriptor;
405 }
406 
ServerSentMessagesPerRpcCumulative()407 const ViewDescriptor& ServerSentMessagesPerRpcCumulative() {
408   const static ViewDescriptor descriptor =
409       DefaultViewDescriptor()
410           .set_name("grpc.io/server/received_messages_per_rpc/cumulative")
411           .set_measure(kRpcServerSentMessagesPerRpcMeasureName)
412           .set_aggregation(CountDistributionAggregation())
413           .add_column(ServerMethodTagKey());
414   return descriptor;
415 }
416 
ServerReceivedMessagesPerRpcCumulative()417 const ViewDescriptor& ServerReceivedMessagesPerRpcCumulative() {
418   const static ViewDescriptor descriptor =
419       DefaultViewDescriptor()
420           .set_name("grpc.io/server/sent_messages_per_rpc/cumulative")
421           .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName)
422           .set_aggregation(CountDistributionAggregation())
423           .add_column(ServerMethodTagKey());
424   return descriptor;
425 }
426 
427 // client minute
ClientSentBytesPerRpcMinute()428 const ViewDescriptor& ClientSentBytesPerRpcMinute() {
429   const static ViewDescriptor descriptor =
430       MinuteDescriptor()
431           .set_name("grpc.io/client/sent_bytes_per_rpc/minute")
432           .set_measure(kRpcClientSentBytesPerRpcMeasureName)
433           .set_aggregation(BytesDistributionAggregation())
434           .add_column(ClientMethodTagKey());
435   return descriptor;
436 }
437 
ClientReceivedBytesPerRpcMinute()438 const ViewDescriptor& ClientReceivedBytesPerRpcMinute() {
439   const static ViewDescriptor descriptor =
440       MinuteDescriptor()
441           .set_name("grpc.io/client/received_bytes_per_rpc/minute")
442           .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
443           .set_aggregation(BytesDistributionAggregation())
444           .add_column(ClientMethodTagKey());
445   return descriptor;
446 }
447 
ClientRoundtripLatencyMinute()448 const ViewDescriptor& ClientRoundtripLatencyMinute() {
449   const static ViewDescriptor descriptor =
450       MinuteDescriptor()
451           .set_name("grpc.io/client/roundtrip_latency/minute")
452           .set_measure(kRpcClientRoundtripLatencyMeasureName)
453           .set_aggregation(MillisDistributionAggregation())
454           .add_column(ClientMethodTagKey());
455   return descriptor;
456 }
457 
ClientServerLatencyMinute()458 const ViewDescriptor& ClientServerLatencyMinute() {
459   const static ViewDescriptor descriptor =
460       MinuteDescriptor()
461           .set_name("grpc.io/client/server_latency/minute")
462           .set_measure(kRpcClientServerLatencyMeasureName)
463           .set_aggregation(MillisDistributionAggregation())
464           .add_column(ClientMethodTagKey());
465   return descriptor;
466 }
467 
ClientStartedRpcsMinute()468 const ViewDescriptor& ClientStartedRpcsMinute() {
469   const static ViewDescriptor descriptor =
470       MinuteDescriptor()
471           .set_name("grpc.io/client/started_rpcs/minute")
472           .set_measure(kRpcClientStartedRpcsMeasureName)
473           .set_aggregation(Aggregation::Count())
474           .add_column(ClientMethodTagKey());
475   return descriptor;
476 }
477 
ClientCompletedRpcsMinute()478 const ViewDescriptor& ClientCompletedRpcsMinute() {
479   const static ViewDescriptor descriptor =
480       MinuteDescriptor()
481           .set_name("grpc.io/client/completed_rpcs/minute")
482           .set_measure(kRpcClientRoundtripLatencyMeasureName)
483           .set_aggregation(Aggregation::Count())
484           .add_column(ClientMethodTagKey())
485           .add_column(ClientStatusTagKey());
486   return descriptor;
487 }
488 
ClientSentMessagesPerRpcMinute()489 const ViewDescriptor& ClientSentMessagesPerRpcMinute() {
490   const static ViewDescriptor descriptor =
491       MinuteDescriptor()
492           .set_name("grpc.io/client/sent_messages_per_rpc/minute")
493           .set_measure(kRpcClientSentMessagesPerRpcMeasureName)
494           .set_aggregation(CountDistributionAggregation())
495           .add_column(ClientMethodTagKey());
496   return descriptor;
497 }
498 
ClientReceivedMessagesPerRpcMinute()499 const ViewDescriptor& ClientReceivedMessagesPerRpcMinute() {
500   const static ViewDescriptor descriptor =
501       MinuteDescriptor()
502           .set_name("grpc.io/client/received_messages_per_rpc/minute")
503           .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName)
504           .set_aggregation(CountDistributionAggregation())
505           .add_column(ClientMethodTagKey());
506   return descriptor;
507 }
508 
ClientRetriesPerCallMinute()509 const ViewDescriptor& ClientRetriesPerCallMinute() {
510   const static ViewDescriptor descriptor =
511       MinuteDescriptor()
512           .set_name("grpc.io/client/retries_per_call/minute")
513           .set_measure(kRpcClientRetriesPerCallMeasureName)
514           .set_aggregation(CountDistributionAggregation())
515           .add_column(ClientMethodTagKey());
516   return descriptor;
517 }
518 
ClientRetriesMinute()519 const ViewDescriptor& ClientRetriesMinute() {
520   const static ViewDescriptor descriptor =
521       MinuteDescriptor()
522           .set_name("grpc.io/client/retries/minute")
523           .set_measure(kRpcClientRetriesPerCallMeasureName)
524           .set_aggregation(Aggregation::Sum())
525           .add_column(ClientMethodTagKey());
526   return descriptor;
527 }
528 
ClientTransparentRetriesPerCallMinute()529 const ViewDescriptor& ClientTransparentRetriesPerCallMinute() {
530   const static ViewDescriptor descriptor =
531       MinuteDescriptor()
532           .set_name("grpc.io/client/transparent_retries_per_call/minute")
533           .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
534           .set_aggregation(CountDistributionAggregation())
535           .add_column(ClientMethodTagKey());
536   return descriptor;
537 }
538 
ClientTransparentRetriesMinute()539 const ViewDescriptor& ClientTransparentRetriesMinute() {
540   const static ViewDescriptor descriptor =
541       MinuteDescriptor()
542           .set_name("grpc.io/client/transparent_retries/minute")
543           .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
544           .set_aggregation(Aggregation::Sum())
545           .add_column(ClientMethodTagKey());
546   return descriptor;
547 }
548 
ClientRetryDelayPerCallMinute()549 const ViewDescriptor& ClientRetryDelayPerCallMinute() {
550   const static ViewDescriptor descriptor =
551       MinuteDescriptor()
552           .set_name("grpc.io/client/retry_delay_per_call/minute")
553           .set_measure(kRpcClientRetryDelayPerCallMeasureName)
554           .set_aggregation(MillisDistributionAggregation())
555           .add_column(ClientMethodTagKey());
556   return descriptor;
557 }
558 
559 // server minute
ServerSentBytesPerRpcMinute()560 const ViewDescriptor& ServerSentBytesPerRpcMinute() {
561   const static ViewDescriptor descriptor =
562       MinuteDescriptor()
563           .set_name("grpc.io/server/sent_bytes_per_rpc/minute")
564           .set_measure(kRpcServerSentBytesPerRpcMeasureName)
565           .set_aggregation(BytesDistributionAggregation())
566           .add_column(ServerMethodTagKey());
567   return descriptor;
568 }
569 
ServerReceivedBytesPerRpcMinute()570 const ViewDescriptor& ServerReceivedBytesPerRpcMinute() {
571   const static ViewDescriptor descriptor =
572       MinuteDescriptor()
573           .set_name("grpc.io/server/received_bytes_per_rpc/minute")
574           .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
575           .set_aggregation(BytesDistributionAggregation())
576           .add_column(ServerMethodTagKey());
577   return descriptor;
578 }
579 
ServerServerLatencyMinute()580 const ViewDescriptor& ServerServerLatencyMinute() {
581   const static ViewDescriptor descriptor =
582       MinuteDescriptor()
583           .set_name("grpc.io/server/server_latency/minute")
584           .set_measure(kRpcServerServerLatencyMeasureName)
585           .set_aggregation(MillisDistributionAggregation())
586           .add_column(ServerMethodTagKey());
587   return descriptor;
588 }
589 
ServerStartedRpcsMinute()590 const ViewDescriptor& ServerStartedRpcsMinute() {
591   const static ViewDescriptor descriptor =
592       MinuteDescriptor()
593           .set_name("grpc.io/server/started_rpcs/minute")
594           .set_measure(kRpcServerStartedRpcsMeasureName)
595           .set_aggregation(Aggregation::Count())
596           .add_column(ServerMethodTagKey());
597   return descriptor;
598 }
599 
ServerCompletedRpcsMinute()600 const ViewDescriptor& ServerCompletedRpcsMinute() {
601   const static ViewDescriptor descriptor =
602       MinuteDescriptor()
603           .set_name("grpc.io/server/completed_rpcs/minute")
604           .set_measure(kRpcServerServerLatencyMeasureName)
605           .set_aggregation(Aggregation::Count())
606           .add_column(ServerMethodTagKey())
607           .add_column(ServerStatusTagKey());
608   return descriptor;
609 }
610 
ServerSentMessagesPerRpcMinute()611 const ViewDescriptor& ServerSentMessagesPerRpcMinute() {
612   const static ViewDescriptor descriptor =
613       MinuteDescriptor()
614           .set_name("grpc.io/server/sent_messages_per_rpc/minute")
615           .set_measure(kRpcServerSentMessagesPerRpcMeasureName)
616           .set_aggregation(CountDistributionAggregation())
617           .add_column(ServerMethodTagKey());
618   return descriptor;
619 }
620 
ServerReceivedMessagesPerRpcMinute()621 const ViewDescriptor& ServerReceivedMessagesPerRpcMinute() {
622   const static ViewDescriptor descriptor =
623       MinuteDescriptor()
624           .set_name("grpc.io/server/received_messages_per_rpc/minute")
625           .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName)
626           .set_aggregation(CountDistributionAggregation())
627           .add_column(ServerMethodTagKey());
628   return descriptor;
629 }
630 
631 // client hour
ClientSentBytesPerRpcHour()632 const ViewDescriptor& ClientSentBytesPerRpcHour() {
633   const static ViewDescriptor descriptor =
634       HourDescriptor()
635           .set_name("grpc.io/client/sent_bytes_per_rpc/hour")
636           .set_measure(kRpcClientSentBytesPerRpcMeasureName)
637           .set_aggregation(BytesDistributionAggregation())
638           .add_column(ClientMethodTagKey());
639   return descriptor;
640 }
641 
ClientReceivedBytesPerRpcHour()642 const ViewDescriptor& ClientReceivedBytesPerRpcHour() {
643   const static ViewDescriptor descriptor =
644       HourDescriptor()
645           .set_name("grpc.io/client/received_bytes_per_rpc/hour")
646           .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
647           .set_aggregation(BytesDistributionAggregation())
648           .add_column(ClientMethodTagKey());
649   return descriptor;
650 }
651 
ClientRoundtripLatencyHour()652 const ViewDescriptor& ClientRoundtripLatencyHour() {
653   const static ViewDescriptor descriptor =
654       HourDescriptor()
655           .set_name("grpc.io/client/roundtrip_latency/hour")
656           .set_measure(kRpcClientRoundtripLatencyMeasureName)
657           .set_aggregation(MillisDistributionAggregation())
658           .add_column(ClientMethodTagKey());
659   return descriptor;
660 }
661 
ClientServerLatencyHour()662 const ViewDescriptor& ClientServerLatencyHour() {
663   const static ViewDescriptor descriptor =
664       HourDescriptor()
665           .set_name("grpc.io/client/server_latency/hour")
666           .set_measure(kRpcClientServerLatencyMeasureName)
667           .set_aggregation(MillisDistributionAggregation())
668           .add_column(ClientMethodTagKey());
669   return descriptor;
670 }
671 
ClientStartedRpcsHour()672 const ViewDescriptor& ClientStartedRpcsHour() {
673   const static ViewDescriptor descriptor =
674       HourDescriptor()
675           .set_name("grpc.io/client/started_rpcs/hour")
676           .set_measure(kRpcClientStartedRpcsMeasureName)
677           .set_aggregation(Aggregation::Count())
678           .add_column(ClientMethodTagKey());
679   return descriptor;
680 }
681 
ClientCompletedRpcsHour()682 const ViewDescriptor& ClientCompletedRpcsHour() {
683   const static ViewDescriptor descriptor =
684       HourDescriptor()
685           .set_name("grpc.io/client/completed_rpcs/hour")
686           .set_measure(kRpcClientRoundtripLatencyMeasureName)
687           .set_aggregation(Aggregation::Count())
688           .add_column(ClientMethodTagKey())
689           .add_column(ClientStatusTagKey());
690   return descriptor;
691 }
692 
ClientSentMessagesPerRpcHour()693 const ViewDescriptor& ClientSentMessagesPerRpcHour() {
694   const static ViewDescriptor descriptor =
695       HourDescriptor()
696           .set_name("grpc.io/client/sent_messages_per_rpc/hour")
697           .set_measure(kRpcClientSentMessagesPerRpcMeasureName)
698           .set_aggregation(CountDistributionAggregation())
699           .add_column(ClientMethodTagKey());
700   return descriptor;
701 }
702 
ClientReceivedMessagesPerRpcHour()703 const ViewDescriptor& ClientReceivedMessagesPerRpcHour() {
704   const static ViewDescriptor descriptor =
705       HourDescriptor()
706           .set_name("grpc.io/client/received_messages_per_rpc/hour")
707           .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName)
708           .set_aggregation(CountDistributionAggregation())
709           .add_column(ClientMethodTagKey());
710   return descriptor;
711 }
712 
ClientRetriesPerCallHour()713 const ViewDescriptor& ClientRetriesPerCallHour() {
714   const static ViewDescriptor descriptor =
715       HourDescriptor()
716           .set_name("grpc.io/client/retries_per_call/hour")
717           .set_measure(kRpcClientRetriesPerCallMeasureName)
718           .set_aggregation(CountDistributionAggregation())
719           .add_column(ClientMethodTagKey());
720   return descriptor;
721 }
722 
ClientRetriesHour()723 const ViewDescriptor& ClientRetriesHour() {
724   const static ViewDescriptor descriptor =
725       HourDescriptor()
726           .set_name("grpc.io/client/retries/hour")
727           .set_measure(kRpcClientRetriesPerCallMeasureName)
728           .set_aggregation(Aggregation::Sum())
729           .add_column(ClientMethodTagKey());
730   return descriptor;
731 }
732 
ClientTransparentRetriesPerCallHour()733 const ViewDescriptor& ClientTransparentRetriesPerCallHour() {
734   const static ViewDescriptor descriptor =
735       HourDescriptor()
736           .set_name("grpc.io/client/transparent_retries_per_call/hour")
737           .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
738           .set_aggregation(CountDistributionAggregation())
739           .add_column(ClientMethodTagKey());
740   return descriptor;
741 }
742 
ClientTransparentRetriesHour()743 const ViewDescriptor& ClientTransparentRetriesHour() {
744   const static ViewDescriptor descriptor =
745       HourDescriptor()
746           .set_name("grpc.io/client/transparent_retries/hour")
747           .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
748           .set_aggregation(Aggregation::Sum())
749           .add_column(ClientMethodTagKey());
750   return descriptor;
751 }
752 
ClientRetryDelayPerCallHour()753 const ViewDescriptor& ClientRetryDelayPerCallHour() {
754   const static ViewDescriptor descriptor =
755       HourDescriptor()
756           .set_name("grpc.io/client/retry_delay_per_call/hour")
757           .set_measure(kRpcClientRetryDelayPerCallMeasureName)
758           .set_aggregation(MillisDistributionAggregation())
759           .add_column(ClientMethodTagKey());
760   return descriptor;
761 }
762 
763 // server hour
ServerSentBytesPerRpcHour()764 const ViewDescriptor& ServerSentBytesPerRpcHour() {
765   const static ViewDescriptor descriptor =
766       HourDescriptor()
767           .set_name("grpc.io/server/sent_bytes_per_rpc/hour")
768           .set_measure(kRpcServerSentBytesPerRpcMeasureName)
769           .set_aggregation(BytesDistributionAggregation())
770           .add_column(ServerMethodTagKey());
771   return descriptor;
772 }
773 
ServerReceivedBytesPerRpcHour()774 const ViewDescriptor& ServerReceivedBytesPerRpcHour() {
775   const static ViewDescriptor descriptor =
776       HourDescriptor()
777           .set_name("grpc.io/server/received_bytes_per_rpc/hour")
778           .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
779           .set_aggregation(BytesDistributionAggregation())
780           .add_column(ServerMethodTagKey());
781   return descriptor;
782 }
783 
ServerServerLatencyHour()784 const ViewDescriptor& ServerServerLatencyHour() {
785   const static ViewDescriptor descriptor =
786       HourDescriptor()
787           .set_name("grpc.io/server/server_latency/hour")
788           .set_measure(kRpcServerServerLatencyMeasureName)
789           .set_aggregation(MillisDistributionAggregation())
790           .add_column(ServerMethodTagKey());
791   return descriptor;
792 }
793 
ServerStartedRpcsHour()794 const ViewDescriptor& ServerStartedRpcsHour() {
795   const static ViewDescriptor descriptor =
796       HourDescriptor()
797           .set_name("grpc.io/server/started_rpcs/hour")
798           .set_measure(kRpcServerStartedRpcsMeasureName)
799           .set_aggregation(Aggregation::Count())
800           .add_column(ClientMethodTagKey());
801   return descriptor;
802 }
803 
ServerCompletedRpcsHour()804 const ViewDescriptor& ServerCompletedRpcsHour() {
805   const static ViewDescriptor descriptor =
806       HourDescriptor()
807           .set_name("grpc.io/server/completed_rpcs/hour")
808           .set_measure(kRpcServerServerLatencyMeasureName)
809           .set_aggregation(Aggregation::Count())
810           .add_column(ServerMethodTagKey())
811           .add_column(ServerStatusTagKey());
812   return descriptor;
813 }
814 
ServerSentMessagesPerRpcHour()815 const ViewDescriptor& ServerSentMessagesPerRpcHour() {
816   const static ViewDescriptor descriptor =
817       HourDescriptor()
818           .set_name("grpc.io/server/sent_messages_per_rpc/hour")
819           .set_measure(kRpcServerSentMessagesPerRpcMeasureName)
820           .set_aggregation(CountDistributionAggregation())
821           .add_column(ServerMethodTagKey());
822   return descriptor;
823 }
824 
ServerReceivedMessagesPerRpcHour()825 const ViewDescriptor& ServerReceivedMessagesPerRpcHour() {
826   const static ViewDescriptor descriptor =
827       HourDescriptor()
828           .set_name("grpc.io/server/received_messages_per_rpc/hour")
829           .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName)
830           .set_aggregation(CountDistributionAggregation())
831           .add_column(ServerMethodTagKey());
832   return descriptor;
833 }
834 
835 }  // namespace experimental
836 
837 namespace internal {
838 
ClientApiLatency()839 const ViewDescriptor& ClientApiLatency() {
840   const static ViewDescriptor descriptor =
841       DefaultViewDescriptor()
842           .set_name("grpc.io/client/api_latency")
843           .set_measure(kRpcClientApiLatencyMeasureName)
844           .set_aggregation(MillisDistributionAggregation())
845           .add_column(ClientMethodTagKey())
846           .add_column(ClientStatusTagKey());
847   return descriptor;
848 }
849 
850 }  // namespace internal
851 
852 }  // namespace grpc
853