Skip to content

Introduce a new streaming player API#31754

Merged
zmb3 merged 1 commit intomasterfrom
zmb3/streaming-player
Oct 31, 2023
Merged

Introduce a new streaming player API#31754
zmb3 merged 1 commit intomasterfrom
zmb3/streaming-player

Conversation

@zmb3
Copy link
Copy Markdown
Collaborator

@zmb3 zmb3 commented Sep 12, 2023

This new streaming API can be used to play back sessions of any type. The general idea is that you give it a session ID and it gives you back a channel where you can read events. The player will emit events at the correct time based on the timestamps in the recording and the current playback speed, so consumers of the API can just take the event and immediately "render" it. For tsh playback "render" means write to the console, and for desktop sessions it means sending the event data to the browser.

This includes support for play/pause, configurable playback speeds, and seeking forward and backward.

Nothing leverages this API yet. Subsequent changes will update tsh and the web UI to take advantage of it.

The design for this change is discussed in RFD 91.

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

@zmb3 zmb3 requested a review from Tener September 12, 2023 14:23
@github-actions github-actions Bot requested a review from jakule September 12, 2023 14:23
Copy link
Copy Markdown
Contributor

@Tener Tener left a comment

Choose a reason for hiding this comment

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

Would you mind adding the tsh change too? This way the PR would be easier to play with.

Comment thread lib/player/player.go Outdated
Comment thread lib/player/player.go Outdated
@zmb3 zmb3 force-pushed the zmb3/streaming-player branch from 5be8f23 to 3a408de Compare September 12, 2023 14:56
Copy link
Copy Markdown
Contributor

@jakule jakule left a comment

Choose a reason for hiding this comment

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

Left a few comments. Overall looks good.

Comment thread lib/player/player.go Outdated
Comment thread lib/player/player.go Outdated
Comment thread lib/player/player.go Outdated
Comment thread lib/player/player.go
Comment thread lib/player/player_test.go Outdated
Comment thread lib/player/player_test.go
Comment thread lib/player/player_test.go
Comment thread lib/player/player_test.go Outdated
@jakule
Copy link
Copy Markdown
Contributor

jakule commented Oct 13, 2023

Linter is complaining about missing license it those files

lib/player/player.go
lib/player/player_test.go

@zmb3 zmb3 force-pushed the zmb3/streaming-player branch from 3a408de to 45d59ee Compare October 29, 2023 01:25
@github-actions
Copy link
Copy Markdown
Contributor

The PR changelog entry failed validation: Changelog entry not found in the PR body. Please add a "no-changelog" label to the PR, or changelog lines starting with changelog: followed by the changelog entries for the PR.

@zmb3 zmb3 requested a review from rosstimothy October 29, 2023 01:28
@zmb3 zmb3 added the no-changelog Indicates that a PR does not require a changelog entry label Oct 29, 2023
@public-teleport-github-review-bot public-teleport-github-review-bot Bot removed the request for review from rosstimothy October 30, 2023 09:59
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 zmb3 force-pushed the zmb3/streaming-player branch from 45d59ee to 8399fc1 Compare October 31, 2023 04:06
@zmb3 zmb3 added this pull request to the merge queue Oct 31, 2023
Merged via the queue into master with commit 3c9e6bd Oct 31, 2023
@zmb3 zmb3 deleted the zmb3/streaming-player branch October 31, 2023 04:49
ibeckermayer pushed a commit that referenced this pull request 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 pull request 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 pull request 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

no-changelog Indicates that a PR does not require a changelog entry size/md

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants