Skip to content
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

Playback of long (~200 MB) session crashes the browser tab #10578

Closed
Tener opened this issue Feb 24, 2022 · 1 comment · Fixed by #36168
Closed

Playback of long (~200 MB) session crashes the browser tab #10578

Tener opened this issue Feb 24, 2022 · 1 comment · Fixed by #36168
Labels
audit-log Issues related to Teleports Audit Log bug test-plan-problem Issues which have been surfaced by running the manual release test plan ui ux

Comments

@Tener
Copy link
Contributor

Tener commented Feb 24, 2022

Description

What happened:

Playback of session with single command ("find /") caused the browser (Google Chrome) to crash, after several seconds of wait. When measured with tsh play I found the session to be ~200 MB long.

What you expected to happen:

Playback working.

@Tener Tener added the bug label Feb 24, 2022
@zmb3 zmb3 added the test-plan-problem Issues which have been surfaced by running the manual release test plan label Feb 24, 2022
@zmb3 zmb3 added the audit-log Issues related to Teleports Audit Log label May 17, 2022
@schneider82
Copy link

This is an issue I'm also running into. I have a "Kiosk" running just Chromium. Once Teleport is installed, chromium constantly reboots, causing the BrowserMetrics to fill up. I can't find any report on why this happens, but the folder becomes HUGE in a few days, and the system crashes... Also, the kiosk is unusable, given the reboot.

zmb3 added a commit that referenced this issue Oct 31, 2023
This new API can be used to play back sessions of any type.
The player accepts a session ID and a streamer, and provides
the caller with an API for playback controls (speed, play/pause,
seek, etc) as well as a channel that receives events with the
proper timing delay applied.

The design for this change is discussed in RFD 91.

Updates #10578
Updates #10579
Updates gravitational/teleport-private#665
Updates gravitational/teleport-private#1024
github-merge-queue bot pushed a commit that referenced this issue Oct 31, 2023
This new API can be used to play back sessions of any type.
The player accepts a session ID and a streamer, and provides
the caller with an API for playback controls (speed, play/pause,
seek, etc) as well as a channel that receives events with the
proper timing delay applied.

The design for this change is discussed in RFD 91.

Updates #10578
Updates #10579
Updates gravitational/teleport-private#665
Updates gravitational/teleport-private#1024
zmb3 added a commit that referenced this issue Dec 27, 2023
Prior to this, the web UI would download the entire session recording
and store it in JavaScript memory before starting playback. This caused
the browser tab to crash when attempting to play back sessions larger
than ~5MB.

Updates gravitational/teleport-private#1024
Closes gravitational/teleport-private#665
Closes #10578
zmb3 added a commit that referenced this issue Dec 27, 2023
Prior to this, the web UI would download the entire session recording
and store it in JavaScript memory before starting playback. This caused
the browser tab to crash when attempting to play back sessions larger
than ~5MB.

Updates gravitational/teleport-private#1024
Closes gravitational/teleport-private#665
Closes #10578
zmb3 added a commit that referenced this issue Dec 28, 2023
Prior to this, the web UI would download the entire session recording
and store it in JavaScript memory before starting playback. This caused
the browser tab to crash when attempting to play back sessions larger
than ~5MB.

Updates gravitational/teleport-private#1024
Closes gravitational/teleport-private#665
Closes #10578
zmb3 added a commit that referenced this issue Jan 6, 2024
Prior to this, the web UI would download the entire session recording
and store it in JavaScript memory before starting playback. This caused
the browser tab to crash when attempting to play back sessions larger
than ~5MB.

For playback, we use a custom binary protocol rather than the protobuf
envelopes that we use for live sessions. The protobuf envelopes only
send raw PTY data, there is no place to put the timing data. Adding
fields to the envelope would be a disruptive change because our JS
codec is hand-rolled and we'd have to make the parsing updates manually.

Updates gravitational/teleport-private#1024
Closes gravitational/teleport-private#665
Closes #10578
github-merge-queue bot pushed a commit that referenced this issue Jan 6, 2024
Prior to this, the web UI would download the entire session recording
and store it in JavaScript memory before starting playback. This caused
the browser tab to crash when attempting to play back sessions larger
than ~5MB.

For playback, we use a custom binary protocol rather than the protobuf
envelopes that we use for live sessions. The protobuf envelopes only
send raw PTY data, there is no place to put the timing data. Adding
fields to the envelope would be a disruptive change because our JS
codec is hand-rolled and we'd have to make the parsing updates manually.

Updates gravitational/teleport-private#1024
Closes gravitational/teleport-private#665
Closes #10578
ibeckermayer pushed a commit that referenced this issue Jan 17, 2024
Prior to this, the web UI would download the entire session recording
and store it in JavaScript memory before starting playback. This caused
the browser tab to crash when attempting to play back sessions larger
than ~5MB.

For playback, we use a custom binary protocol rather than the protobuf
envelopes that we use for live sessions. The protobuf envelopes only
send raw PTY data, there is no place to put the timing data. Adding
fields to the envelope would be a disruptive change because our JS
codec is hand-rolled and we'd have to make the parsing updates manually.

Updates gravitational/teleport-private#1024
Closes gravitational/teleport-private#665
Closes #10578
ibeckermayer pushed a commit that referenced this issue Feb 10, 2024
This new API can be used to play back sessions of any type.
The player accepts a session ID and a streamer, and provides
the caller with an API for playback controls (speed, play/pause,
seek, etc) as well as a channel that receives events with the
proper timing delay applied.

The design for this change is discussed in RFD 91.

Updates #10578
Updates #10579
Updates gravitational/teleport-private#665
Updates gravitational/teleport-private#1024
lxea pushed a commit that referenced this issue Feb 13, 2024
This new API can be used to play back sessions of any type.
The player accepts a session ID and a streamer, and provides
the caller with an API for playback controls (speed, play/pause,
seek, etc) as well as a channel that receives events with the
proper timing delay applied.

The design for this change is discussed in RFD 91.

Updates #10578
Updates #10579
Updates gravitational/teleport-private#665
Updates gravitational/teleport-private#1024
github-merge-queue bot pushed a commit that referenced this issue Feb 13, 2024
* Introduce a new streaming player API (#31754)

This new API can be used to play back sessions of any type.
The player accepts a session ID and a streamer, and provides
the caller with an API for playback controls (speed, play/pause,
seek, etc) as well as a channel that receives events with the
proper timing delay applied.

The design for this change is discussed in RFD 91.

Updates #10578
Updates #10579
Updates gravitational/teleport-private#665
Updates gravitational/teleport-private#1024

* Convert the desktop sesssion player to the new player API (#34070)

This makes a few changes to the player API to ensure that errors
are correctly propagated.

* Switch desktop playback to gorilla/websocket (#36405)

We use gorilla/websocket throughout the app, but desktop playback
leveraged x/net/websocket instead. Convert to gorilla so that we
are consistent and use the same library everywhere websockets are
used.

* Read the bearer token over websocket endpoints instead of query parameter (#37520)

* Read the bearer token over WS endpoints

use the request context, not session

Dont pass websocket by context

lint

resolve some comments

Add TestWSAuthenticateRequest

Close ws in handler

deprecation notices, doc

resolve comments

resolve comments

give a longer read/write deadline

dont set write deadline, ws endpoints never did before and it breaks things

convert frontend to use ws access token

Resolove comments, move to using an explicit state

fix ci

reset read deadline

prettier

* update connectToHost

* linter

* read errors from websocket

* missing /ws on ttyWsAddr and fix wrong onmessage

* fix race in test

* lint

* skip TestTerminal as it takes 11 seconds to run

* dont skip the test

* resolve apiserver comments

* Add an AuthenticatedWebSocket class

* convert other clients to use AuthenticatedWebSocket

* Converts `AuthenticatedWebSocket` into drop-in replacement for `WebSocket` (#37699)

* Converts `AuthenticatedWebSocket` into drop-in replacement for `WebSocket`
that automatically goes through Teleport's custom authentication process
before facilitating any caller-defined communication.

This also reverts previous-`WebSocket` users to their original state
(sans the code for passing the bearer token in the query string),
swapping in `AuthenticatedWebSocket` in place of `WebSocket`.

* Create a single authnWsUpgrader with a comment justifying why we turn off CORS

* recieving to receiving

* resolve comments

---------

Co-authored-by: Isaiah Becker-Mayer <isaiah@goteleport.com>

* Updates `desktopPlaybackHandle` to new ws paradigm (#37981)

* Updates `desktopPlaybackHandle` to new ws paradigm

This was mistakenly left out of #37520.
This commit also refactors `WithClusterAuthWebSocket` slightly for easier
comprehension, and updates the vite config to facilitate the new websocket
endpoints in development mode.

* Update lib/web/apiserver.go

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>

---------

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>

* polishing off merge errors

* fixes Path in makeTerminal to reflect new /ws suffix

---------

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
Co-authored-by: Alex McGrath <alex.mcgrath@goteleport.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
audit-log Issues related to Teleports Audit Log bug test-plan-problem Issues which have been surfaced by running the manual release test plan ui ux
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants