<feed xmlns='http://www.w3.org/2005/Atom'>
<title>WebStat analyser/src, branch main</title>
<subtitle>WebStat web site access analyser</subtitle>
<id>http://git.randomdan.homeip.net/repo/webstat/atom?h=main</id>
<link rel='self' href='http://git.randomdan.homeip.net/repo/webstat/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/'/>
<updated>2026-06-08T22:36:01Z</updated>
<entry>
<title>Select uninsertable is for update</title>
<updated>2026-06-08T22:36:01Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-06-08T22:36:01Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=856527b65e3c4807cf2bfb9d0e495d9712d56a90'/>
<id>urn:sha1:856527b65e3c4807cf2bfb9d0e495d9712d56a90</id>
<content type='text'>
This prevents other instances acting on the same rows in parallel,
potentially duplicating the rows and effort.
</content>
</entry>
<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>Don't order rows when purging</title>
<updated>2026-06-08T10:27:49Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan.goodliffe@octal.co.uk</email>
</author>
<published>2026-06-08T10:27:49Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=aa8f64a3e140e74a1f8d0074b606dd1f8560ad0a'/>
<id>urn:sha1:aa8f64a3e140e74a1f8d0074b606dd1f8560ad0a</id>
<content type='text'>
The need to purge rows in request_time order is not necessary (all rows
will be deleted at some point in the process anyway) and is otherwise
extremely expensive. Removing the order by clause is a roughly 300x
speed up.
</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>Add index for uninsertable lines with no failure detail</title>
<updated>2026-05-18T23:53:27Z</updated>
<author>
<name>Dan Goodliffe</name>
<email>dan@randomdan.homeip.net</email>
</author>
<published>2026-05-18T23:53:27Z</published>
<link rel='alternate' type='text/html' href='http://git.randomdan.homeip.net/repo/webstat/commit/?id=cabd894779c2d2e453c8ed7771fdbd17c881bc2c'/>
<id>urn:sha1:cabd894779c2d2e453c8ed7771fdbd17c881bc2c</id>
<content type='text'>
This index would be empty under normal conditions.
</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>
</feed>
