[reorg] move channelz code to src/core/channelz (#36380)
Closes #36380
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/36380 from markdroth:reorg_channelz f186e53f70
PiperOrigin-RevId: 626447939
pull/36375/head
parent
ba78e4ff47
commit
08f56b3a74
58 changed files with 255 additions and 384 deletions
@ -1,93 +0,0 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2018 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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "src/core/client_channel/client_channel_channelz.h" |
||||
|
||||
#include "absl/strings/str_cat.h" |
||||
|
||||
#include <grpc/support/json.h> |
||||
|
||||
#include "src/core/lib/transport/connectivity_state.h" |
||||
|
||||
// IWYU pragma: no_include <type_traits>
|
||||
|
||||
namespace grpc_core { |
||||
namespace channelz { |
||||
|
||||
SubchannelNode::SubchannelNode(std::string target_address, |
||||
size_t channel_tracer_max_nodes) |
||||
: BaseNode(EntityType::kSubchannel, target_address), |
||||
target_(std::move(target_address)), |
||||
trace_(channel_tracer_max_nodes) {} |
||||
|
||||
SubchannelNode::~SubchannelNode() {} |
||||
|
||||
void SubchannelNode::UpdateConnectivityState(grpc_connectivity_state state) { |
||||
connectivity_state_.store(state, std::memory_order_relaxed); |
||||
} |
||||
|
||||
void SubchannelNode::SetChildSocket(RefCountedPtr<SocketNode> socket) { |
||||
MutexLock lock(&socket_mu_); |
||||
child_socket_ = std::move(socket); |
||||
} |
||||
|
||||
Json SubchannelNode::RenderJson() { |
||||
// Create and fill the data child.
|
||||
grpc_connectivity_state state = |
||||
connectivity_state_.load(std::memory_order_relaxed); |
||||
Json::Object data = { |
||||
{"state", Json::FromObject({ |
||||
{"state", Json::FromString(ConnectivityStateName(state))}, |
||||
})}, |
||||
{"target", Json::FromString(target_)}, |
||||
}; |
||||
// Fill in the channel trace if applicable
|
||||
Json trace_json = trace_.RenderJson(); |
||||
if (trace_json.type() != Json::Type::kNull) { |
||||
data["trace"] = std::move(trace_json); |
||||
} |
||||
// Ask CallCountingHelper to populate call count data.
|
||||
call_counter_.PopulateCallCounts(&data); |
||||
// Construct top-level object.
|
||||
Json::Object object{ |
||||
{"ref", Json::FromObject({ |
||||
{"subchannelId", Json::FromString(absl::StrCat(uuid()))}, |
||||
})}, |
||||
{"data", Json::FromObject(std::move(data))}, |
||||
}; |
||||
// Populate the child socket.
|
||||
RefCountedPtr<SocketNode> child_socket; |
||||
{ |
||||
MutexLock lock(&socket_mu_); |
||||
child_socket = child_socket_; |
||||
} |
||||
if (child_socket != nullptr && child_socket->uuid() != 0) { |
||||
object["socketRef"] = Json::FromArray({ |
||||
Json::FromObject({ |
||||
{"socketId", Json::FromString(absl::StrCat(child_socket->uuid()))}, |
||||
{"name", Json::FromString(child_socket->name())}, |
||||
}), |
||||
}); |
||||
} |
||||
return Json::FromObject(object); |
||||
} |
||||
|
||||
} // namespace channelz
|
||||
} // namespace grpc_core
|
@ -1,85 +0,0 @@ |
||||
//
|
||||
//
|
||||
// Copyright 2018 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 GRPC_SRC_CORE_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H |
||||
#define GRPC_SRC_CORE_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <stddef.h> |
||||
|
||||
#include <atomic> |
||||
#include <string> |
||||
#include <utility> |
||||
|
||||
#include "absl/base/thread_annotations.h" |
||||
|
||||
#include <grpc/impl/connectivity_state.h> |
||||
#include <grpc/slice.h> |
||||
|
||||
#include "src/core/lib/channel/channel_trace.h" |
||||
#include "src/core/lib/channel/channelz.h" |
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h" |
||||
#include "src/core/lib/gprpp/sync.h" |
||||
#include "src/core/lib/json/json.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace channelz { |
||||
|
||||
class SubchannelNode final : public BaseNode { |
||||
public: |
||||
SubchannelNode(std::string target_address, size_t channel_tracer_max_nodes); |
||||
~SubchannelNode() override; |
||||
|
||||
// Sets the subchannel's connectivity state without health checking.
|
||||
void UpdateConnectivityState(grpc_connectivity_state state); |
||||
|
||||
// Used when the subchannel's child socket changes. This should be set when
|
||||
// the subchannel's transport is created and set to nullptr when the
|
||||
// subchannel unrefs the transport.
|
||||
void SetChildSocket(RefCountedPtr<SocketNode> socket); |
||||
|
||||
Json RenderJson() override; |
||||
|
||||
// proxy methods to composed classes.
|
||||
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) { |
||||
trace_.AddTraceEvent(severity, data); |
||||
} |
||||
void AddTraceEventWithReference(ChannelTrace::Severity severity, |
||||
const grpc_slice& data, |
||||
RefCountedPtr<BaseNode> referenced_channel) { |
||||
trace_.AddTraceEventWithReference(severity, data, |
||||
std::move(referenced_channel)); |
||||
} |
||||
void RecordCallStarted() { call_counter_.RecordCallStarted(); } |
||||
void RecordCallFailed() { call_counter_.RecordCallFailed(); } |
||||
void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); } |
||||
|
||||
private: |
||||
std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE}; |
||||
Mutex socket_mu_; |
||||
RefCountedPtr<SocketNode> child_socket_ ABSL_GUARDED_BY(socket_mu_); |
||||
std::string target_; |
||||
CallCountingHelper call_counter_; |
||||
ChannelTrace trace_; |
||||
}; |
||||
|
||||
} // namespace channelz
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H
|
Loading…
Reference in new issue