blob: 2c0c5f72950f0428290cfd200ca36eb364c70fee [file] [log] [blame]
/*
*
* 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 <grpc/support/port_platform.h>
#include "src/cpp/ext/filters/census/grpc_plugin.h"
#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"
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;
}
// 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;
}
// 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;
}
// 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