Coverage Report

Created: 2023-11-12 09:30

/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