aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-11-04 10:52:28 +0100
committerGitHub Enterprise <[email protected]>2025-11-04 10:52:28 +0100
commit6548080e9da9b09f6800fc4bd4c1c3ed4a5eede4 (patch)
tree5790ea775ad57d948a7eaf16bf11fcb237f29a0f /src
parentabort build upload if we fail to finalize a build part (#623) (diff)
downloadzen-6548080e9da9b09f6800fc4bd4c1c3ed4a5eede4.tar.xz
zen-6548080e9da9b09f6800fc4bd4c1c3ed4a5eede4.zip
add `--verbose-http` option to builds commands (#630)
Diffstat (limited to 'src')
-rw-r--r--src/zen/cmds/builds_cmd.cpp18
-rw-r--r--src/zen/cmds/builds_cmd.h1
-rw-r--r--src/zenhttp/clients/httpclientcpr.cpp54
-rw-r--r--src/zenhttp/include/zenhttp/httpclient.h1
4 files changed, 70 insertions, 4 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp
index 15c9774b4..cc1844f71 100644
--- a/src/zen/cmds/builds_cmd.cpp
+++ b/src/zen/cmds/builds_cmd.cpp
@@ -2651,6 +2651,12 @@ BuildsCommand::BuildsCommand()
"Assume that the builds endpoint is a HTTP/2 endpoint skipping HTTP/1.1 upgrade handshake",
cxxopts::value(m_AssumeHttp2),
"<assumehttp2>");
+ Ops.add_option("cloud build",
+ "",
+ "verbose-http",
+ "Enable verbose option for http client",
+ cxxopts::value(m_VerboseHttp),
+ "<verbosehttp>");
Ops.add_option("cloud build", "", "namespace", "Builds Storage namespace", cxxopts::value(m_Namespace), "<namespace>");
Ops.add_option("cloud build", "", "bucket", "Builds Storage bucket", cxxopts::value(m_Bucket), "<bucket>");
@@ -3283,7 +3289,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
HttpClientSettings ClientSettings{.LogCategory = "httpbuildsclient",
.AssumeHttp2 = m_AssumeHttp2,
.AllowResume = true,
- .RetryCount = 2};
+ .RetryCount = 2,
+ .Verbose = m_VerboseHttp};
auto CreateBuildStorage = [&](BuildStorageBase::Statistics& StorageStats,
BuildStorageCache::Statistics& StorageCacheStats,
@@ -3296,7 +3303,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
HttpClientSettings ClientSettings{.LogCategory = "httpbuildsclient",
.AssumeHttp2 = m_AssumeHttp2,
.AllowResume = true,
- .RetryCount = 2};
+ .RetryCount = 2,
+ .Verbose = m_VerboseHttp};
std::unique_ptr<AuthMgr> Auth;
@@ -3347,7 +3355,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
.Timeout = std::chrono::milliseconds{30000},
.AssumeHttp2 = ResolveRes.CacheAssumeHttp2,
.AllowResume = true,
- .RetryCount = 0},
+ .RetryCount = 0,
+ .Verbose = m_VerboseHttp},
[]() { return AbortFlag.load(); });
Result.BuildCacheStorage =
CreateZenBuildStorageCache(*Result.CacheHttp,
@@ -3390,7 +3399,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
.Timeout = std::chrono::milliseconds{30000},
.AssumeHttp2 = m_AssumeHttp2,
.AllowResume = true,
- .RetryCount = 0},
+ .RetryCount = 0,
+ .Verbose = m_VerboseHttp},
[]() { return AbortFlag.load(); });
Result.BuildCacheStorage =
CreateZenBuildStorageCache(*Result.CacheHttp,
diff --git a/src/zen/cmds/builds_cmd.h b/src/zen/cmds/builds_cmd.h
index ef5ac1e10..d05d23760 100644
--- a/src/zen/cmds/builds_cmd.h
+++ b/src/zen/cmds/builds_cmd.h
@@ -44,6 +44,7 @@ private:
std::string m_Host;
std::string m_Url;
bool m_AssumeHttp2 = false;
+ bool m_VerboseHttp = false;
bool m_AllowRedirect = false;
std::string m_Namespace;
std::string m_Bucket;
diff --git a/src/zenhttp/clients/httpclientcpr.cpp b/src/zenhttp/clients/httpclientcpr.cpp
index ca4d03dd4..333fd20b0 100644
--- a/src/zenhttp/clients/httpclientcpr.cpp
+++ b/src/zenhttp/clients/httpclientcpr.cpp
@@ -432,6 +432,60 @@ CprHttpClient::AllocSession(const std::string_view BaseUrl,
{
CprSession->SetHttpVersion(cpr::HttpVersion{cpr::HttpVersionCode::VERSION_2_0_PRIOR_KNOWLEDGE});
}
+ if (ConnectionSettings.Verbose)
+ {
+ // CprSession->SetVerbose(cpr::Verbose{ true });
+ CprSession->SetDebugCallback(cpr::DebugCallback{
+ [this](cpr::DebugCallback::InfoType type, std::string data, intptr_t userdata) {
+ cpr::Session* CprSession = (cpr::Session*)userdata;
+ ZEN_UNUSED(CprSession);
+ switch (type)
+ {
+ case cpr::DebugCallback::InfoType::TEXT:
+ if (data.find("need more data"sv) == std::string::npos)
+ {
+ ZEN_INFO("TEXT: {}", data);
+ }
+ break;
+ case cpr::DebugCallback::InfoType::HEADER_IN:
+ ZEN_INFO("HIN : {}", data);
+ break;
+ case cpr::DebugCallback::InfoType::HEADER_OUT:
+ if (std::string::size_type TokenPos = data.find("Authorization: Bearer "sv); TokenPos != std::string::npos)
+ {
+ TokenPos += 22;
+ std::string::size_type TokenEndPos = data.find_first_of("\r\n", TokenPos);
+ if (TokenEndPos == std::string::npos)
+ {
+ TokenEndPos = data.length();
+ }
+ std::string Copy = data;
+ Copy.replace(Copy.begin() + TokenPos,
+ Copy.begin() + TokenEndPos,
+ fmt::format("[{} char token]", TokenEndPos - TokenPos));
+ ZEN_INFO("HOUT: {}", Copy);
+ }
+ else
+ {
+ ZEN_INFO("HOUT: {}", data);
+ }
+ break;
+ case cpr::DebugCallback::InfoType::DATA_IN:
+ // ZEN_INFO("DATA_IN: {}", data);
+ break;
+ case cpr::DebugCallback::InfoType::DATA_OUT:
+ // ZEN_INFO("DATA_OUT: {}", data);
+ break;
+ case cpr::DebugCallback::InfoType::SSL_DATA_IN:
+ // ZEN_INFO("SSL_DATA_IN: {}", data);
+ break;
+ case cpr::DebugCallback::InfoType::SSL_DATA_OUT:
+ // ZEN_INFO("SSL_DATA_OUT: {}", data);
+ break;
+ }
+ },
+ (intptr_t)CprSession});
+ }
}
if (!AdditionalHeader->empty())
diff --git a/src/zenhttp/include/zenhttp/httpclient.h b/src/zenhttp/include/zenhttp/httpclient.h
index 4fec1ec3f..c9b6d4dee 100644
--- a/src/zenhttp/include/zenhttp/httpclient.h
+++ b/src/zenhttp/include/zenhttp/httpclient.h
@@ -56,6 +56,7 @@ struct HttpClientSettings
bool AllowResume = false;
uint8_t RetryCount = 0;
Oid SessionId = Oid::Zero;
+ bool Verbose = false;
};
class HttpClientError : public std::runtime_error