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