-
Notifications
You must be signed in to change notification settings - Fork 32
Add logging on all RESTful and WebSocket requests in VS Code #580
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
eb8a0a3
to
2f0593d
Compare
437e0ff
to
2f3db57
Compare
2285279
to
e32ba50
Compare
There was a problem hiding this 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(); |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 :/
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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 😭
There was a problem hiding this comment.
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.
e64e992
to
e97e687
Compare
d33d380
to
6739540
Compare
Feel free to re-request a review whenever you are ready for a new one! |
Fixes #532
This PR introduces several enhancements to improve logging and consistency:
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.
Unified WebSocket Creation
Consolidated WebSocket creation logic by standardizing on a
OneWayWebSocket
. For VS Code, this uses thews
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 anderror
for errors. This can easily be adjusted later. I have also isolated the logging logic inlogging/netLog.ts
so it's all in one place. Let me know if we want to add more details or possibly remove some.