/* * * Copyright 2018 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include #include "absl/time/time.h" #include "opencensus/stats/internal/aggregation_window.h" #include "opencensus/stats/internal/set_aggregation_window.h" #include "opencensus/stats/stats.h" #include "src/cpp/ext/filters/census/grpc_plugin.h" namespace grpc { using ::opencensus::stats::Aggregation; using ::opencensus::stats::AggregationWindow; using ::opencensus::stats::BucketBoundaries; using ::opencensus::stats::ViewDescriptor; // These measure definitions should be kept in sync across opencensus // implementations. namespace { Aggregation BytesDistributionAggregation() { return Aggregation::Distribution(BucketBoundaries::Explicit( {0, 1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864, 268435456, 1073741824, 4294967296})); } Aggregation MillisDistributionAggregation() { return Aggregation::Distribution(BucketBoundaries::Explicit( {0, 0.01, 0.05, 0.1, 0.3, 0.6, 0.8, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000})); } Aggregation CountDistributionAggregation() { return Aggregation::Distribution(BucketBoundaries::Exponential(17, 1.0, 2.0)); } ViewDescriptor MinuteDescriptor() { auto descriptor = ViewDescriptor(); SetAggregationWindow(AggregationWindow::Interval(absl::Minutes(1)), &descriptor); return descriptor; } ViewDescriptor HourDescriptor() { auto descriptor = ViewDescriptor(); SetAggregationWindow(AggregationWindow::Interval(absl::Hours(1)), &descriptor); return descriptor; } } // namespace void RegisterOpenCensusViewsForExport() { ClientSentMessagesPerRpcCumulative().RegisterForExport(); ClientSentBytesPerRpcCumulative().RegisterForExport(); ClientReceivedMessagesPerRpcCumulative().RegisterForExport(); ClientReceivedBytesPerRpcCumulative().RegisterForExport(); ClientRoundtripLatencyCumulative().RegisterForExport(); ClientServerLatencyCumulative().RegisterForExport(); ServerSentMessagesPerRpcCumulative().RegisterForExport(); ServerSentBytesPerRpcCumulative().RegisterForExport(); ServerReceivedMessagesPerRpcCumulative().RegisterForExport(); ServerReceivedBytesPerRpcCumulative().RegisterForExport(); ServerServerLatencyCumulative().RegisterForExport(); } // client cumulative const ViewDescriptor& ClientSentBytesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/sent_bytes_per_rpc/cumulative") .set_measure(kRpcClientSentBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientReceivedBytesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/received_bytes_per_rpc/cumulative") .set_measure(kRpcClientReceivedBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRoundtripLatencyCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/roundtrip_latency/cumulative") .set_measure(kRpcClientRoundtripLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientServerLatencyCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/server_latency/cumulative") .set_measure(kRpcClientServerLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientCompletedRpcsCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/completed_rpcs/cumulative") .set_measure(kRpcClientRoundtripLatencyMeasureName) .set_aggregation(Aggregation::Count()) .add_column(ClientMethodTagKey()) .add_column(ClientStatusTagKey()); return descriptor; } const ViewDescriptor& ClientSentMessagesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/received_messages_per_rpc/cumulative") .set_measure(kRpcClientSentMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientReceivedMessagesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/sent_messages_per_rpc/cumulative") .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetriesPerCallCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/retries_per_call/cumulative") .set_measure(kRpcClientRetriesPerCallMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetriesCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/retries/cumulative") .set_measure(kRpcClientRetriesPerCallMeasureName) .set_aggregation(Aggregation::Sum()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientTransparentRetriesPerCallCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/transparent_retries_per_call/cumulative") .set_measure(kRpcClientTransparentRetriesPerCallMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientTransparentRetriesCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/transparent_retries/cumulative") .set_measure(kRpcClientTransparentRetriesPerCallMeasureName) .set_aggregation(Aggregation::Sum()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetryDelayPerCallCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/client/retry_delay_per_call/cumulative") .set_measure(kRpcClientRetryDelayPerCallMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } // server cumulative const ViewDescriptor& ServerSentBytesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/server/received_bytes_per_rpc/cumulative") .set_measure(kRpcServerSentBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerReceivedBytesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/server/sent_bytes_per_rpc/cumulative") .set_measure(kRpcServerReceivedBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerServerLatencyCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/server/elapsed_time/cumulative") .set_measure(kRpcServerServerLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerCompletedRpcsCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/server/completed_rpcs/cumulative") .set_measure(kRpcServerServerLatencyMeasureName) .set_aggregation(Aggregation::Count()) .add_column(ServerMethodTagKey()) .add_column(ServerStatusTagKey()); return descriptor; } const ViewDescriptor& ServerSentMessagesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/server/received_messages_per_rpc/cumulative") .set_measure(kRpcServerSentMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerReceivedMessagesPerRpcCumulative() { const static ViewDescriptor descriptor = ViewDescriptor() .set_name("grpc.io/server/sent_messages_per_rpc/cumulative") .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } // client minute const ViewDescriptor& ClientSentBytesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/sent_bytes_per_rpc/minute") .set_measure(kRpcClientSentBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientReceivedBytesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/received_bytes_per_rpc/minute") .set_measure(kRpcClientReceivedBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRoundtripLatencyMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/roundtrip_latency/minute") .set_measure(kRpcClientRoundtripLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientServerLatencyMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/server_latency/minute") .set_measure(kRpcClientServerLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientCompletedRpcsMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/completed_rpcs/minute") .set_measure(kRpcClientRoundtripLatencyMeasureName) .set_aggregation(Aggregation::Count()) .add_column(ClientMethodTagKey()) .add_column(ClientStatusTagKey()); return descriptor; } const ViewDescriptor& ClientSentMessagesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/sent_messages_per_rpc/minute") .set_measure(kRpcClientSentMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientReceivedMessagesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/received_messages_per_rpc/minute") .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetriesPerCallMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/retries_per_call/minute") .set_measure(kRpcClientRetriesPerCallMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetriesMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/retries/minute") .set_measure(kRpcClientRetriesPerCallMeasureName) .set_aggregation(Aggregation::Sum()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientTransparentRetriesPerCallMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/transparent_retries_per_call/minute") .set_measure(kRpcClientTransparentRetriesPerCallMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientTransparentRetriesMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/transparent_retries/minute") .set_measure(kRpcClientTransparentRetriesPerCallMeasureName) .set_aggregation(Aggregation::Sum()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetryDelayPerCallMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/client/retry_delay_per_call/minute") .set_measure(kRpcClientRetryDelayPerCallMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } // server minute const ViewDescriptor& ServerSentBytesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/server/sent_bytes_per_rpc/minute") .set_measure(kRpcServerSentBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerReceivedBytesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/server/received_bytes_per_rpc/minute") .set_measure(kRpcServerReceivedBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerServerLatencyMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/server/server_latency/minute") .set_measure(kRpcServerServerLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerCompletedRpcsMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/server/completed_rpcs/minute") .set_measure(kRpcServerServerLatencyMeasureName) .set_aggregation(Aggregation::Count()) .add_column(ServerMethodTagKey()) .add_column(ServerStatusTagKey()); return descriptor; } const ViewDescriptor& ServerSentMessagesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/server/sent_messages_per_rpc/minute") .set_measure(kRpcServerSentMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerReceivedMessagesPerRpcMinute() { const static ViewDescriptor descriptor = MinuteDescriptor() .set_name("grpc.io/server/received_messages_per_rpc/minute") .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } // client hour const ViewDescriptor& ClientSentBytesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/sent_bytes_per_rpc/hour") .set_measure(kRpcClientSentBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientReceivedBytesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/received_bytes_per_rpc/hour") .set_measure(kRpcClientReceivedBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRoundtripLatencyHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/roundtrip_latency/hour") .set_measure(kRpcClientRoundtripLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientServerLatencyHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/server_latency/hour") .set_measure(kRpcClientServerLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientCompletedRpcsHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/completed_rpcs/hour") .set_measure(kRpcClientRoundtripLatencyMeasureName) .set_aggregation(Aggregation::Count()) .add_column(ClientMethodTagKey()) .add_column(ClientStatusTagKey()); return descriptor; } const ViewDescriptor& ClientSentMessagesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/sent_messages_per_rpc/hour") .set_measure(kRpcClientSentMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientReceivedMessagesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/received_messages_per_rpc/hour") .set_measure(kRpcClientReceivedMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetriesPerCallHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/retries_per_call/hour") .set_measure(kRpcClientRetriesPerCallMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetriesHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/retries/hour") .set_measure(kRpcClientRetriesPerCallMeasureName) .set_aggregation(Aggregation::Sum()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientTransparentRetriesPerCallHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/transparent_retries_per_call/hour") .set_measure(kRpcClientTransparentRetriesPerCallMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientTransparentRetriesHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/transparent_retries/hour") .set_measure(kRpcClientTransparentRetriesPerCallMeasureName) .set_aggregation(Aggregation::Sum()) .add_column(ClientMethodTagKey()); return descriptor; } const ViewDescriptor& ClientRetryDelayPerCallHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/client/retry_delay_per_call/hour") .set_measure(kRpcClientRetryDelayPerCallMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ClientMethodTagKey()); return descriptor; } // server hour const ViewDescriptor& ServerSentBytesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/server/sent_bytes_per_rpc/hour") .set_measure(kRpcServerSentBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerReceivedBytesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/server/received_bytes_per_rpc/hour") .set_measure(kRpcServerReceivedBytesPerRpcMeasureName) .set_aggregation(BytesDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerServerLatencyHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/server/server_latency/hour") .set_measure(kRpcServerServerLatencyMeasureName) .set_aggregation(MillisDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerCompletedRpcsHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/server/completed_rpcs/hour") .set_measure(kRpcServerServerLatencyMeasureName) .set_aggregation(Aggregation::Count()) .add_column(ServerMethodTagKey()) .add_column(ServerStatusTagKey()); return descriptor; } const ViewDescriptor& ServerSentMessagesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/server/sent_messages_per_rpc/hour") .set_measure(kRpcServerSentMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } const ViewDescriptor& ServerReceivedMessagesPerRpcHour() { const static ViewDescriptor descriptor = HourDescriptor() .set_name("grpc.io/server/received_messages_per_rpc/hour") .set_measure(kRpcServerReceivedMessagesPerRpcMeasureName) .set_aggregation(CountDistributionAggregation()) .add_column(ServerMethodTagKey()); return descriptor; } } // namespace grpc