summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/remote/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/execution_api/remote/config.cpp')
-rw-r--r--src/buildtool/execution_api/remote/config.cpp86
1 files changed, 13 insertions, 73 deletions
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 <exception>
#include <fstream>
+#include <utility>
#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<std::pair<std::map<std::string, std::string>, 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<std::string, std::string> 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<std::string>());
+ 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<std::string>());
- 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;
}