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