<feed xmlns='http://www.w3.org/2005/Atom'>
<title>WebStat analyser/src/ingestor.cpp, branch webstat-0.6</title>
<subtitle>WebStat web site access analyser</subtitle>
<id>http://git.randomdan.homeip.net/repo/webstat/atom?h=webstat-0.6</id>
<link rel='self' href='http://git.randomdan.homeip.net/repo/webstat/atom?h=webstat-0.6'/>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/'/>
<updated>2026-06-08T11:31:07Z</updated>
<entry>
<title>Remove the purge time limit</title>
<updated>2026-06-08T11:31:07Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-06-08T11:31:07Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=ee9517e452376bc4963aa3a43ca90ebb9d710b85'/>
<id>urn:sha1:ee9517e452376bc4963aa3a43ca90ebb9d710b85</id>
<content type='text'>
This is a background job, has been for a while, so we can sanely allow
it to run for as long as is required.
</content>
</entry>
<entry>
<title>Switch to std::fstream and std::print for parkLogLines</title>
<updated>2026-05-20T16:04:30Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-05-20T16:03:23Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=bca5ac479de5721e354b70d627fb9654bd94bdee'/>
<id>urn:sha1:bca5ac479de5721e354b70d627fb9654bd94bdee</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Change bytesToHexRange into a transform view variable</title>
<updated>2026-05-20T11:22:27Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-05-20T11:22:27Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=161f32ebaea5988fe97ad03ad669eca2222e2a54'/>
<id>urn:sha1:161f32ebaea5988fe97ad03ad669eca2222e2a54</id>
<content type='text'>
Simply create the transform constexpr and then apply it to any
collection with the restriction of passing it to a function.
</content>
</entry>
<entry>
<title>Run the retry uninsertable process batched</title>
<updated>2026-05-18T23:36:50Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-05-18T23:36:50Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=b298237a297cb70640c85c016b702a35ecafd9b9'/>
<id>urn:sha1:b298237a297cb70640c85c016b702a35ecafd9b9</id>
<content type='text'>
Standard sized batch in a transaction, ordered by entity id.
Includes early exit if terminated.
</content>
</entry>
<entry>
<title>Add job to retry insertion of log lines which had previously failed</title>
<updated>2026-05-18T19:43:51Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-05-18T19:43:51Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=e1a6654bd5e284842ffbc3b93bd390f3bad7a187'/>
<id>urn:sha1:e1a6654bd5e284842ffbc3b93bd390f3bad7a187</id>
<content type='text'>
Entities are reparsed and reinserted, removed on success.
Failure to parse updates the entity type to UnparsableLine.
Failure to insert again updates the detail with the reason.
</content>
</entry>
<entry>
<title>Extract ENTITY_IDS helper</title>
<updated>2026-05-17T16:45:53Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-05-17T16:45:53Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=e8a0fb7b9c61d5603a86b52e0f2144a91fd1d84e'/>
<id>urn:sha1:e8a0fb7b9c61d5603a86b52e0f2144a91fd1d84e</id>
<content type='text'>
Transform view for getting just the hash and record of a stored entity.
</content>
</entry>
<entry>
<title>Add ThreadSafeT helper</title>
<updated>2026-05-17T15:18:08Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-05-17T13:32:11Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06'/>
<id>urn:sha1:7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06</id>
<content type='text'>
Wraps a templated value and a templated mutex (defaults to shared_mutex)
and provides safe access, locked with either a shared_lock (const value)
or lock_guard (non-const value).
Applies this to existingEntities.
</content>
</entry>
<entry>
<title>Check terminated flag in jobPurgeOldLogs</title>
<updated>2026-05-13T14:49:10Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-05-13T14:49:10Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=29f458117184af5b1507cac01b48b41bfbad568a'/>
<id>urn:sha1:29f458117184af5b1507cac01b48b41bfbad568a</id>
<content type='text'>
It's not critical to run to completion during shutdown, we can pick up
where we left off on the next run. This will allow us to bail out
instead of holding up the shutdown process.
</content>
</entry>
<entry>
<title>Fix checking of background job completeness</title>
<updated>2026-05-13T14:21:06Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-05-13T14:21:06Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=3e7a1ce999b2223b321573de19cef840021f77f5'/>
<id>urn:sha1:3e7a1ce999b2223b321573de19cef840021f77f5</id>
<content type='text'>
OK, this is on me. future::valid does not tell you if the thread has
completed and the result is ready. It tells you if there is some state
you can get() maybe later. Here we replace those checks with a 0s wait
and a test to see if the status is ready.
The exit steps are updated to reflect this. Calling reset will invoke
the future's destructor, which blocks until the thread is joined as
needed.
This should hopefully address the issue where the main thread would
still block if it attempted to runJobAsNeeded for a job that was still
running.
</content>
</entry>
<entry>
<title>Remove maxBatches</title>
<updated>2026-05-13T14:01:30Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-05-13T14:01:30Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=868446ad4d8ba33053b048dd4d82b6d4f5328f07'/>
<id>urn:sha1:868446ad4d8ba33053b048dd4d82b6d4f5328f07</id>
<content type='text'>
It's not required; DB insertion occurs only in a background thread now.
</content>
</entry>
</feed>
