/proc/self/cwd/source/server/admin/init_dump_handler.cc
Line | Count | Source (jump to first uncovered line) |
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 | | namespace { |
12 | | // Helper method to get the mask parameter. |
13 | 0 | absl::optional<std::string> maskParam(const Http::Utility::QueryParams& params) { |
14 | 0 | return Utility::queryParam(params, "mask"); |
15 | 0 | } |
16 | | |
17 | | } // namespace |
18 | | |
19 | 5.34k | InitDumpHandler::InitDumpHandler(Server::Instance& server) : HandlerContextBase(server) {} |
20 | | |
21 | | Http::Code InitDumpHandler::handlerInitDump(Http::ResponseHeaderMap& response_headers, |
22 | | Buffer::Instance& response, |
23 | 0 | AdminStream& admin_stream) const { |
24 | 0 | const auto mask = maskParam(admin_stream.queryParams()); |
25 | |
|
26 | 0 | envoy::admin::v3::UnreadyTargetsDumps dump = *dumpUnreadyTargets(mask); |
27 | 0 | MessageUtil::redact(dump); |
28 | |
|
29 | 0 | response_headers.setReferenceContentType(Http::Headers::get().ContentTypeValues.Json); |
30 | 0 | response.add(MessageUtil::getJsonStringFromMessageOrError(dump, true)); // pretty-print |
31 | 0 | return Http::Code::OK; |
32 | 0 | } |
33 | | |
34 | | std::unique_ptr<envoy::admin::v3::UnreadyTargetsDumps> |
35 | 0 | InitDumpHandler::dumpUnreadyTargets(const absl::optional<std::string>& component) const { |
36 | 0 | auto unready_targets_dumps = std::make_unique<envoy::admin::v3::UnreadyTargetsDumps>(); |
37 | |
|
38 | 0 | if (component.has_value()) { |
39 | 0 | if (component.value() == "listener") { |
40 | 0 | dumpListenerUnreadyTargets(*unready_targets_dumps); |
41 | 0 | } |
42 | | // More options for unready targets config dump. |
43 | 0 | } else { |
44 | | // Dump all possible information of unready targets. |
45 | 0 | dumpListenerUnreadyTargets(*unready_targets_dumps); |
46 | | // More unready targets to add into config dump. |
47 | 0 | } |
48 | 0 | return unready_targets_dumps; |
49 | 0 | } |
50 | | |
51 | | void InitDumpHandler::dumpListenerUnreadyTargets( |
52 | 0 | envoy::admin::v3::UnreadyTargetsDumps& unready_targets_dumps) const { |
53 | 0 | std::vector<std::reference_wrapper<Network::ListenerConfig>> listeners; |
54 | 0 | if (server_.listenerManager().isWorkerStarted()) { |
55 | 0 | listeners = server_.listenerManager().listeners(ListenerManager::WARMING); |
56 | 0 | } else { |
57 | 0 | listeners = server_.listenerManager().listeners(ListenerManager::ACTIVE); |
58 | 0 | } |
59 | |
|
60 | 0 | for (const auto& listener_config : listeners) { |
61 | 0 | auto& listener = listener_config.get(); |
62 | 0 | listener.initManager().dumpUnreadyTargets(unready_targets_dumps); |
63 | 0 | } |
64 | 0 | } |
65 | | |
66 | | } // namespace Server |
67 | | } // namespace Envoy |