From 365ae2976b2a7b9e15b23001d519fb3f3bdfda61 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 11 Mar 2024 16:59:27 +0100 Subject: [PATCH] translation/Protocol: add packet ANALYTICS_ID --- debian/changelog | 1 + libcommon | 2 +- python/beng_proxy/translation/protocol.py | 1 + src/access_log/Glue.cxx | 6 +++++- src/access_log/Glue.hxx | 2 ++ src/bp/Handler.cxx | 5 +++++ src/bp/RLogger.cxx | 1 + src/bp/RLogger.hxx | 5 +++++ src/lb/RLogger.cxx | 1 + src/lb/RLogger.hxx | 5 +++++ src/lb/TranslationHttpRequestHandler.cxx | 3 +++ 11 files changed, 30 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index f7c6d21f1..53cac0966 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,7 @@ cm4all-beng-proxy (18.0.58) unstable; urgency=low * lb: run lua_handler as coroutine * certdb/puki: client for the 1&1 Public Key Infrastructure (PUKI) * log: drop support for protocol v1 + * translation: add packet ANALYTICS_ID -- diff --git a/libcommon b/libcommon index b3a720ac0..b0f562363 160000 --- a/libcommon +++ b/libcommon @@ -1 +1 @@ -Subproject commit b3a720ac0c8e33b07f6406ae0ac6486ff20f0037 +Subproject commit b0f56236302a421448a00ba6e05d8e714e8d068f diff --git a/python/beng_proxy/translation/protocol.py b/python/beng_proxy/translation/protocol.py index 6a0776b40..76bf934ba 100644 --- a/python/beng_proxy/translation/protocol.py +++ b/python/beng_proxy/translation/protocol.py @@ -261,6 +261,7 @@ TRANSLATE_NO_HOME_AUTHORIZED_KEYS = 255 TRANSLATE_TIMEOUT = 256 TRANSLATE_MOUNT_LISTEN_STREAM = 257 +TRANSLATE_ANALYTICS_ID = 258 TRANSLATE_PROXY = TRANSLATE_HTTP # deprecated TRANSLATE_LHTTP_EXPAND_URI = TRANSLATE_EXPAND_LHTTP_URI # deprecated diff --git a/src/access_log/Glue.cxx b/src/access_log/Glue.cxx index 97e370457..0d4f02072 100644 --- a/src/access_log/Glue.cxx +++ b/src/access_log/Glue.cxx @@ -71,6 +71,7 @@ AccessLogGlue::Log(const Net::Log::Datagram &d) noexcept void AccessLogGlue::Log(std::chrono::system_clock::time_point now, const IncomingHttpRequest &request, const char *site, + const char *analytics_id, const char *forwarded_to, const char *host, const char *x_forwarded_for, const char *referer, const char *user_agent, @@ -98,6 +99,7 @@ AccessLogGlue::Log(std::chrono::system_clock::time_point now, .remote_host = remote_host, .host = host, .site = site, + .analytics_id = analytics_id, .forwarded_to = forwarded_to, .http_uri = request.uri, .http_referer = referer, @@ -114,13 +116,15 @@ AccessLogGlue::Log(std::chrono::system_clock::time_point now, void AccessLogGlue::Log(std::chrono::system_clock::time_point now, const IncomingHttpRequest &request, const char *site, + const char *analytics_id, const char *forwarded_to, const char *referer, const char *user_agent, HttpStatus status, int64_t content_length, uint64_t bytes_received, uint64_t bytes_sent, std::chrono::steady_clock::duration duration) noexcept { - Log(now, request, site, forwarded_to, + Log(now, request, site, analytics_id, + forwarded_to, request.headers.Get("host"), request.headers.Get("x-forwarded-for"), referer, user_agent, diff --git a/src/access_log/Glue.hxx b/src/access_log/Glue.hxx index 75f48009c..d85f9ae61 100644 --- a/src/access_log/Glue.hxx +++ b/src/access_log/Glue.hxx @@ -51,6 +51,7 @@ public: */ void Log(std::chrono::system_clock::time_point now, const IncomingHttpRequest &request, const char *site, + const char *analytics_id, const char *forwarded_to, const char *host, const char *x_forwarded_for, const char *referer, const char *user_agent, @@ -60,6 +61,7 @@ public: void Log(std::chrono::system_clock::time_point now, const IncomingHttpRequest &request, const char *site, + const char *analytics_id, const char *forwarded_to, const char *referer, const char *user_agent, HttpStatus status, int64_t length, diff --git a/src/bp/Handler.cxx b/src/bp/Handler.cxx index a0d572beb..da4dfd9c4 100644 --- a/src/bp/Handler.cxx +++ b/src/bp/Handler.cxx @@ -129,6 +129,11 @@ Request::HandleTranslatedRequest2(const TranslateResponse &response) noexcept rl.site_name = response.site; } + if (response.analytics_id != nullptr) { + auto &rl = *(BpRequestLogger *)request.logger; + rl.analytics_id = response.analytics_id; + } + if (response.stats_tag != nullptr) { auto &rl = *(BpRequestLogger *)request.logger; rl.stats_tag = response.stats_tag; diff --git a/src/bp/RLogger.cxx b/src/bp/RLogger.cxx index b4d85fb95..1696e06cc 100644 --- a/src/bp/RLogger.cxx +++ b/src/bp/RLogger.cxx @@ -32,6 +32,7 @@ BpRequestLogger::LogHttpRequest(IncomingHttpRequest &request, if (instance.access_log != nullptr) instance.access_log->Log(instance.event_loop.SystemNow(), request, site_name, + analytics_id, nullptr, request.headers.Get("referer"), request.headers.Get("user-agent"), diff --git a/src/bp/RLogger.hxx b/src/bp/RLogger.hxx index c3efef6b5..fd4dad7b3 100644 --- a/src/bp/RLogger.hxx +++ b/src/bp/RLogger.hxx @@ -38,6 +38,11 @@ struct BpRequestLogger final : IncomingHttpRequestLogger { */ const char *site_name = nullptr; + /** + * @see TranslationCommand::ANALYTICS_ID + */ + const char *analytics_id = nullptr; + /** * From TranslationCommand::STATS_TAG */ diff --git a/src/lb/RLogger.cxx b/src/lb/RLogger.cxx index 644ff284a..9decdbcc7 100644 --- a/src/lb/RLogger.cxx +++ b/src/lb/RLogger.cxx @@ -36,6 +36,7 @@ LbRequestLogger::LogHttpRequest(IncomingHttpRequest &request, if (instance.access_log != nullptr) instance.access_log->Log(instance.event_loop.SystemNow(), request, site_name, + analytics_id, forwarded_to, host, x_forwarded_for, diff --git a/src/lb/RLogger.hxx b/src/lb/RLogger.hxx index e955d2cfc..e8d72a356 100644 --- a/src/lb/RLogger.hxx +++ b/src/lb/RLogger.hxx @@ -68,6 +68,11 @@ struct LbRequestLogger final : IncomingHttpRequestLogger { */ const char *site_name = nullptr; + /** + * @see TranslationCommand::ANALYTICS_ID + */ + const char *analytics_id = nullptr; + /** * @see LOG_FORWARDED_TO */ diff --git a/src/lb/TranslationHttpRequestHandler.cxx b/src/lb/TranslationHttpRequestHandler.cxx index 92466e7e3..79c66ea8a 100644 --- a/src/lb/TranslationHttpRequestHandler.cxx +++ b/src/lb/TranslationHttpRequestHandler.cxx @@ -76,6 +76,9 @@ LbHttpRequest::OnTranslateResponse(UniquePoolPtr _response) n if (response.site != nullptr) rl.site_name = p_strdup(request.pool, response.site); + if (response.analytics_id != nullptr) + rl.analytics_id = p_strdup(request.pool, response.analytics_id); + if (response.https_only != 0 && !c.IsEncrypted()) { Destroy();