diff --git a/repertory/librepertory/src/providers/sia/sia_provider.cpp b/repertory/librepertory/src/providers/sia/sia_provider.cpp index a05c5b5e..72ce6e0d 100644 --- a/repertory/librepertory/src/providers/sia/sia_provider.cpp +++ b/repertory/librepertory/src/providers/sia/sia_provider.cpp @@ -69,6 +69,15 @@ auto sia_provider::create_directory_impl(const std::string &api_path, put_file.path = "/api/worker/objects" + api_path + "/"; put_file.query["bucket"] = get_bucket(get_sia_config()); + std::string error_data; + put_file.response_handler = [&error_data](auto &&data, long response_code) { + if (response_code == http_error_codes::ok) { + return; + } + + error_data = std::string(data.begin(), data.end()); + }; + long response_code{}; stop_type stop_requested{}; if (not get_comm().make_request(put_file, response_code, stop_requested)) { @@ -79,8 +88,9 @@ auto sia_provider::create_directory_impl(const std::string &api_path, } if (response_code != http_error_codes::ok) { - utils::error::raise_api_path_error(function_name, api_path, response_code, - "failed to create directory"); + utils::error::raise_api_path_error( + function_name, api_path, response_code, + fmt::format("failed to create directory|response|{}", error_data)); return api_error::comm_error; } @@ -290,11 +300,15 @@ auto sia_provider::get_object_info(const std::string &api_path, get.path = "/api/bus/objects" + api_path; get.query["bucket"] = get_bucket(get_sia_config()); - get.response_handler = [&object_info](const data_buffer &data, - long response_code) { + std::string error_data; + get.response_handler = [&error_data, &object_info](auto &&data, + long response_code) { if (response_code == http_error_codes::ok) { object_info = nlohmann::json::parse(data.begin(), data.end()); + return; } + + error_data = std::string(data.begin(), data.end()); }; long response_code{}; @@ -308,8 +322,9 @@ auto sia_provider::get_object_info(const std::string &api_path, } if (response_code != http_error_codes::ok) { - utils::error::raise_api_path_error(function_name, api_path, response_code, - "failed to get object info"); + utils::error::raise_api_path_error( + function_name, api_path, response_code, + fmt::format("failed to get object info|response|{}", error_data)); return api_error::comm_error; } @@ -331,11 +346,15 @@ auto sia_provider::get_object_list(const std::string &api_path, get.path = "/api/bus/objects" + api_path + "/"; get.query["bucket"] = get_bucket(get_sia_config()); - get.response_handler = [&object_list](const data_buffer &data, - long response_code) { + std::string error_data; + get.response_handler = [&error_data, &object_list](auto &&data, + long response_code) { if (response_code == http_error_codes::ok) { object_list = nlohmann::json::parse(data.begin(), data.end()); + return; } + + error_data = std::string(data.begin(), data.end()); }; long response_code{}; @@ -348,8 +367,9 @@ auto sia_provider::get_object_list(const std::string &api_path, } if (response_code != http_error_codes::ok) { - utils::error::raise_api_path_error(function_name, api_path, response_code, - "failed to get object list"); + utils::error::raise_api_path_error( + function_name, api_path, response_code, + fmt::format("failed to get object list|response|{}", error_data)); return false; } @@ -365,12 +385,16 @@ auto sia_provider::get_total_drive_space() const -> std::uint64_t { get.path = "/api/autopilot/config"; get.query["bucket"] = get_bucket(get_sia_config()); - json config_data{}; - get.response_handler = [&config_data](const data_buffer &data, - long response_code) { + json config_data; + std::string error_data; + get.response_handler = [&error_data, &config_data](auto &&data, + long response_code) { if (response_code == http_error_codes::ok) { config_data = nlohmann::json::parse(data.begin(), data.end()); + return; } + + error_data = std::string(data.begin(), data.end()); }; long response_code{}; @@ -380,8 +404,10 @@ auto sia_provider::get_total_drive_space() const -> std::uint64_t { } if (response_code != http_error_codes::ok) { - utils::error::raise_error(function_name, response_code, - "failed to get total drive space"); + utils::error::raise_api_path_error( + function_name, api_path, response_code, + fmt::format("failed to get total drive space|response|{}", + error_data)); return 0U; } @@ -466,12 +492,16 @@ auto sia_provider::is_online() const -> bool { get.path = "/api/bus/consensus/state"; get.query["bucket"] = get_bucket(get_sia_config()); - json state_data{}; - get.response_handler = [&state_data](const data_buffer &data, - long response_code) { + std::string error_data; + json state_data; + get.response_handler = [&error_data, &state_data](auto &&data, + long response_code) { if (response_code == http_error_codes::ok) { state_data = nlohmann::json::parse(data.begin(), data.end()); + return; } + + error_data = std::string(data.begin(), data.end()); }; long response_code{}; @@ -483,8 +513,10 @@ auto sia_provider::is_online() const -> bool { } if (response_code != http_error_codes::ok) { - utils::error::raise_error(function_name, response_code, - "failed to determine if provider is online"); + utils::error::raise_api_path_error( + function_name, api_path, response_code, + fmt::format("failed to determine if provider is online|response|{}", + error_data)); return false; } @@ -510,8 +542,9 @@ auto sia_provider::read_file_bytes(const std::string &api_path, offset, offset + size - 1U, }}; - get.response_handler = [&buffer](const data_buffer &data, - long /*response_code*/) { buffer = data; }; + get.response_handler = [&buffer](auto &&data, long /* response_code */) { + buffer = data; + }; auto res = api_error::comm_error; for (std::uint32_t idx = 0U;