Move RecordingWebSocketClient to test internal so it can be used by all modules.
Only generate the metrics JSON websocket packet if there are listeners.
Remove the metrics listener when the websocket closes.
Render the health check results as domain objects so users can control how they are rendered.