feat: GrpcSource for ETL ng (#1745)

For #1596 and #1597
This commit is contained in:
Alex Kremer
2024-11-21 17:03:37 +00:00
committed by GitHub
parent 9dc322fc7b
commit 6af86367fd
13 changed files with 922 additions and 19 deletions

View File

@@ -19,10 +19,15 @@
#include "web/Resolver.hpp"
#include <boost/asio/ip/address.hpp>
#include "util/Assert.hpp"
#include <boost/asio/ip/address.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <sstream>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
namespace asio = boost::asio;
@@ -50,19 +55,51 @@ isAddress(std::string_view hostname)
return ec == boost::system::errc::success;
}
std::string
toString(auto const& endpoint)
{
std::stringstream ss;
ss << endpoint;
return ss.str();
}
} // namespace
std::vector<std::string>
Resolver::resolve(std::string_view hostname, std::string_view service)
{
if (isAddress(hostname)) {
return {std::string(hostname)};
}
ASSERT(not service.empty(), "Service is unspecified. Use `resolve(hostname)` instead.");
if (isAddress(hostname))
return {std::string(hostname) + ':' + std::string(service)};
std::vector<std::string> endpoints;
for (auto const& endpoint : resolver_.resolve(hostname, service)) {
endpoints.push_back(endpoint.endpoint().address().to_string());
}
for (auto const& endpoint : doResolve(hostname, service))
endpoints.push_back(toString(endpoint));
return endpoints;
}
std::vector<std::string>
Resolver::resolve(std::string_view hostname)
{
if (isAddress(hostname))
return {std::string(hostname)};
std::vector<std::string> endpoints;
for (auto const& endpoint : doResolve(hostname, ""))
endpoints.push_back(endpoint.address().to_string());
return endpoints;
}
std::vector<boost::asio::ip::tcp::endpoint>
Resolver::doResolve(std::string_view hostname, std::string_view service)
{
std::vector<boost::asio::ip::tcp::endpoint> endpoints;
for (auto&& endpoint : resolver_.resolve(hostname, service))
endpoints.push_back(std::move(endpoint));
return endpoints;
}