LCOV - code coverage report
Current view: top level - source/server/admin - init_dump_handler.cc (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 1 32 3.1 %
Date: 2024-01-05 06:35:25 Functions: 1 4 25.0 %

          Line data    Source code
       1             : #include "source/server/admin/init_dump_handler.h"
       2             : 
       3             : #include "source/common/http/headers.h"
       4             : #include "source/common/http/utility.h"
       5             : #include "source/common/network/utility.h"
       6             : #include "source/server/admin/utils.h"
       7             : 
       8             : namespace Envoy {
       9             : namespace Server {
      10             : 
      11         134 : InitDumpHandler::InitDumpHandler(Server::Instance& server) : HandlerContextBase(server) {}
      12             : 
      13             : Http::Code InitDumpHandler::handlerInitDump(Http::ResponseHeaderMap& response_headers,
      14             :                                             Buffer::Instance& response,
      15           0 :                                             AdminStream& admin_stream) const {
      16           0 :   const auto mask = admin_stream.queryParams().getFirstValue("mask");
      17             : 
      18           0 :   envoy::admin::v3::UnreadyTargetsDumps dump = *dumpUnreadyTargets(mask);
      19           0 :   MessageUtil::redact(dump);
      20             : 
      21           0 :   response_headers.setReferenceContentType(Http::Headers::get().ContentTypeValues.Json);
      22           0 :   response.add(MessageUtil::getJsonStringFromMessageOrError(dump, true)); // pretty-print
      23           0 :   return Http::Code::OK;
      24           0 : }
      25             : 
      26             : std::unique_ptr<envoy::admin::v3::UnreadyTargetsDumps>
      27           0 : InitDumpHandler::dumpUnreadyTargets(const absl::optional<std::string>& component) const {
      28           0 :   auto unready_targets_dumps = std::make_unique<envoy::admin::v3::UnreadyTargetsDumps>();
      29             : 
      30           0 :   if (component.has_value()) {
      31           0 :     if (component.value() == "listener") {
      32           0 :       dumpListenerUnreadyTargets(*unready_targets_dumps);
      33           0 :     }
      34             :     // More options for unready targets config dump.
      35           0 :   } else {
      36             :     // Dump all possible information of unready targets.
      37           0 :     dumpListenerUnreadyTargets(*unready_targets_dumps);
      38             :     // More unready targets to add into config dump.
      39           0 :   }
      40           0 :   return unready_targets_dumps;
      41           0 : }
      42             : 
      43             : void InitDumpHandler::dumpListenerUnreadyTargets(
      44           0 :     envoy::admin::v3::UnreadyTargetsDumps& unready_targets_dumps) const {
      45           0 :   std::vector<std::reference_wrapper<Network::ListenerConfig>> listeners;
      46           0 :   if (server_.listenerManager().isWorkerStarted()) {
      47           0 :     listeners = server_.listenerManager().listeners(ListenerManager::WARMING);
      48           0 :   } else {
      49           0 :     listeners = server_.listenerManager().listeners(ListenerManager::ACTIVE);
      50           0 :   }
      51             : 
      52           0 :   for (const auto& listener_config : listeners) {
      53           0 :     auto& listener = listener_config.get();
      54           0 :     listener.initManager().dumpUnreadyTargets(unready_targets_dumps);
      55           0 :   }
      56           0 : }
      57             : 
      58             : } // namespace Server
      59             : } // namespace Envoy

Generated by: LCOV version 1.15