aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/filters
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ext/filters')
-rw-r--r--src/core/ext/filters/client_channel/client_channel_channelz.cc30
-rw-r--r--src/core/ext/filters/client_channel/client_channel_channelz.h11
-rw-r--r--src/core/ext/filters/client_channel/subchannel.cc4
3 files changed, 30 insertions, 15 deletions
diff --git a/src/core/ext/filters/client_channel/client_channel_channelz.cc b/src/core/ext/filters/client_channel/client_channel_channelz.cc
index f797ef1b09..7120ec57f1 100644
--- a/src/core/ext/filters/client_channel/client_channel_channelz.cc
+++ b/src/core/ext/filters/client_channel/client_channel_channelz.cc
@@ -123,9 +123,14 @@ grpc_json* ClientChannelNode::RenderJson() {
GPR_ASSERT(target_view() != nullptr);
grpc_json_create_child(nullptr, json, "target", target_view(),
GRPC_JSON_STRING, false);
- // as CallCountingAndTracingNode to populate trace and call count data.
- counter_and_tracer()->PopulateTrace(json);
- counter_and_tracer()->PopulateCallData(json);
+ // fill in the channel trace if applicable
+ grpc_json* trace_json = trace()->RenderJson();
+ if (trace_json != nullptr) {
+ trace_json->key = "trace"; // this object is named trace in channelz.proto
+ grpc_json_link_child(json, trace_json, nullptr);
+ }
+ // ask CallCountingHelper to populate trace and call count data.
+ call_counter()->PopulateCallData(json);
// reset to the top level
json = top_level_json;
PopulateChildRefs(json);
@@ -150,11 +155,12 @@ SubchannelNode::SubchannelNode(grpc_subchannel* subchannel,
size_t channel_tracer_max_nodes)
: BaseNode(EntityType::kSubchannel),
subchannel_(subchannel),
- target_(
- UniquePtr<char>(gpr_strdup(grpc_subchannel_get_target(subchannel_)))),
- counter_and_tracer_(channel_tracer_max_nodes) {}
+ target_(UniquePtr<char>(
+ gpr_strdup(grpc_subchannel_get_target(subchannel_)))) {
+ trace_.Init(channel_tracer_max_nodes);
+}
-SubchannelNode::~SubchannelNode() {}
+SubchannelNode::~SubchannelNode() { trace_.Destroy(); }
void SubchannelNode::PopulateConnectivityState(grpc_json* json) {
grpc_connectivity_state state;
@@ -192,8 +198,14 @@ grpc_json* SubchannelNode::RenderJson() {
GPR_ASSERT(target_.get() != nullptr);
grpc_json_create_child(nullptr, json, "target", target_.get(),
GRPC_JSON_STRING, false);
- counter_and_tracer_.PopulateTrace(json);
- counter_and_tracer_.PopulateCallData(json);
+ // fill in the channel trace if applicable
+ grpc_json* trace_json = trace_->RenderJson();
+ if (trace_json != nullptr) {
+ trace_json->key = "trace"; // this object is named trace in channelz.proto
+ grpc_json_link_child(json, trace_json, nullptr);
+ }
+ // ask CallCountingHelper to populate trace and call count data.
+ call_counter_.PopulateCallData(json);
return top_level_json;
}
diff --git a/src/core/ext/filters/client_channel/client_channel_channelz.h b/src/core/ext/filters/client_channel/client_channel_channelz.h
index f5344c049e..735ffacfd2 100644
--- a/src/core/ext/filters/client_channel/client_channel_channelz.h
+++ b/src/core/ext/filters/client_channel/client_channel_channelz.h
@@ -76,14 +76,17 @@ class SubchannelNode : public BaseNode {
grpc_json* RenderJson() override;
- CallCountingAndTracingNode* counter_and_tracer() {
- return &counter_and_tracer_;
- }
+ // proxy methods to composed classes.
+ ChannelTrace* trace() { return trace_.get(); }
+ void RecordCallStarted() { call_counter_.RecordCallStarted(); }
+ void RecordCallFailed() { call_counter_.RecordCallFailed(); }
+ void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); }
private:
grpc_subchannel* subchannel_;
UniquePtr<char> target_;
- CallCountingAndTracingNode counter_and_tracer_;
+ CallCountingHelper call_counter_;
+ ManualConstructor<ChannelTrace> trace_;
void PopulateConnectivityState(grpc_json* json);
};
diff --git a/src/core/ext/filters/client_channel/subchannel.cc b/src/core/ext/filters/client_channel/subchannel.cc
index d7b64a900f..f0f8d94ef4 100644
--- a/src/core/ext/filters/client_channel/subchannel.cc
+++ b/src/core/ext/filters/client_channel/subchannel.cc
@@ -183,7 +183,7 @@ static void connection_destroy(void* arg, grpc_error* error) {
static void subchannel_destroy(void* arg, grpc_error* error) {
grpc_subchannel* c = static_cast<grpc_subchannel*>(arg);
if (c->channelz_subchannel != nullptr) {
- c->channelz_subchannel->counter_and_tracer()->trace()->AddTraceEvent(
+ c->channelz_subchannel->trace()->AddTraceEvent(
grpc_core::channelz::ChannelTrace::Severity::Info,
grpc_slice_from_static_string("Subchannel destroyed"));
c->channelz_subchannel->MarkSubchannelDestroyed();
@@ -397,7 +397,7 @@ grpc_subchannel* grpc_subchannel_create(grpc_connector* connector,
c->channelz_subchannel =
grpc_core::MakeRefCounted<grpc_core::channelz::SubchannelNode>(
c, channel_tracer_max_nodes);
- c->channelz_subchannel->counter_and_tracer()->trace()->AddTraceEvent(
+ c->channelz_subchannel->trace()->AddTraceEvent(
grpc_core::channelz::ChannelTrace::Severity::Info,
grpc_slice_from_static_string("Subchannel created"));
}