Skip to content

Conversation

EhabY
Copy link
Collaborator

@EhabY EhabY commented Sep 9, 2025

Fixes #532

This PR introduces several enhancements to improve logging and consistency:

  1. Axios Logging Interceptor
    Added a logging interceptor to the Axios instance during its creation. Each request is tagged with a unique UUID, allowing us to correlate it with its corresponding response and measure the total in-flight time. To avoid excessive noise, response bodies are deliberately excluded from the logs as they were too verbose and difficult to read.

  2. Unified WebSocket Creation
    Consolidated WebSocket creation logic by standardizing on a OneWayWebSocket. For VS Code, this uses the ws Node library. Previously, there were two separate places creating their own WebSocket connections and another two relying on SSE. These SSE implementations were converted to one-way WebSockets for improved consistency and performance. Additional logging was also added to track WebSocket creation, errors, and closure events.

For now, the logging level is set to trace for non-error logs and error for errors. This can easily be adjusted later. I have also isolated the logging logic in logging/netLog.ts so it's all in one place. Let me know if we want to add more details or possibly remove some.

@EhabY EhabY force-pushed the add-logging-on-all-requests branch from eb8a0a3 to 2f0593d Compare September 9, 2025 09:41
@EhabY EhabY force-pushed the add-logging-on-all-requests branch from 437e0ff to 2f3db57 Compare September 9, 2025 12:30
@EhabY EhabY force-pushed the add-logging-on-all-requests branch from 2285279 to e32ba50 Compare September 10, 2025 08:52
Copy link
Member

@code-asher code-asher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have not had a chance to run it yet (hopefully tomorrow) but gave it a first pass and it is looking fantastic!

src/api.ts Outdated
socket.addEventListener("error", (error) => {
// Do not want to trigger the close handler.
socket.removeEventListener("close", closeHandler);
socket.close();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does an errored socket need to be closed? I think an error will automatically destroy the socket.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The answer here quotes the RFC6455, but in essence it is likely that it will be closed but we cannot be sure about this :/

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah the close event may not fire, but the underlying connection should be closed if it is still open, so calling close should be a no-op.

the client MUST Close the WebSocket Connection

Not that this really matters! It just felt like something we could leave to the library to handle, to me.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah I see your point, the Mozilla documentation:

The error event is fired when a connection with a WebSocket has been closed due to an error (some data couldn't be sent for example).

I honestly I'm not sure if the ws implementation follows the same standard here or is there a chance an error is triggered while keeping the socket open. I quickly looked at the implementation there and it seems to always call close after an error so I'll remove this for now

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yet in coder/coder there is a piece of code that does this:

socket.addEventListener("error", () => {
	onError(new Error("Connection for logs failed."));
	socket.close();
});

I am confused 😭

Copy link
Member

@code-asher code-asher Sep 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah yeah I think this is a common mistake.

is there a chance an error is triggered while keeping the socket open.

I think, if the library did decide to keep the connection open (assuming it even can), that implies the connection is still usable, so we should keep using it. Or in other words, we can defer to the library's judgement, hopefully.

@EhabY EhabY force-pushed the add-logging-on-all-requests branch from e64e992 to e97e687 Compare September 11, 2025 13:01
@EhabY EhabY force-pushed the add-logging-on-all-requests branch from d33d380 to 6739540 Compare September 12, 2025 15:38
@code-asher
Copy link
Member

code-asher commented Sep 12, 2025

Feel free to re-request a review whenever you are ready for a new one!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add debug logging around requests
2 participants