|
|
|
/*
|
|
|
|
*
|
|
|
|
* Copyright 2019 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.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef GRPCPP_OPENCENSUS_H
|
|
|
|
#define GRPCPP_OPENCENSUS_H
|
|
|
|
|
|
|
|
#include "opencensus/stats/view_descriptor.h"
|
|
|
|
#include "opencensus/tags/tag_map.h"
|
|
|
|
#include "opencensus/trace/span.h"
|
|
|
|
#include "opencensus/trace/span_context.h"
|
|
|
|
|
|
|
|
namespace grpc {
|
|
|
|
class ServerContext;
|
|
|
|
// These symbols in this file will not be included in the binary unless
|
|
|
|
// grpc_opencensus_plugin build target was added as a dependency. At the moment
|
|
|
|
// it is only setup to be built with Bazel.
|
|
|
|
|
|
|
|
// Registers the OpenCensus plugin with gRPC, so that it will be used for future
|
|
|
|
// RPCs. This must be called before any views are created.
|
|
|
|
void RegisterOpenCensusPlugin();
|
|
|
|
|
|
|
|
// RPC stats definitions, defined by
|
|
|
|
// https://github.com/census-instrumentation/opencensus-specs/blob/master/stats/gRPC.md
|
|
|
|
|
|
|
|
// Registers the cumulative gRPC views so that they will be exported by any
|
|
|
|
// registered stats exporter. For on-task stats, construct a View using the
|
|
|
|
// ViewDescriptors below.
|
|
|
|
void RegisterOpenCensusViewsForExport();
|
|
|
|
|
|
|
|
// Returns the tracing Span for the current RPC.
|
|
|
|
::opencensus::trace::Span GetSpanFromServerContext(ServerContext* context);
|
|
|
|
|
|
|
|
namespace experimental {
|
|
|
|
|
|
|
|
// The tag keys set when recording RPC stats.
|
|
|
|
::opencensus::tags::TagKey ClientMethodTagKey();
|
|
|
|
::opencensus::tags::TagKey ClientStatusTagKey();
|
|
|
|
::opencensus::tags::TagKey ServerMethodTagKey();
|
|
|
|
::opencensus::tags::TagKey ServerStatusTagKey();
|
|
|
|
|
|
|
|
// Names of measures used by the plugin--users can create views on these
|
|
|
|
// measures but should not record data for them.
|
|
|
|
extern const absl::string_view kRpcClientSentMessagesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientSentBytesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientReceivedMessagesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientReceivedBytesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientRoundtripLatencyMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientServerLatencyMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientStartedRpcsMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientRetriesPerCallMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientTransparentRetriesPerCallMeasureName;
|
|
|
|
extern const absl::string_view kRpcClientRetryDelayPerCallMeasureName;
|
|
|
|
|
|
|
|
extern const absl::string_view kRpcServerSentMessagesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcServerSentBytesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcServerReceivedMessagesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcServerReceivedBytesPerRpcMeasureName;
|
|
|
|
extern const absl::string_view kRpcServerServerLatencyMeasureName;
|
|
|
|
extern const absl::string_view kRpcServerStartedRpcsMeasureName;
|
|
|
|
|
|
|
|
// Canonical gRPC view definitions.
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ClientReceivedMessagesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ClientReceivedBytesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientServerLatencyCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetriesCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ClientTransparentRetriesPerCallCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallCumulative();
|
|
|
|
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ServerReceivedBytesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerServerLatencyCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcCumulative();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ServerReceivedMessagesPerRpcCumulative();
|
|
|
|
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientServerLatencyMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetriesMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ClientTransparentRetriesPerCallMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallMinute();
|
|
|
|
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerServerLatencyMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsMinute();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsMinute();
|
|
|
|
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientSentMessagesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientSentBytesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientReceivedMessagesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientReceivedBytesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRoundtripLatencyHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientServerLatencyHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientStartedRpcsHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientCompletedRpcsHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetriesPerCallHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetriesHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor&
|
|
|
|
ClientTransparentRetriesPerCallHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientTransparentRetriesHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ClientRetryDelayPerCallHour();
|
|
|
|
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerSentMessagesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerSentBytesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerReceivedMessagesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerReceivedBytesPerRpcHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerServerLatencyHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerStartedRpcsHour();
|
|
|
|
const ::opencensus::stats::ViewDescriptor& ServerCompletedRpcsHour();
|
|
|
|
|
|
|
|
// Thread compatible.
|
|
|
|
class CensusContext {
|
|
|
|
public:
|
|
|
|
CensusContext() : span_(::opencensus::trace::Span::BlankSpan()), tags_({}) {}
|
|
|
|
|
|
|
|
explicit CensusContext(absl::string_view name,
|
|
|
|
const ::opencensus::tags::TagMap& tags)
|
|
|
|
: span_(::opencensus::trace::Span::StartSpan(name)), tags_(tags) {}
|
|
|
|
|
|
|
|
CensusContext(absl::string_view name, const ::opencensus::trace::Span* parent,
|
|
|
|
const ::opencensus::tags::TagMap& tags)
|
|
|
|
: span_(::opencensus::trace::Span::StartSpan(name, parent)),
|
|
|
|
tags_(tags) {}
|
|
|
|
|
|
|
|
CensusContext(absl::string_view name,
|
|
|
|
const ::opencensus::trace::SpanContext& parent_ctxt)
|
|
|
|
: span_(::opencensus::trace::Span::StartSpanWithRemoteParent(
|
|
|
|
name, parent_ctxt)),
|
|
|
|
tags_({}) {}
|
|
|
|
|
|
|
|
void AddSpanAttribute(absl::string_view key,
|
|
|
|
opencensus::trace::AttributeValueRef attribute) {
|
|
|
|
span_.AddAttribute(key, attribute);
|
|
|
|
}
|
|
|
|
|
|
|
|
const ::opencensus::trace::Span& Span() const { return span_; }
|
|
|
|
const ::opencensus::tags::TagMap& tags() const { return tags_; }
|
|
|
|
|
|
|
|
::opencensus::trace::SpanContext Context() const { return Span().context(); }
|
|
|
|
void EndSpan() { Span().End(); }
|
|
|
|
|
|
|
|
private:
|
|
|
|
::opencensus::trace::Span span_;
|
|
|
|
::opencensus::tags::TagMap tags_;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace experimental
|
|
|
|
|
|
|
|
} // namespace grpc
|
|
|
|
|
|
|
|
#endif // GRPCPP_OPENCENSUS_H
|