From 317a65938a236b02720d80545c4c0724ea733271 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Mon, 11 Dec 2023 15:14:28 +0100 Subject: execution_api: Move dispatch file parser into separate utility --- src/buildtool/execution_api/remote/config.cpp | 86 ++++----------------------- 1 file changed, 13 insertions(+), 73 deletions(-) (limited to 'src/buildtool/execution_api/remote/config.cpp') diff --git a/src/buildtool/execution_api/remote/config.cpp b/src/buildtool/execution_api/remote/config.cpp index b45f7d43..39bcebea 100644 --- a/src/buildtool/execution_api/remote/config.cpp +++ b/src/buildtool/execution_api/remote/config.cpp @@ -16,91 +16,31 @@ #include #include +#include #include "nlohmann/json.hpp" +#include "src/buildtool/file_system/file_system_manager.hpp" +#include "src/buildtool/logging/log_level.hpp" +#include "src/buildtool/logging/logger.hpp" [[nodiscard]] auto RemoteExecutionConfig::SetRemoteExecutionDispatch( const std::filesystem::path& filename) noexcept -> bool { - nlohmann::json dispatch{}; try { - std::ifstream fs(filename); - dispatch = nlohmann::json::parse(fs); - } catch (std::exception const& e) { - Logger::Log(LogLevel::Warning, - "Failed to read json file {}: {}", - filename.string(), - e.what()); - return false; - } - std::vector, ServerAddress>> - parsed{}; - try { - if (not dispatch.is_array()) { - Logger::Log(LogLevel::Warning, - "Endpoint configuration has to be a list of pairs, but " - "found {}", - dispatch.dump()); - return false; - } - for (auto const& entry : dispatch) { - if (not(entry.is_array() and entry.size() == 2)) { - Logger::Log( - LogLevel::Warning, - "Endpoint configuration has to be a list of pairs, but " - "found entry {}", - entry.dump()); - return false; - } - if (not entry[0].is_object()) { - Logger::Log(LogLevel::Warning, - "Property condition has to be given as an object, " - "but found {}", - entry[0].dump()); - return false; - } - std::map props{}; - for (auto const& [k, v] : entry[0].items()) { - if (not v.is_string()) { - Logger::Log(LogLevel::Warning, - "Property condition has to be given as an " - "object of strings but found {}", - entry[0].dump()); - return false; - } - props.emplace(k, v.template get()); + if (auto dispatch_info = FileSystemManager::ReadFile(filename)) { + auto parsed = ParseDispatch(*dispatch_info); + if (parsed.index() == 0) { + Logger::Log(LogLevel::Warning, std::get<0>(parsed)); } - if (not entry[1].is_string()) { - Logger::Log( - LogLevel::Warning, - "Endpoint has to be specified as string (in the form " - "host:port), but found {}", - entry[1].dump()); - return false; - } - auto endpoint = ParseAddress(entry[1].template get()); - if (not endpoint) { - Logger::Log(LogLevel::Warning, - "Failed to parse {} as endpoint.", - entry[1].dump()); - return false; - } - parsed.emplace_back(props, *endpoint); + Instance().dispatch_ = std::move(std::get<1>(parsed)); + return true; } - } catch (std::exception const& e) { Logger::Log(LogLevel::Warning, - "Failure analysing endpoint configuration {}: {}", - dispatch.dump(), - e.what()); - return false; - } - - try { - Instance().dispatch_ = parsed; + "Failed to read json file {}", + filename.string()); } catch (std::exception const& e) { Logger::Log(LogLevel::Warning, "Failure assigning the endpoint configuration: {}", e.what()); - return false; } - return true; + return false; } -- cgit v1.2.3