diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-07-05 17:12:53 +0100 |
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-07-05 17:12:53 +0100 |
| commit | cb47664b464331b88dad62796729fe08f07f30e4 (patch) | |
| tree | 8fd0536b57fa0c2ea95b68e0a8beabd2d83da911 | |
| parent | 870aa90c005f77a73445f5c39f9fd9bbb7604fe8 (diff) | |
| download | webstat-cb47664b464331b88dad62796729fe08f07f30e4.tar.bz2 webstat-cb47664b464331b88dad62796729fe08f07f30e4.tar.xz webstat-cb47664b464331b88dad62796729fe08f07f30e4.zip | |
Update parsed type of duration field
uint32_t doesn't cut it, changed to uint64_t.
| -rw-r--r-- | src/ingestor.cpp | 4 | ||||
| -rw-r--r-- | src/ingestor.hpp | 2 | ||||
| -rw-r--r-- | test/test-ingest.cpp | 9 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/ingestor.cpp b/src/ingestor.cpp index c06fd1c..41dd24f 100644 --- a/src/ingestor.cpp +++ b/src/ingestor.cpp @@ -193,8 +193,8 @@ namespace WebStat { QueryString, // query_string : "%q" : "?query=string" or "" std::string_view, // protocol : %r : HTTPS/2.0 uint16_t, // status : %>s : 200 - uint64_t, // size : %B : 1234 - uint32_t, // duration : %D : 1234 + uint64_t, // size (bytes) : %B : 1234 + uint64_t, // duration (µs) : %D : 1234 CLFString, // referrer : "%{Referer}i" : "https://google.com/whatever" or "-" CLFString, // user_agent : "%{User-agent}i" : "Chromium v123.4" or "-" CLFString // content_type : "%{Content-type}o" : "test/plain" or "-" diff --git a/src/ingestor.hpp b/src/ingestor.hpp index 1a47a1b..e250072 100644 --- a/src/ingestor.hpp +++ b/src/ingestor.hpp @@ -63,7 +63,7 @@ namespace WebStat { using ScanResult = decltype(scn::scan<std::string_view, std::string_view, uint64_t, std::string_view, QuotedString, - QueryString, std::string_view, uint16_t, uint64_t, uint32_t, CLFString, CLFString, CLFString>( + QueryString, std::string_view, uint16_t, uint64_t, uint64_t, CLFString, CLFString, CLFString>( std::declval<std::string_view>(), "")); using ScanValues = std::remove_cvref_t<decltype(std::declval<WebStat::Ingestor::ScanResult>()->values())>; diff --git a/test/test-ingest.cpp b/test/test-ingest.cpp index 9c0001b..021f925 100644 --- a/test/test-ingest.cpp +++ b/test/test-ingest.cpp @@ -303,6 +303,15 @@ BOOST_AUTO_TEST_CASE(ExtractFieldsEdgeCasesUnparsable3482917779) R"LOG(lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/<?echo(md5("hi"));?>+/tmp/index1.php)LOG"); } +BOOST_AUTO_TEST_CASE(ExtractFieldsEdgeCasesUnparsable3354288) // Long duration +{ + const auto result = WebStat::Ingestor::scanLogLine( + R"LOG(git.randomdan.homeip.net 216.73.216.212 1770062062011035 GET "/repo/netfs/patch/libfusepp" "?id=46f6aa3507120f4b69a54abc02d8829eac005b6f" HTTP/2.0 200 1 7361204168 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "text/plain")LOG"); + BOOST_REQUIRE(result); + const auto duration = std::get<9>(result->values()); + BOOST_CHECK_EQUAL(7361204168, duration); +} + class TestIngestor : public WebStat::Ingestor { public: TestIngestor() : |
