3 * Copyright 2018 gRPC authors.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <grpc/support/port_platform.h>
21 #include "absl/time/time.h"
22 #include "opencensus/stats/internal/aggregation_window.h"
23 #include "opencensus/stats/internal/set_aggregation_window.h"
24 #include "opencensus/stats/stats.h"
26 #include "src/cpp/ext/filters/census/grpc_plugin.h"
30 using ::opencensus::stats::Aggregation;
31 using ::opencensus::stats::AggregationWindow;
32 using ::opencensus::stats::BucketBoundaries;
33 using ::opencensus::stats::ViewDescriptor;
35 // These measure definitions should be kept in sync across opencensus
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}));
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}));
54 Aggregation CountDistributionAggregation() {
55 return Aggregation::Distribution(BucketBoundaries::Exponential(17, 1.0, 2.0));
58 ViewDescriptor MinuteDescriptor() {
59 auto descriptor = ViewDescriptor();
60 SetAggregationWindow(AggregationWindow::Interval(absl::Minutes(1)),
65 ViewDescriptor HourDescriptor() {
66 auto descriptor = ViewDescriptor();
67 SetAggregationWindow(AggregationWindow::Interval(absl::Hours(1)),
74 void RegisterOpenCensusViewsForExport() {
75 ClientSentMessagesPerRpcCumulative().RegisterForExport();
76 ClientSentBytesPerRpcCumulative().RegisterForExport();
77 ClientReceivedMessagesPerRpcCumulative().RegisterForExport();
78 ClientReceivedBytesPerRpcCumulative().RegisterForExport();
79 ClientRoundtripLatencyCumulative().RegisterForExport();
80 ClientServerLatencyCumulative().RegisterForExport();
82 ServerSentMessagesPerRpcCumulative().RegisterForExport();
83 ServerSentBytesPerRpcCumulative().RegisterForExport();
84 ServerReceivedMessagesPerRpcCumulative().RegisterForExport();
85 ServerReceivedBytesPerRpcCumulative().RegisterForExport();
86 ServerServerLatencyCumulative().RegisterForExport();
90 const ViewDescriptor& ClientSentBytesPerRpcCumulative() {
91 const static ViewDescriptor descriptor =
93 .set_name("grpc.io/client/sent_bytes_per_rpc/cumulative")
94 .set_measure(kRpcClientSentBytesPerRpcMeasureName)
95 .set_aggregation(BytesDistributionAggregation())
96 .add_column(ClientMethodTagKey());
100 const ViewDescriptor& ClientReceivedBytesPerRpcCumulative() {
101 const static ViewDescriptor descriptor =
103 .set_name("grpc.io/client/received_bytes_per_rpc/cumulative")
104 .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
105 .set_aggregation(BytesDistributionAggregation())
106 .add_column(ClientMethodTagKey());
110 const ViewDescriptor& ClientRoundtripLatencyCumulative() {
111 const static ViewDescriptor descriptor =
113 .set_name("grpc.io/client/roundtrip_latency/cumulative")
114 .set_measure(kRpcClientRoundtripLatencyMeasureName)
115 .set_aggregation(MillisDistributionAggregation())
116 .add_column(ClientMethodTagKey());
120 const ViewDescriptor& ClientServerLatencyCumulative() {
121 const static ViewDescriptor descriptor =
123 .set_name("grpc.io/client/server_latency/cumulative")
124 .set_measure(kRpcClientServerLatencyMeasureName)
125 .set_aggregation(MillisDistributionAggregation())
126 .add_column(ClientMethodTagKey());
130 const ViewDescriptor& ClientCompletedRpcsCumulative() {
131 const static ViewDescriptor descriptor =
133 .set_name("grpc.io/client/completed_rpcs/cumulative")
134 .set_measure(kRpcClientRoundtripLatencyMeasureName)
135 .set_aggregation(Aggregation::Count())
136 .add_column(ClientMethodTagKey())
137 .add_column(ClientStatusTagKey());
141 const ViewDescriptor& ClientSentMessagesPerRpcCumulative() {
142 const static ViewDescriptor descriptor =
144 .set_name("grpc.io/client/received_messages_per_rpc/cumulative")
145 .set_measure(kRpcClientSentMessagesPerRpcMeasureName)
146 .set_aggregation(CountDistributionAggregation())
147 .add_column(ClientMethodTagKey());
151 const ViewDescriptor& ClientReceivedMessagesPerRpcCumulative() {
152 const static ViewDescriptor descriptor =
154 .set_name("grpc.io/client/sent_messages_per_rpc/cumulative")
155 .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName)
156 .set_aggregation(CountDistributionAggregation())
157 .add_column(ClientMethodTagKey());
161 const ViewDescriptor& ClientRetriesPerCallCumulative() {
162 const static ViewDescriptor descriptor =
164 .set_name("grpc.io/client/retries_per_call/cumulative")
165 .set_measure(kRpcClientRetriesPerCallMeasureName)
166 .set_aggregation(CountDistributionAggregation())
167 .add_column(ClientMethodTagKey());
171 const ViewDescriptor& ClientRetriesCumulative() {
172 const static ViewDescriptor descriptor =
174 .set_name("grpc.io/client/retries/cumulative")
175 .set_measure(kRpcClientRetriesPerCallMeasureName)
176 .set_aggregation(Aggregation::Sum())
177 .add_column(ClientMethodTagKey());
181 const ViewDescriptor& ClientTransparentRetriesPerCallCumulative() {
182 const static ViewDescriptor descriptor =
184 .set_name("grpc.io/client/transparent_retries_per_call/cumulative")
185 .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
186 .set_aggregation(CountDistributionAggregation())
187 .add_column(ClientMethodTagKey());
191 const ViewDescriptor& ClientTransparentRetriesCumulative() {
192 const static ViewDescriptor descriptor =
194 .set_name("grpc.io/client/transparent_retries/cumulative")
195 .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
196 .set_aggregation(Aggregation::Sum())
197 .add_column(ClientMethodTagKey());
201 const ViewDescriptor& ClientRetryDelayPerCallCumulative() {
202 const static ViewDescriptor descriptor =
204 .set_name("grpc.io/client/retry_delay_per_call/cumulative")
205 .set_measure(kRpcClientRetryDelayPerCallMeasureName)
206 .set_aggregation(MillisDistributionAggregation())
207 .add_column(ClientMethodTagKey());
212 const ViewDescriptor& ServerSentBytesPerRpcCumulative() {
213 const static ViewDescriptor descriptor =
215 .set_name("grpc.io/server/received_bytes_per_rpc/cumulative")
216 .set_measure(kRpcServerSentBytesPerRpcMeasureName)
217 .set_aggregation(BytesDistributionAggregation())
218 .add_column(ServerMethodTagKey());
222 const ViewDescriptor& ServerReceivedBytesPerRpcCumulative() {
223 const static ViewDescriptor descriptor =
225 .set_name("grpc.io/server/sent_bytes_per_rpc/cumulative")
226 .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
227 .set_aggregation(BytesDistributionAggregation())
228 .add_column(ServerMethodTagKey());
232 const ViewDescriptor& ServerServerLatencyCumulative() {
233 const static ViewDescriptor descriptor =
235 .set_name("grpc.io/server/elapsed_time/cumulative")
236 .set_measure(kRpcServerServerLatencyMeasureName)
237 .set_aggregation(MillisDistributionAggregation())
238 .add_column(ServerMethodTagKey());
242 const ViewDescriptor& ServerCompletedRpcsCumulative() {
243 const static ViewDescriptor descriptor =
245 .set_name("grpc.io/server/completed_rpcs/cumulative")
246 .set_measure(kRpcServerServerLatencyMeasureName)
247 .set_aggregation(Aggregation::Count())
248 .add_column(ServerMethodTagKey())
249 .add_column(ServerStatusTagKey());
253 const ViewDescriptor& ServerSentMessagesPerRpcCumulative() {
254 const static ViewDescriptor descriptor =
256 .set_name("grpc.io/server/received_messages_per_rpc/cumulative")
257 .set_measure(kRpcServerSentMessagesPerRpcMeasureName)
258 .set_aggregation(CountDistributionAggregation())
259 .add_column(ServerMethodTagKey());
263 const ViewDescriptor& ServerReceivedMessagesPerRpcCumulative() {
264 const static ViewDescriptor descriptor =
266 .set_name("grpc.io/server/sent_messages_per_rpc/cumulative")
267 .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName)
268 .set_aggregation(CountDistributionAggregation())
269 .add_column(ServerMethodTagKey());
274 const ViewDescriptor& ClientSentBytesPerRpcMinute() {
275 const static ViewDescriptor descriptor =
277 .set_name("grpc.io/client/sent_bytes_per_rpc/minute")
278 .set_measure(kRpcClientSentBytesPerRpcMeasureName)
279 .set_aggregation(BytesDistributionAggregation())
280 .add_column(ClientMethodTagKey());
284 const ViewDescriptor& ClientReceivedBytesPerRpcMinute() {
285 const static ViewDescriptor descriptor =
287 .set_name("grpc.io/client/received_bytes_per_rpc/minute")
288 .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
289 .set_aggregation(BytesDistributionAggregation())
290 .add_column(ClientMethodTagKey());
294 const ViewDescriptor& ClientRoundtripLatencyMinute() {
295 const static ViewDescriptor descriptor =
297 .set_name("grpc.io/client/roundtrip_latency/minute")
298 .set_measure(kRpcClientRoundtripLatencyMeasureName)
299 .set_aggregation(MillisDistributionAggregation())
300 .add_column(ClientMethodTagKey());
304 const ViewDescriptor& ClientServerLatencyMinute() {
305 const static ViewDescriptor descriptor =
307 .set_name("grpc.io/client/server_latency/minute")
308 .set_measure(kRpcClientServerLatencyMeasureName)
309 .set_aggregation(MillisDistributionAggregation())
310 .add_column(ClientMethodTagKey());
314 const ViewDescriptor& ClientCompletedRpcsMinute() {
315 const static ViewDescriptor descriptor =
317 .set_name("grpc.io/client/completed_rpcs/minute")
318 .set_measure(kRpcClientRoundtripLatencyMeasureName)
319 .set_aggregation(Aggregation::Count())
320 .add_column(ClientMethodTagKey())
321 .add_column(ClientStatusTagKey());
325 const ViewDescriptor& ClientSentMessagesPerRpcMinute() {
326 const static ViewDescriptor descriptor =
328 .set_name("grpc.io/client/sent_messages_per_rpc/minute")
329 .set_measure(kRpcClientSentMessagesPerRpcMeasureName)
330 .set_aggregation(CountDistributionAggregation())
331 .add_column(ClientMethodTagKey());
335 const ViewDescriptor& ClientReceivedMessagesPerRpcMinute() {
336 const static ViewDescriptor descriptor =
338 .set_name("grpc.io/client/received_messages_per_rpc/minute")
339 .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName)
340 .set_aggregation(CountDistributionAggregation())
341 .add_column(ClientMethodTagKey());
345 const ViewDescriptor& ClientRetriesPerCallMinute() {
346 const static ViewDescriptor descriptor =
348 .set_name("grpc.io/client/retries_per_call/minute")
349 .set_measure(kRpcClientRetriesPerCallMeasureName)
350 .set_aggregation(CountDistributionAggregation())
351 .add_column(ClientMethodTagKey());
355 const ViewDescriptor& ClientRetriesMinute() {
356 const static ViewDescriptor descriptor =
358 .set_name("grpc.io/client/retries/minute")
359 .set_measure(kRpcClientRetriesPerCallMeasureName)
360 .set_aggregation(Aggregation::Sum())
361 .add_column(ClientMethodTagKey());
365 const ViewDescriptor& ClientTransparentRetriesPerCallMinute() {
366 const static ViewDescriptor descriptor =
368 .set_name("grpc.io/client/transparent_retries_per_call/minute")
369 .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
370 .set_aggregation(CountDistributionAggregation())
371 .add_column(ClientMethodTagKey());
375 const ViewDescriptor& ClientTransparentRetriesMinute() {
376 const static ViewDescriptor descriptor =
378 .set_name("grpc.io/client/transparent_retries/minute")
379 .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
380 .set_aggregation(Aggregation::Sum())
381 .add_column(ClientMethodTagKey());
385 const ViewDescriptor& ClientRetryDelayPerCallMinute() {
386 const static ViewDescriptor descriptor =
388 .set_name("grpc.io/client/retry_delay_per_call/minute")
389 .set_measure(kRpcClientRetryDelayPerCallMeasureName)
390 .set_aggregation(MillisDistributionAggregation())
391 .add_column(ClientMethodTagKey());
396 const ViewDescriptor& ServerSentBytesPerRpcMinute() {
397 const static ViewDescriptor descriptor =
399 .set_name("grpc.io/server/sent_bytes_per_rpc/minute")
400 .set_measure(kRpcServerSentBytesPerRpcMeasureName)
401 .set_aggregation(BytesDistributionAggregation())
402 .add_column(ServerMethodTagKey());
406 const ViewDescriptor& ServerReceivedBytesPerRpcMinute() {
407 const static ViewDescriptor descriptor =
409 .set_name("grpc.io/server/received_bytes_per_rpc/minute")
410 .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
411 .set_aggregation(BytesDistributionAggregation())
412 .add_column(ServerMethodTagKey());
416 const ViewDescriptor& ServerServerLatencyMinute() {
417 const static ViewDescriptor descriptor =
419 .set_name("grpc.io/server/server_latency/minute")
420 .set_measure(kRpcServerServerLatencyMeasureName)
421 .set_aggregation(MillisDistributionAggregation())
422 .add_column(ServerMethodTagKey());
426 const ViewDescriptor& ServerCompletedRpcsMinute() {
427 const static ViewDescriptor descriptor =
429 .set_name("grpc.io/server/completed_rpcs/minute")
430 .set_measure(kRpcServerServerLatencyMeasureName)
431 .set_aggregation(Aggregation::Count())
432 .add_column(ServerMethodTagKey())
433 .add_column(ServerStatusTagKey());
437 const ViewDescriptor& ServerSentMessagesPerRpcMinute() {
438 const static ViewDescriptor descriptor =
440 .set_name("grpc.io/server/sent_messages_per_rpc/minute")
441 .set_measure(kRpcServerSentMessagesPerRpcMeasureName)
442 .set_aggregation(CountDistributionAggregation())
443 .add_column(ServerMethodTagKey());
447 const ViewDescriptor& ServerReceivedMessagesPerRpcMinute() {
448 const static ViewDescriptor descriptor =
450 .set_name("grpc.io/server/received_messages_per_rpc/minute")
451 .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName)
452 .set_aggregation(CountDistributionAggregation())
453 .add_column(ServerMethodTagKey());
458 const ViewDescriptor& ClientSentBytesPerRpcHour() {
459 const static ViewDescriptor descriptor =
461 .set_name("grpc.io/client/sent_bytes_per_rpc/hour")
462 .set_measure(kRpcClientSentBytesPerRpcMeasureName)
463 .set_aggregation(BytesDistributionAggregation())
464 .add_column(ClientMethodTagKey());
468 const ViewDescriptor& ClientReceivedBytesPerRpcHour() {
469 const static ViewDescriptor descriptor =
471 .set_name("grpc.io/client/received_bytes_per_rpc/hour")
472 .set_measure(kRpcClientReceivedBytesPerRpcMeasureName)
473 .set_aggregation(BytesDistributionAggregation())
474 .add_column(ClientMethodTagKey());
478 const ViewDescriptor& ClientRoundtripLatencyHour() {
479 const static ViewDescriptor descriptor =
481 .set_name("grpc.io/client/roundtrip_latency/hour")
482 .set_measure(kRpcClientRoundtripLatencyMeasureName)
483 .set_aggregation(MillisDistributionAggregation())
484 .add_column(ClientMethodTagKey());
488 const ViewDescriptor& ClientServerLatencyHour() {
489 const static ViewDescriptor descriptor =
491 .set_name("grpc.io/client/server_latency/hour")
492 .set_measure(kRpcClientServerLatencyMeasureName)
493 .set_aggregation(MillisDistributionAggregation())
494 .add_column(ClientMethodTagKey());
498 const ViewDescriptor& ClientCompletedRpcsHour() {
499 const static ViewDescriptor descriptor =
501 .set_name("grpc.io/client/completed_rpcs/hour")
502 .set_measure(kRpcClientRoundtripLatencyMeasureName)
503 .set_aggregation(Aggregation::Count())
504 .add_column(ClientMethodTagKey())
505 .add_column(ClientStatusTagKey());
509 const ViewDescriptor& ClientSentMessagesPerRpcHour() {
510 const static ViewDescriptor descriptor =
512 .set_name("grpc.io/client/sent_messages_per_rpc/hour")
513 .set_measure(kRpcClientSentMessagesPerRpcMeasureName)
514 .set_aggregation(CountDistributionAggregation())
515 .add_column(ClientMethodTagKey());
519 const ViewDescriptor& ClientReceivedMessagesPerRpcHour() {
520 const static ViewDescriptor descriptor =
522 .set_name("grpc.io/client/received_messages_per_rpc/hour")
523 .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName)
524 .set_aggregation(CountDistributionAggregation())
525 .add_column(ClientMethodTagKey());
529 const ViewDescriptor& ClientRetriesPerCallHour() {
530 const static ViewDescriptor descriptor =
532 .set_name("grpc.io/client/retries_per_call/hour")
533 .set_measure(kRpcClientRetriesPerCallMeasureName)
534 .set_aggregation(CountDistributionAggregation())
535 .add_column(ClientMethodTagKey());
539 const ViewDescriptor& ClientRetriesHour() {
540 const static ViewDescriptor descriptor =
542 .set_name("grpc.io/client/retries/hour")
543 .set_measure(kRpcClientRetriesPerCallMeasureName)
544 .set_aggregation(Aggregation::Sum())
545 .add_column(ClientMethodTagKey());
549 const ViewDescriptor& ClientTransparentRetriesPerCallHour() {
550 const static ViewDescriptor descriptor =
552 .set_name("grpc.io/client/transparent_retries_per_call/hour")
553 .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
554 .set_aggregation(CountDistributionAggregation())
555 .add_column(ClientMethodTagKey());
559 const ViewDescriptor& ClientTransparentRetriesHour() {
560 const static ViewDescriptor descriptor =
562 .set_name("grpc.io/client/transparent_retries/hour")
563 .set_measure(kRpcClientTransparentRetriesPerCallMeasureName)
564 .set_aggregation(Aggregation::Sum())
565 .add_column(ClientMethodTagKey());
569 const ViewDescriptor& ClientRetryDelayPerCallHour() {
570 const static ViewDescriptor descriptor =
572 .set_name("grpc.io/client/retry_delay_per_call/hour")
573 .set_measure(kRpcClientRetryDelayPerCallMeasureName)
574 .set_aggregation(MillisDistributionAggregation())
575 .add_column(ClientMethodTagKey());
580 const ViewDescriptor& ServerSentBytesPerRpcHour() {
581 const static ViewDescriptor descriptor =
583 .set_name("grpc.io/server/sent_bytes_per_rpc/hour")
584 .set_measure(kRpcServerSentBytesPerRpcMeasureName)
585 .set_aggregation(BytesDistributionAggregation())
586 .add_column(ServerMethodTagKey());
590 const ViewDescriptor& ServerReceivedBytesPerRpcHour() {
591 const static ViewDescriptor descriptor =
593 .set_name("grpc.io/server/received_bytes_per_rpc/hour")
594 .set_measure(kRpcServerReceivedBytesPerRpcMeasureName)
595 .set_aggregation(BytesDistributionAggregation())
596 .add_column(ServerMethodTagKey());
600 const ViewDescriptor& ServerServerLatencyHour() {
601 const static ViewDescriptor descriptor =
603 .set_name("grpc.io/server/server_latency/hour")
604 .set_measure(kRpcServerServerLatencyMeasureName)
605 .set_aggregation(MillisDistributionAggregation())
606 .add_column(ServerMethodTagKey());
610 const ViewDescriptor& ServerCompletedRpcsHour() {
611 const static ViewDescriptor descriptor =
613 .set_name("grpc.io/server/completed_rpcs/hour")
614 .set_measure(kRpcServerServerLatencyMeasureName)
615 .set_aggregation(Aggregation::Count())
616 .add_column(ServerMethodTagKey())
617 .add_column(ServerStatusTagKey());
621 const ViewDescriptor& ServerSentMessagesPerRpcHour() {
622 const static ViewDescriptor descriptor =
624 .set_name("grpc.io/server/sent_messages_per_rpc/hour")
625 .set_measure(kRpcServerSentMessagesPerRpcMeasureName)
626 .set_aggregation(CountDistributionAggregation())
627 .add_column(ServerMethodTagKey());
631 const ViewDescriptor& ServerReceivedMessagesPerRpcHour() {
632 const static ViewDescriptor descriptor =
634 .set_name("grpc.io/server/received_messages_per_rpc/hour")
635 .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName)
636 .set_aggregation(CountDistributionAggregation())
637 .add_column(ServerMethodTagKey());