Socket tracks remote address

pull/17050/head
ncteisen 6 years ago
parent d7f5055b8d
commit ba6f81297c
  1. 3
      src/core/ext/transport/chttp2/transport/chttp2_transport.cc
  2. 31
      src/core/lib/channel/channelz.cc
  3. 5
      src/core/lib/channel/channelz.h

@ -396,7 +396,8 @@ static bool read_channel_args(grpc_chttp2_transport* t,
}
if (channelz_enabled) {
t->channelz_socket =
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>();
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
(t->peer_string));
}
return enable_bdp;
}

@ -30,6 +30,7 @@
#include "src/core/lib/channel/channelz_registry.h"
#include "src/core/lib/channel/status_util.h"
#include "src/core/lib/gpr/host_port.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/memory.h"
@ -277,7 +278,20 @@ grpc_json* ServerNode::RenderJson() {
return top_level_json;
}
SocketNode::SocketNode() : BaseNode(EntityType::kSocket) {}
SocketNode::SocketNode(const char* remote_peer_string)
: BaseNode(EntityType::kSocket) {
const char* ipv6_prefix = "ipv6:";
const int ipv6_prefix_len = 5;
char* host;
char* port;
int offset = (strncmp(remote_peer_string, ipv6_prefix, ipv6_prefix_len) == 0)
? ipv6_prefix_len
: 0;
GPR_ASSERT(gpr_split_host_port(remote_peer_string + offset, &host, &port));
remote_host_ = UniquePtr<char>(host);
remote_port_ = atoi(port);
gpr_free(port);
}
void SocketNode::RecordStreamStartedFromLocal() {
gpr_atm_no_barrier_fetch_add(&streams_started_, static_cast<gpr_atm>(1));
@ -315,6 +329,21 @@ grpc_json* SocketNode::RenderJson() {
json_iterator = nullptr;
json_iterator = grpc_json_add_number_string_child(json, json_iterator,
"socketId", uuid());
json = top_level_json;
json_iterator = nullptr;
json_iterator = grpc_json_create_child(json_iterator, json, "remote", nullptr,
GRPC_JSON_OBJECT, false);
json = json_iterator;
json_iterator = nullptr;
json_iterator = grpc_json_create_child(json_iterator, json, "tcpip_address",
nullptr, GRPC_JSON_OBJECT, false);
json = json_iterator;
json_iterator = nullptr;
json_iterator = grpc_json_add_number_string_child(json, json_iterator, "port",
remote_port_);
json_iterator =
grpc_json_create_child(json_iterator, json, "ip_address",
remote_host_.get(), GRPC_JSON_STRING, false);
// reset json iterators to top level object
json = top_level_json;
json_iterator = nullptr;

@ -232,7 +232,7 @@ class ServerNode : public BaseNode {
// Handles channelz bookkeeping for sockets
class SocketNode : public BaseNode {
public:
SocketNode();
SocketNode(const char* remote_peer_string);
~SocketNode() override {}
grpc_json* RenderJson() override;
@ -262,7 +262,8 @@ class SocketNode : public BaseNode {
gpr_atm last_remote_stream_created_millis_ = 0;
gpr_atm last_message_sent_millis_ = 0;
gpr_atm last_message_received_millis_ = 0;
UniquePtr<char> peer_string_;
UniquePtr<char> remote_host_;
int remote_port_;
};
// Handles channelz bookkeeping for listen sockets

Loading…
Cancel
Save