aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/channel/channelz.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/lib/channel/channelz.cc')
-rw-r--r--src/core/lib/channel/channelz.cc89
1 files changed, 26 insertions, 63 deletions
diff --git a/src/core/lib/channel/channelz.cc b/src/core/lib/channel/channelz.cc
index 7fe086da3c..d7f2d6a9a2 100644
--- a/src/core/lib/channel/channelz.cc
+++ b/src/core/lib/channel/channelz.cc
@@ -41,21 +41,30 @@
namespace grpc_core {
namespace channelz {
-CallCountingBase::CallCountingBase(size_t channel_tracer_max_nodes) {
+char* BaseNode::RenderJsonString() {
+ grpc_json* json = RenderJson();
+ char* json_str = grpc_json_dump_to_string(json, 0);
+ grpc_json_destroy(json);
+ return json_str;
+}
+
+CallCountingAndTracingNode::CallCountingAndTracingNode(
+ EntityType type, size_t channel_tracer_max_nodes)
+ : BaseNode(type) {
trace_.Init(channel_tracer_max_nodes);
gpr_atm_no_barrier_store(&last_call_started_millis_,
(gpr_atm)ExecCtx::Get()->Now());
}
-CallCountingBase::~CallCountingBase() { trace_.Destroy(); }
+CallCountingAndTracingNode::~CallCountingAndTracingNode() { trace_.Destroy(); }
-void CallCountingBase::RecordCallStarted() {
+void CallCountingAndTracingNode::RecordCallStarted() {
gpr_atm_no_barrier_fetch_add(&calls_started_, (gpr_atm)1);
gpr_atm_no_barrier_store(&last_call_started_millis_,
(gpr_atm)ExecCtx::Get()->Now());
}
-void CallCountingBase::PopulateTrace(grpc_json* json) {
+void CallCountingAndTracingNode::PopulateTrace(grpc_json* json) {
// fill in the channel trace if applicable
grpc_json* trace_json = trace_->RenderJson();
if (trace_json != nullptr) {
@@ -66,7 +75,7 @@ void CallCountingBase::PopulateTrace(grpc_json* json) {
}
}
-void CallCountingBase::PopulateCallData(grpc_json* json) {
+void CallCountingAndTracingNode::PopulateCallData(grpc_json* json) {
grpc_json* json_iterator = nullptr;
if (calls_started_ != 0) {
json_iterator = grpc_json_add_number_string_child(
@@ -87,31 +96,18 @@ void CallCountingBase::PopulateCallData(grpc_json* json) {
gpr_format_timespec(ts), GRPC_JSON_STRING, true);
}
-char* CallCountingBase::RenderJsonString() {
- grpc_json* json = RenderJson();
- char* json_str = grpc_json_dump_to_string(json, 0);
- grpc_json_destroy(json);
- return json_str;
-}
-
ChannelNode::ChannelNode(grpc_channel* channel, size_t channel_tracer_max_nodes,
bool is_top_level_channel)
- : CallCountingBase(channel_tracer_max_nodes),
+ : CallCountingAndTracingNode(is_top_level_channel
+ ? EntityType::kTopLevelChannel
+ : EntityType::kInternalChannel,
+ channel_tracer_max_nodes),
channel_(channel),
- is_top_level_channel_(is_top_level_channel) {
- target_ = UniquePtr<char>(grpc_channel_get_target(channel_));
- channel_uuid_ = ChannelzRegistry::RegisterChannelNode(this);
+ target_(UniquePtr<char>(grpc_channel_get_target(channel_))) {
+ channel_uuid_ = ChannelzRegistry::Register(this);
}
-ChannelNode::~ChannelNode() {
- ChannelzRegistry::UnregisterChannelNode(channel_uuid_);
-}
-
-void ChannelNode::PopulateTarget(grpc_json* json) {
- GPR_ASSERT(target_.get() != nullptr);
- grpc_json_create_child(nullptr, json, "target", target_.get(),
- GRPC_JSON_STRING, false);
-}
+ChannelNode::~ChannelNode() { ChannelzRegistry::Unregister(channel_uuid_); }
grpc_json* ChannelNode::RenderJson() {
// We need to track these three json objects to build our object
@@ -133,11 +129,13 @@ grpc_json* ChannelNode::RenderJson() {
GRPC_JSON_OBJECT, false);
json = data;
json_iterator = nullptr;
- PopulateConnectivityState(json);
- PopulateTarget(json);
+ // populate the target.
+ GPR_ASSERT(target_.get() != nullptr);
+ grpc_json_create_child(nullptr, json, "target", target_.get(),
+ GRPC_JSON_STRING, false);
+ // as CallCountingAndTracingNode to populate trace and call count data.
PopulateTrace(json);
PopulateCallData(json);
- PopulateChildRefs(json);
return top_level_json;
}
@@ -148,40 +146,5 @@ RefCountedPtr<ChannelNode> ChannelNode::MakeChannelNode(
channel, channel_tracer_max_nodes, is_top_level_channel);
}
-SubchannelNode::SubchannelNode(size_t channel_tracer_max_nodes)
- : CallCountingBase(channel_tracer_max_nodes) {
- subchannel_uuid_ = ChannelzRegistry::RegisterSubchannelNode(this);
-}
-
-SubchannelNode::~SubchannelNode() {
- ChannelzRegistry::UnregisterSubchannelNode(subchannel_uuid_);
-}
-
-grpc_json* SubchannelNode::RenderJson() {
- grpc_json* top_level_json = grpc_json_create(GRPC_JSON_OBJECT);
- grpc_json* json = top_level_json;
- grpc_json* json_iterator = nullptr;
- json_iterator = grpc_json_create_child(json_iterator, json, "ref", nullptr,
- GRPC_JSON_OBJECT, false);
- json = json_iterator;
- json_iterator = nullptr;
- json_iterator = grpc_json_add_number_string_child(
- json, json_iterator, "subchannelId", subchannel_uuid_);
- // reset json iterators to top level object
- json = top_level_json;
- json_iterator = nullptr;
- // create and fill the data child.
- grpc_json* data = grpc_json_create_child(json_iterator, json, "data", nullptr,
- GRPC_JSON_OBJECT, false);
- json = data;
- json_iterator = nullptr;
- PopulateConnectivityState(json);
- PopulateTarget(json);
- PopulateTrace(json);
- PopulateCallData(json);
- PopulateChildRefs(json);
- return top_level_json;
-}
-
} // namespace channelz
} // namespace grpc_core