19 #ifndef GRPC_CORE_LIB_CHANNEL_CHANNELZ_H
20 #define GRPC_CORE_LIB_CHANNEL_CHANNELZ_H
29 #include "absl/container/inlined_vector.h"
30 #include "absl/types/optional.h"
44 #define GRPC_ARG_CHANNELZ_CHANNEL_NODE "grpc.channelz_channel_node"
47 #define GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL \
48 "grpc.channelz_is_internal_channel"
52 #define GRPC_ENABLE_CHANNELZ_DEFAULT true
58 #define GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT (1024 * 4)
65 class ListenSocketNode;
68 class CallCountingHelperPeer;
69 class ChannelNodePeer;
100 intptr_t
uuid()
const {
return uuid_; }
101 const std::string&
name()
const {
return name_; }
133 struct AtomicCounterData {
135 AtomicCounterData() =
default;
136 AtomicCounterData(
const AtomicCounterData& that)
140 last_call_started_cycle(
145 Atomic<int64_t> calls_failed{0};
146 Atomic<gpr_cycle_counter> last_call_started_cycle{0};
149 sizeof(Atomic<gpr_cycle_counter>)];
159 int64_t calls_started = 0;
160 int64_t calls_succeeded = 0;
161 int64_t calls_failed = 0;
162 gpr_cycle_counter last_call_started_cycle = 0;
166 void CollectData(CounterData* out);
169 absl::InlinedVector<AtomicCounterData, 1> per_cpu_counter_data_storage_;
170 size_t num_cores_ = 0;
176 ChannelNode(std::string target,
size_t channel_tracer_max_nodes,
177 bool is_internal_channel);
193 std::move(referenced_channel));
226 std::set<intptr_t> child_channels_;
227 std::set<intptr_t> child_subchannels_;
233 explicit ServerNode(
size_t channel_tracer_max_nodes);
240 intptr_t max_results);
258 std::move(referenced_channel));
268 std::map<intptr_t, RefCountedPtr<SocketNode>> child_sockets_;
269 std::map<intptr_t, RefCountedPtr<ListenSocketNode>> child_listen_sockets_;
272 #define GRPC_ARG_CHANNELZ_SECURITY "grpc.internal.channelz_security"
324 const std::string&
remote() {
return remote_; }
329 Atomic<int64_t> streams_failed_{0};
330 Atomic<int64_t> messages_sent_{0};
331 Atomic<int64_t> messages_received_{0};
332 Atomic<int64_t> keepalives_sent_{0};
333 Atomic<gpr_cycle_counter> last_local_stream_created_cycle_{0};
334 Atomic<gpr_cycle_counter> last_remote_stream_created_cycle_{0};
335 Atomic<gpr_cycle_counter> last_message_sent_cycle_{0};
336 Atomic<gpr_cycle_counter> last_message_received_cycle_{0};
339 RefCountedPtr<Security>
const security_;
351 std::string local_addr_;
T FetchAdd(Arg arg, MemoryOrder order=MemoryOrder::SEQ_CST)
Definition: atomic.h:71
std::map< std::string, Json > Object
Definition: json.h:55
Definition: ref_counted.h:282
Definition: ref_counted_ptr.h:35
Definition: channelz.h:73
intptr_t uuid() const
Definition: channelz.h:100
EntityType
Definition: channelz.h:78
~BaseNode() override
Definition: channelz.cc:67
EntityType type() const
Definition: channelz.h:99
const std::string & name() const
Definition: channelz.h:101
BaseNode(EntityType type, std::string name)
Definition: channelz.cc:61
std::string RenderJsonString()
Definition: channelz.cc:69
virtual Json RenderJson()=0
Definition: channelz.h:117
CallCountingHelper()
Definition: channelz.cc:78
friend class testing::CallCountingHelperPeer
Definition: channelz.h:130
void RecordCallSucceeded()
Definition: channelz.cc:99
void PopulateCallCounts(Json::Object *json)
Definition: channelz.cc:123
void RecordCallFailed()
Definition: channelz.cc:94
void RecordCallStarted()
Definition: channelz.cc:86
Definition: channelz.h:174
void RemoveChildChannel(intptr_t child_uuid)
Definition: channelz.cc:238
Json RenderJson() override
Definition: channelz.cc:170
void RemoveChildSubchannel(intptr_t child_uuid)
Definition: channelz.cc:248
void AddChildSubchannel(intptr_t child_uuid)
Definition: channelz.cc:243
void RecordCallStarted()
Definition: channelz.h:195
void AddTraceEventWithReference(ChannelTrace::Severity severity, const grpc_slice &data, RefCountedPtr< BaseNode > referenced_channel)
Definition: channelz.h:189
friend class testing::ChannelNodePeer
Definition: channelz.h:213
static const char * GetChannelConnectivityStateChangeString(grpc_connectivity_state state)
Definition: channelz.cc:153
ChannelNode(std::string target, size_t channel_tracer_max_nodes, bool is_internal_channel)
Definition: channelz.cc:145
void RecordCallFailed()
Definition: channelz.h:196
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice &data)
Definition: channelz.h:186
void RecordCallSucceeded()
Definition: channelz.h:197
void AddChildChannel(intptr_t child_uuid)
Definition: channelz.cc:233
void SetConnectivityState(grpc_connectivity_state state)
Definition: channelz.cc:227
Definition: channel_trace.h:42
Severity
Definition: channel_trace.h:47
void AddTraceEventWithReference(Severity severity, const grpc_slice &data, RefCountedPtr< BaseNode > referenced_entity)
Definition: channel_trace.cc:120
void AddTraceEvent(Severity severity, const grpc_slice &data)
Definition: channel_trace.cc:112
Definition: channelz_registry.h:38
Definition: channelz.h:343
Json RenderJson() override
Definition: channelz.cc:579
~ListenSocketNode() override
Definition: channelz.h:346
ListenSocketNode(std::string local_addr, std::string name)
Definition: channelz.cc:575
Definition: channelz.h:231
std::string RenderServerSockets(intptr_t start_socket_id, intptr_t max_results)
Definition: channelz.cc:282
void AddChildSocket(RefCountedPtr< SocketNode > node)
Definition: channelz.cc:262
ServerNode(size_t channel_tracer_max_nodes)
Definition: channelz.cc:257
Json RenderJson() override
Definition: channelz.cc:309
void RemoveChildSocket(intptr_t child_uuid)
Definition: channelz.cc:267
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice &data)
Definition: channelz.h:251
void RemoveChildListenSocket(intptr_t child_uuid)
Definition: channelz.cc:277
void RecordCallFailed()
Definition: channelz.h:261
void AddTraceEventWithReference(ChannelTrace::Severity severity, const grpc_slice &data, RefCountedPtr< BaseNode > referenced_channel)
Definition: channelz.h:254
void RecordCallSucceeded()
Definition: channelz.h:262
~ServerNode() override
Definition: channelz.cc:260
void RecordCallStarted()
Definition: channelz.h:260
void AddChildListenSocket(RefCountedPtr< ListenSocketNode > node)
Definition: channelz.cc:272
Definition: channelz.h:275
void RecordMessageReceived()
Definition: channelz.cc:493
void RecordStreamSucceeded()
Definition: channelz.h:312
void RecordStreamFailed()
Definition: channelz.h:315
Json RenderJson() override
Definition: channelz.cc:499
void RecordStreamStartedFromRemote()
Definition: channelz.cc:482
void RecordStreamStartedFromLocal()
Definition: channelz.cc:476
const std::string & remote()
Definition: channelz.h:324
void RecordMessagesSent(uint32_t num_sent)
Definition: channelz.cc:488
SocketNode(std::string local, std::string remote, std::string name, RefCountedPtr< Security > security)
Definition: channelz.cc:469
void RecordKeepaliveSent()
Definition: channelz.h:320
~SocketNode() override
Definition: channelz.h:306
grpc_connectivity_state
Connectivity state of a channel.
Definition: connectivity_state.h:27
Round Robin Policy.
Definition: backend_metric.cc:26
MemoryOrder
Definition: atomic.h:30
A single argument...
Definition: grpc_types.h:103
An array of arguments that can be passed around.
Definition: grpc_types.h:132
Definition: channelz.h:278
NameType type
Definition: channelz.h:283
Json RenderJson()
Definition: channelz.cc:347
NameType
Definition: channelz.h:282
std::string local_certificate
Definition: channelz.h:286
std::string name
Definition: channelz.h:285
Tls()
Definition: channelz.h:280
std::string remote_certificate
Definition: channelz.h:287
Definition: channelz.h:277
ModelType type
Definition: channelz.h:292
absl::optional< Tls > tls
Definition: channelz.h:293
static RefCountedPtr< Security > GetFromChannelArgs(const grpc_channel_args *args)
Definition: channelz.cc:413
Json RenderJson()
Definition: channelz.cc:367
grpc_arg MakeChannelArg() const
Definition: channelz.cc:407
ModelType
Definition: channelz.h:291
absl::optional< Json > other
Definition: channelz.h:294
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1].
Definition: slice.h:60