// // // 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_LIB_CHANNEL_CHANNELZ_H #define GRPC_SRC_CORE_LIB_CHANNEL_CHANNELZ_H #include <grpc/support/port_platform.h> #include <stddef.h> #include <atomic> #include <cstdint> #include <map> #include <set> #include <string> #include <utility> #include <vector> #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include <grpc/grpc.h> #include <grpc/impl/connectivity_state.h> #include <grpc/slice.h> #include "src/core/lib/channel/channel_trace.h" #include "src/core/lib/gpr/time_precise.h" #include "src/core/lib/gpr/useful.h" #include "src/core/lib/gprpp/ref_counted.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" #include "src/core/lib/gprpp/sync.h" #include "src/core/lib/json/json.h" // Channel arg key for channelz node. #define GRPC_ARG_CHANNELZ_CHANNEL_NODE … // Channel arg key for indicating an internal channel. #define GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL … /// This is the default value for whether or not to enable channelz. If /// GRPC_ARG_ENABLE_CHANNELZ is set, it will override this default value. #define GRPC_ENABLE_CHANNELZ_DEFAULT … /// This is the default value for the maximum amount of memory used by trace /// events per channel trace node. If /// GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE is set, it will override /// this default value. #define GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT … namespace grpc_core { namespace channelz { class SocketNode; class ListenSocketNode; namespace testing { class CallCountingHelperPeer; class ChannelNodePeer; } // namespace testing // base class for all channelz entities class BaseNode : public RefCounted<BaseNode> { … }; // This class is a helper class for channelz entities that deal with Channels, // Subchannels, and Servers, since those have similar proto definitions. // This class has the ability to: // - track calls_{started,succeeded,failed} // - track last_call_started_timestamp // - perform rendering of the above items class CallCountingHelper { … }; // Handles channelz bookkeeping for channels class ChannelNode : public BaseNode { … }; // Handles channelz bookkeeping for servers class ServerNode : public BaseNode { … }; #define GRPC_ARG_CHANNELZ_SECURITY … // Handles channelz bookkeeping for sockets class SocketNode : public BaseNode { … }; // Handles channelz bookkeeping for listen sockets class ListenSocketNode : public BaseNode { … }; } // namespace channelz } // namespace grpc_core #endif // GRPC_SRC_CORE_LIB_CHANNEL_CHANNELZ_H