20219: Replace API & websocket log loading with webdav polling
* Add apiWebdavClient to log service for making webdav requests to the API and
differentiate from keepWebdavClient
* Add listLogFiles and getLogFileContents methods to log service, contents can
be fetched with range request
* Add loadContainerLogFileContents to load logs using webdav range requests
* Files larger than the chunk limit (128k) are loaded as beginning and end
in 2 64k fragments, snipline is appended to the last line of the first
fragment
* The chunks are all requested in parallel
* Add sorting of timestamped log types in combined log views (Main/All)
* Lines without timestamps are merged with previous lines with timestamps
* If no preceding lines of a sortable type exist, the leading lines are
removed from combined log views - they can still be seen in the single
log type filter
* Non-timestamped log types (node-info/contaner) are pushed to the bottom
with original ordering in All view
* Merging & sorting is not applied to single log type view
* Remove snipline LogEventType as all sniplines now belong to specific log
event types
* Update logs panel store and reducer to remember the last log byte requested
* Add polling useAsyncInterval utility function to poll log file sizes
* Polling awaits for callback to finish to prevent race conditions
* Update process log code snippet style to remove gap between array of loglines
* Remove websocket handling of log events
* Replaced cypress log manipulation commands with webdav log helpers
* Add tests for polling, line sorting, correctly sized/positioned chunks, and
snipline
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen@curii.com>
16 files changed: