context.cc
Go to the documentation of this file.
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 
20 
22 
23 #include <new>
24 
25 #include "opencensus/tags/context_util.h"
26 #include "opencensus/trace/context_util.h"
27 #include "opencensus/trace/propagation/grpc_trace_bin.h"
28 
31 
32 namespace grpc {
33 
34 using ::opencensus::tags::TagMap;
36 using ::opencensus::trace::SpanContext;
37 
40  // Destruct the current CensusContext to free the Span memory before
41  // overwriting it below.
42  context->~CensusContext();
43  SpanContext parent_ctx =
44  opencensus::trace::propagation::FromGrpcTraceBinHeader(tracing);
45  if (parent_ctx.IsValid()) {
46  new (context) CensusContext(method, parent_ctx);
47  return;
48  }
49  new (context) CensusContext(method, TagMap{});
50 }
51 
53  CensusContext* parent_ctxt) {
54  // Destruct the current CensusContext to free the Span memory before
55  // overwriting it below.
56  ctxt->~CensusContext();
57  if (parent_ctxt != nullptr) {
58  SpanContext span_ctxt = parent_ctxt->Context();
59  Span span = parent_ctxt->Span();
60  if (span_ctxt.IsValid()) {
61  new (ctxt) CensusContext(method, &span, TagMap{});
62  return;
63  }
64  }
65  const Span& span = opencensus::trace::GetCurrentSpan();
66  const TagMap& tags = opencensus::tags::GetCurrentTagMap();
67  if (span.context().IsValid()) {
68  // Create span with parent.
69  new (ctxt) CensusContext(method, &span, tags);
70  return;
71  }
72  // Create span without parent.
73  new (ctxt) CensusContext(method, tags);
74 }
75 
76 size_t TraceContextSerialize(const ::opencensus::trace::SpanContext& context,
77  char* tracing_buf, size_t tracing_buf_size) {
78  if (tracing_buf_size <
79  opencensus::trace::propagation::kGrpcTraceBinHeaderLen) {
80  return 0;
81  }
82  opencensus::trace::propagation::ToGrpcTraceBinHeader(
83  context, reinterpret_cast<uint8_t*>(tracing_buf));
84  return opencensus::trace::propagation::kGrpcTraceBinHeaderLen;
85 }
86 
87 size_t StatsContextSerialize(size_t /*max_tags_len*/, grpc_slice* /*tags*/) {
88  // TODO(unknown): Add implementation. Waiting on stats tagging to be added.
89  return 0;
90 }
91 
92 size_t ServerStatsSerialize(uint64_t server_elapsed_time, char* buf,
93  size_t buf_size) {
94  return RpcServerStatsEncoding::Encode(server_elapsed_time, buf, buf_size);
95 }
96 
97 size_t ServerStatsDeserialize(const char* buf, size_t buf_size,
98  uint64_t* server_elapsed_time) {
100  server_elapsed_time);
101 }
102 
104  return final_info->stats.transport_stream_stats.incoming.data_bytes;
105 }
106 
108  return final_info->stats.transport_stream_stats.outgoing.data_bytes;
109 }
110 
112  return reinterpret_cast<const CensusContext*>(ctxt)->Context();
113 }
114 
116  return reinterpret_cast<const CensusContext*>(ctxt)->Span();
117 }
118 
120  switch (code) {
121  case GRPC_STATUS_OK:
122  return "OK";
124  return "CANCELLED";
125  case GRPC_STATUS_UNKNOWN:
126  return "UNKNOWN";
128  return "INVALID_ARGUMENT";
130  return "DEADLINE_EXCEEDED";
132  return "NOT_FOUND";
134  return "ALREADY_EXISTS";
136  return "PERMISSION_DENIED";
138  return "UNAUTHENTICATED";
140  return "RESOURCE_EXHAUSTED";
142  return "FAILED_PRECONDITION";
143  case GRPC_STATUS_ABORTED:
144  return "ABORTED";
146  return "OUT_OF_RANGE";
148  return "UNIMPLEMENTED";
150  return "INTERNAL";
152  return "UNAVAILABLE";
154  return "DATA_LOSS";
155  default:
156  // gRPC wants users of this enum to include a default branch so that
157  // adding values is not a breaking change.
158  return "UNKNOWN_STATUS";
159  }
160 }
161 
162 } // namespace grpc
census_context
struct census_context census_context
Definition: census.h:34
opencensus.proto.trace.v1.trace_pb2.Span
Span
Definition: trace_pb2.py:1049
grpc::GetOutgoingDataSize
uint64_t GetOutgoingDataSize(const grpc_call_final_info *final_info)
Definition: context.cc:107
GRPC_STATUS_UNAVAILABLE
@ GRPC_STATUS_UNAVAILABLE
Definition: include/grpc/impl/codegen/status.h:143
GRPC_STATUS_UNAUTHENTICATED
@ GRPC_STATUS_UNAUTHENTICATED
Definition: include/grpc/impl/codegen/status.h:72
grpc
Definition: grpcpp/alarm.h:33
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
GRPC_STATUS_PERMISSION_DENIED
@ GRPC_STATUS_PERMISSION_DENIED
Definition: include/grpc/impl/codegen/status.h:68
grpc_transport_stream_stats::outgoing
grpc_transport_one_way_stats outgoing
Definition: transport.h:251
grpc_status_code
grpc_status_code
Definition: include/grpc/impl/codegen/status.h:28
GRPC_STATUS_NOT_FOUND
@ GRPC_STATUS_NOT_FOUND
Definition: include/grpc/impl/codegen/status.h:56
grpc_call_final_info::stats
grpc_call_stats stats
Definition: channel_stack.h:96
GRPC_STATUS_CANCELLED
@ GRPC_STATUS_CANCELLED
Definition: include/grpc/impl/codegen/status.h:33
GRPC_STATUS_DEADLINE_EXCEEDED
@ GRPC_STATUS_DEADLINE_EXCEEDED
Definition: include/grpc/impl/codegen/status.h:53
grpc::SpanContextFromCensusContext
SpanContext SpanContextFromCensusContext(const census_context *ctxt)
Definition: context.cc:111
rpc_encoding.h
GRPC_STATUS_INVALID_ARGUMENT
@ GRPC_STATUS_INVALID_ARGUMENT
Definition: include/grpc/impl/codegen/status.h:46
GRPC_STATUS_RESOURCE_EXHAUSTED
@ GRPC_STATUS_RESOURCE_EXHAUSTED
Definition: include/grpc/impl/codegen/status.h:76
grpc::CensusContext
Definition: cpp/ext/filters/census/context.h:44
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
grpc::RpcServerStatsEncoding::Encode
static size_t Encode(uint64_t time, char *buf, size_t buf_size)
Definition: rpc_encoding.h:70
grpc::RpcServerStatsEncoding::Decode
static size_t Decode(absl::string_view buf, uint64_t *time)
Definition: rpc_encoding.h:49
grpc::ServerStatsSerialize
size_t ServerStatsSerialize(uint64_t server_elapsed_time, char *buf, size_t buf_size)
Definition: context.cc:92
grpc::CensusContext::Context
::opencensus::trace::SpanContext Context() const
Definition: cpp/ext/filters/census/context.h:71
tags
bool tags[kAvailableTags]
Definition: inproc_callback_test.cc:114
grpc::ServerStatsDeserialize
size_t ServerStatsDeserialize(const char *buf, size_t buf_size, uint64_t *server_elapsed_time)
Definition: context.cc:97
GRPC_STATUS_OK
@ GRPC_STATUS_OK
Definition: include/grpc/impl/codegen/status.h:30
grpc_call_stats::transport_stream_stats
grpc_transport_stream_stats transport_stream_stats
Definition: channel_stack.h:91
grpc::GenerateServerContext
void GenerateServerContext(absl::string_view tracing, absl::string_view method, CensusContext *context)
Definition: context.cc:38
grpc::TraceContextSerialize
size_t TraceContextSerialize(const ::opencensus::trace::SpanContext &context, char *tracing_buf, size_t tracing_buf_size)
Definition: context.cc:76
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
grpc::SpanFromCensusContext
Span SpanFromCensusContext(const census_context *ctxt)
Definition: context.cc:115
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
grpc::GenerateClientContext
void GenerateClientContext(absl::string_view method, CensusContext *ctxt, CensusContext *parent_ctxt)
Definition: context.cc:52
grpc::StatusCodeToString
absl::string_view StatusCodeToString(grpc_status_code code)
Definition: context.cc:119
grpc_transport_one_way_stats::data_bytes
uint64_t data_bytes
Definition: transport.h:245
GRPC_STATUS_ALREADY_EXISTS
@ GRPC_STATUS_ALREADY_EXISTS
Definition: include/grpc/impl/codegen/status.h:60
GRPC_STATUS_DATA_LOSS
@ GRPC_STATUS_DATA_LOSS
Definition: include/grpc/impl/codegen/status.h:146
Span
Definition: boringssl-with-bazel/src/include/openssl/span.h:32
GRPC_STATUS_OUT_OF_RANGE
@ GRPC_STATUS_OUT_OF_RANGE
Definition: include/grpc/impl/codegen/status.h:121
grpc_transport_stream_stats::incoming
grpc_transport_one_way_stats incoming
Definition: transport.h:250
GRPC_STATUS_ABORTED
@ GRPC_STATUS_ABORTED
Definition: include/grpc/impl/codegen/status.h:104
grpc::GetIncomingDataSize
uint64_t GetIncomingDataSize(const grpc_call_final_info *final_info)
Definition: context.cc:103
transport.h
GRPC_STATUS_UNIMPLEMENTED
@ GRPC_STATUS_UNIMPLEMENTED
Definition: include/grpc/impl/codegen/status.h:124
GRPC_STATUS_FAILED_PRECONDITION
@ GRPC_STATUS_FAILED_PRECONDITION
Definition: include/grpc/impl/codegen/status.h:97
GRPC_STATUS_INTERNAL
@ GRPC_STATUS_INTERNAL
Definition: include/grpc/impl/codegen/status.h:129
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
grpc_call_final_info
Definition: channel_stack.h:95
grpc::StatsContextSerialize
size_t StatsContextSerialize(size_t, grpc_slice *)
Definition: context.cc:87
code
Definition: bloaty/third_party/zlib/contrib/infback9/inftree9.h:24
grpc::CensusContext::Span
const ::opencensus::trace::Span & Span() const
Definition: cpp/ext/filters/census/context.h:68
method
NSString * method
Definition: ProtoMethod.h:28
GRPC_STATUS_UNKNOWN
@ GRPC_STATUS_UNKNOWN
Definition: include/grpc/impl/codegen/status.h:40
context.h
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:55