mirror of
https://github.com/coder/coder.git
synced 2025-07-18 14:17:22 +00:00
feat: add telemetry to user-scoped tailnet API call (#17065)
Adds support for sending telemetry on calls to the User-scoped tailnet RPC endpoint. This is currently used only by Coder Desktop. Later PRs will fill in the version, OS information, and device ID via HTTP headers.
This commit is contained in:
@ -23,6 +23,8 @@ import (
|
||||
"tailscale.com/tailcfg"
|
||||
|
||||
"cdr.dev/slog"
|
||||
"github.com/coder/websocket"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/agentapi"
|
||||
"github.com/coder/coder/v2/coderd/database"
|
||||
"github.com/coder/coder/v2/coderd/database/db2sdk"
|
||||
@ -34,6 +36,7 @@ import (
|
||||
"github.com/coder/coder/v2/coderd/jwtutils"
|
||||
"github.com/coder/coder/v2/coderd/rbac"
|
||||
"github.com/coder/coder/v2/coderd/rbac/policy"
|
||||
"github.com/coder/coder/v2/coderd/telemetry"
|
||||
maputil "github.com/coder/coder/v2/coderd/util/maps"
|
||||
"github.com/coder/coder/v2/coderd/wspubsub"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
@ -42,7 +45,6 @@ import (
|
||||
"github.com/coder/coder/v2/codersdk/wsjson"
|
||||
"github.com/coder/coder/v2/tailnet"
|
||||
"github.com/coder/coder/v2/tailnet/proto"
|
||||
"github.com/coder/websocket"
|
||||
)
|
||||
|
||||
// @Summary Get workspace agent by ID
|
||||
@ -1635,6 +1637,33 @@ func (api *API) tailnetRPCConn(rw http.ResponseWriter, r *http.Request) {
|
||||
defer wsNetConn.Close()
|
||||
defer conn.Close(websocket.StatusNormalClosure, "")
|
||||
|
||||
// Get user ID for telemetry
|
||||
apiKey := httpmw.APIKey(r)
|
||||
userID := apiKey.UserID.String()
|
||||
|
||||
// Store connection telemetry event
|
||||
now := time.Now()
|
||||
connectionTelemetryEvent := telemetry.UserTailnetConnection{
|
||||
ConnectedAt: now,
|
||||
DisconnectedAt: nil,
|
||||
UserID: userID,
|
||||
PeerID: peerID.String(),
|
||||
DeviceID: nil,
|
||||
DeviceOS: nil,
|
||||
CoderDesktopVersion: nil,
|
||||
}
|
||||
api.Telemetry.Report(&telemetry.Snapshot{
|
||||
UserTailnetConnections: []telemetry.UserTailnetConnection{connectionTelemetryEvent},
|
||||
})
|
||||
defer func() {
|
||||
// Update telemetry event with disconnection time
|
||||
disconnectTime := time.Now()
|
||||
connectionTelemetryEvent.DisconnectedAt = &disconnectTime
|
||||
api.Telemetry.Report(&telemetry.Snapshot{
|
||||
UserTailnetConnections: []telemetry.UserTailnetConnection{connectionTelemetryEvent},
|
||||
})
|
||||
}()
|
||||
|
||||
go httpapi.Heartbeat(ctx, conn)
|
||||
err = api.TailnetClientService.ServeClient(ctx, version, wsNetConn, tailnet.StreamID{
|
||||
Name: "client",
|
||||
|
Reference in New Issue
Block a user