diff options
| author | Dan Engelbrecht <[email protected]> | 2025-11-04 10:52:28 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-11-04 10:52:28 +0100 |
| commit | 6548080e9da9b09f6800fc4bd4c1c3ed4a5eede4 (patch) | |
| tree | 5790ea775ad57d948a7eaf16bf11fcb237f29a0f /src | |
| parent | abort build upload if we fail to finalize a build part (#623) (diff) | |
| download | zen-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.cpp | 18 | ||||
| -rw-r--r-- | src/zen/cmds/builds_cmd.h | 1 | ||||
| -rw-r--r-- | src/zenhttp/clients/httpclientcpr.cpp | 54 | ||||
| -rw-r--r-- | src/zenhttp/include/zenhttp/httpclient.h | 1 |
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 |