diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-09-09 23:45:39 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-09-10 18:28:33 +0100 |
commit | c9b3d45d2598ebef2df889c0b9967ef473405528 (patch) | |
tree | b99724362575e8a782bd3c2aebbd8f54b075a42b /src/ingestor.cpp | |
parent | 2eb8897706128f3590a5b4f9ee8f3e755b74f097 (diff) | |
download | webstat-c9b3d45d2598ebef2df889c0b9967ef473405528.tar.bz2 webstat-c9b3d45d2598ebef2df889c0b9967ef473405528.tar.xz webstat-c9b3d45d2598ebef2df889c0b9967ef473405528.zip |
Use curl_multi_poll in main ingestLog loop
Preparation step for having background curl operations.
Diffstat (limited to 'src/ingestor.cpp')
-rw-r--r-- | src/ingestor.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/ingestor.cpp b/src/ingestor.cpp index 87167b5..6dd369e 100644 --- a/src/ingestor.cpp +++ b/src/ingestor.cpp @@ -58,7 +58,7 @@ namespace WebStat { } Ingestor::Ingestor(const utsname & host, DB::ConnectionPoolPtr dbpl) : - hostnameId {crc32(host.nodename)}, dbpool {std::move(dbpl)} + hostnameId {crc32(host.nodename)}, dbpool {std::move(dbpl)}, curl {curl_multi_init()} { auto dbconn = dbpool->get(); auto ins = dbconn->modify(SQL::HOST_UPSERT, SQL::HOST_UPSERT_OPTS); @@ -89,9 +89,18 @@ namespace WebStat { void Ingestor::ingestLog(std::FILE * input) { - while (auto line = scn::scan<std::string>(input, "{:[^\n]}\n")) { - linesRead++; - ingestLogLine(dbpool->get().get(), line->value()); + curl_waitfd logIn {.fd = fileno(input), .events = CURL_WAIT_POLLIN, .revents = 0}; + + while (curl_multi_poll(curl.get(), &logIn, 1, INT_MAX, nullptr) == CURLM_OK) { + if (logIn.revents) { + if (auto line = scn::scan<std::string>(input, "{:[^\n]}\n")) { + linesRead++; + ingestLogLine(dbpool->get().get(), line->value()); + } + else { + break; + } + } } } |