Skip to content

chore!: remove deprecated agent v1 routes #13486

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

Merged
merged 8 commits into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
646 changes: 11 additions & 635 deletions coderd/apidoc/docs.go

Large diffs are not rendered by default.

566 changes: 0 additions & 566 deletions coderd/apidoc/swagger.json

Large diffs are not rendered by default.

12 changes: 0 additions & 12 deletions coderd/coderd.go
Original file line number Diff line number Diff line change
Expand Up @@ -1004,23 +1004,11 @@ func New(options *Options) *API {
Optional: false,
}))
r.Get("/rpc", api.workspaceAgentRPC)
r.Get("/manifest", api.workspaceAgentManifest)
// This route is deprecated and will be removed in a future release.
// New agents will use /me/manifest instead.
r.Get("/metadata", api.workspaceAgentManifest)
r.Post("/startup", api.postWorkspaceAgentStartup)
r.Patch("/startup-logs", api.patchWorkspaceAgentLogsDeprecated)
r.Patch("/logs", api.patchWorkspaceAgentLogs)
r.Post("/app-health", api.postWorkspaceAppHealth)
// Deprecated: Required to support legacy agents
r.Get("/gitauth", api.workspaceAgentsGitAuth)
r.Get("/external-auth", api.workspaceAgentsExternalAuth)
r.Get("/gitsshkey", api.agentGitSSHKey)
r.Get("/coordinate", api.workspaceAgentCoordinate)
r.Post("/report-stats", api.workspaceAgentReportStats)
r.Post("/report-lifecycle", api.workspaceAgentReportLifecycle)
r.Post("/metadata", api.workspaceAgentPostMetadata)
r.Post("/metadata/{key}", api.workspaceAgentPostMetadataDeprecated)
r.Post("/log-source", api.workspaceAgentPostLogSource)
})
r.Route("/{workspaceagent}", func(r chi.Router) {
Expand Down
56 changes: 0 additions & 56 deletions coderd/deprecated.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,9 @@ package coderd
import (
"net/http"

"github.com/go-chi/chi/v5"

"cdr.dev/slog"
"github.com/coder/coder/v2/coderd/httpapi"
"github.com/coder/coder/v2/coderd/httpmw"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/codersdk/agentsdk"
)

// @Summary Removed: Get parameters by template version
Expand All @@ -34,19 +30,6 @@ func templateVersionSchemaDeprecated(rw http.ResponseWriter, r *http.Request) {
httpapi.Write(r.Context(), rw, http.StatusOK, []struct{}{})
}

// @Summary Removed: Patch workspace agent logs
// @ID removed-patch-workspace-agent-logs
// @Security CoderSessionToken
// @Accept json
// @Produce json
// @Tags Agents
// @Param request body agentsdk.PatchLogs true "logs"
// @Success 200 {object} codersdk.Response
// @Router /workspaceagents/me/startup-logs [patch]
func (api *API) patchWorkspaceAgentLogsDeprecated(rw http.ResponseWriter, r *http.Request) {
api.patchWorkspaceAgentLogs(rw, r)
}

// @Summary Removed: Get logs by workspace agent
// @ID removed-get-logs-by-workspace-agent
// @Security CoderSessionToken
Expand Down Expand Up @@ -77,45 +60,6 @@ func (api *API) workspaceAgentsGitAuth(rw http.ResponseWriter, r *http.Request)
api.workspaceAgentsExternalAuth(rw, r)
}

// @Summary Removed: Submit workspace agent metadata
// @ID removed-submit-workspace-agent-metadata
// @Security CoderSessionToken
// @Accept json
// @Tags Agents
// @Param request body agentsdk.PostMetadataRequestDeprecated true "Workspace agent metadata request"
// @Param key path string true "metadata key" format(string)
// @Success 204 "Success"
// @Router /workspaceagents/me/metadata/{key} [post]
// @x-apidocgen {"skip": true}
func (api *API) workspaceAgentPostMetadataDeprecated(rw http.ResponseWriter, r *http.Request) {
ctx := r.Context()

var req agentsdk.PostMetadataRequestDeprecated
if !httpapi.Read(ctx, rw, r, &req) {
return
}

workspaceAgent := httpmw.WorkspaceAgent(r)

key := chi.URLParam(r, "key")

err := api.workspaceAgentUpdateMetadata(ctx, workspaceAgent, agentsdk.PostMetadataRequest{
Metadata: []agentsdk.Metadata{
{
Key: key,
WorkspaceAgentMetadataResult: req,
},
},
})
if err != nil {
api.Logger.Error(ctx, "failed to handle metadata request", slog.Error(err))
httpapi.InternalServerError(rw, err)
return
}

httpapi.Write(ctx, rw, http.StatusNoContent, nil)
}

// @Summary Removed: Get workspace resources for workspace build
// @ID removed-get-workspace-resources-for-workspace-build
// @Security CoderSessionToken
Expand Down
37 changes: 25 additions & 12 deletions coderd/prometheusmetrics/insights/metricscollector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (

"cdr.dev/slog"
"cdr.dev/slog/sloggers/slogtest"
agentproto "github.com/coder/coder/v2/agent/proto"
"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbauthz"
Expand Down Expand Up @@ -87,25 +88,37 @@ func TestCollectInsights(t *testing.T) {
)

// Start an agent so that we can generate stats.
var agentClients []*agentsdk.Client
var agentClients []agentproto.DRPCAgentClient
for i, agent := range []database.WorkspaceAgent{agent1, agent2} {
agentClient := agentsdk.New(client.URL)
agentClient.SetSessionToken(agent.AuthToken.String())
agentClient.SDK.SetLogger(logger.Leveled(slog.LevelDebug).Named(fmt.Sprintf("agent%d", i+1)))
agentClients = append(agentClients, agentClient)
conn, err := agentClient.ConnectRPC(context.Background())
require.NoError(t, err)
agentAPI := agentproto.NewDRPCAgentClient(conn)
agentClients = append(agentClients, agentAPI)
}

defer func() {
for a := range agentClients {
err := agentClients[a].DRPCConn().Close()
require.NoError(t, err)
}
}()

// Fake app stats
_, err = agentClients[0].PostStats(context.Background(), &agentsdk.Stats{
// ConnectionCount must be positive as database query ignores stats with no active connections at the time frame
ConnectionsByProto: map[string]int64{"TCP": 1},
ConnectionCount: 1,
ConnectionMedianLatencyMS: 15,
// Session counts must be positive, but the exact value is ignored.
// Database query approximates it to 60s of usage.
SessionCountSSH: 99,
SessionCountJetBrains: 47,
SessionCountVSCode: 34,
_, err = agentClients[0].UpdateStats(context.Background(), &agentproto.UpdateStatsRequest{
Stats: &agentproto.Stats{
// ConnectionCount must be positive as database query ignores stats with no active connections at the time frame
ConnectionsByProto: map[string]int64{"TCP": 1},
ConnectionCount: 1,
ConnectionMedianLatencyMs: 15,
// Session counts must be positive, but the exact value is ignored.
// Database query approximates it to 60s of usage.
SessionCountSsh: 99,
SessionCountJetbrains: 47,
SessionCountVscode: 34,
},
})
require.NoError(t, err, "unable to post fake stats")

Expand Down
57 changes: 35 additions & 22 deletions coderd/prometheusmetrics/prometheusmetrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"cdr.dev/slog"
"cdr.dev/slog/sloggers/slogtest"

agentproto "github.com/coder/coder/v2/agent/proto"
"github.com/coder/coder/v2/coderd/agentmetrics"
"github.com/coder/coder/v2/coderd/batchstats"
"github.com/coder/coder/v2/coderd/coderdtest"
Expand Down Expand Up @@ -415,36 +416,45 @@ func TestAgentStats(t *testing.T) {

user := coderdtest.CreateFirstUser(t, client)

agent1 := prepareWorkspaceAndAgent(t, client, user, 1)
agent2 := prepareWorkspaceAndAgent(t, client, user, 2)
agent3 := prepareWorkspaceAndAgent(t, client, user, 3)
agent1 := prepareWorkspaceAndAgent(ctx, t, client, user, 1)
agent2 := prepareWorkspaceAndAgent(ctx, t, client, user, 2)
agent3 := prepareWorkspaceAndAgent(ctx, t, client, user, 3)
defer agent1.DRPCConn().Close()
defer agent2.DRPCConn().Close()
defer agent3.DRPCConn().Close()

registry := prometheus.NewRegistry()

// given
var i int64
for i = 0; i < 3; i++ {
_, err = agent1.PostStats(ctx, &agentsdk.Stats{
TxBytes: 1 + i, RxBytes: 2 + i,
SessionCountVSCode: 3 + i, SessionCountJetBrains: 4 + i, SessionCountReconnectingPTY: 5 + i, SessionCountSSH: 6 + i,
ConnectionCount: 7 + i, ConnectionMedianLatencyMS: 8000,
ConnectionsByProto: map[string]int64{"TCP": 1},
_, err = agent1.UpdateStats(ctx, &agentproto.UpdateStatsRequest{
Stats: &agentproto.Stats{
TxBytes: 1 + i, RxBytes: 2 + i,
SessionCountVscode: 3 + i, SessionCountJetbrains: 4 + i, SessionCountReconnectingPty: 5 + i, SessionCountSsh: 6 + i,
ConnectionCount: 7 + i, ConnectionMedianLatencyMs: 8000,
ConnectionsByProto: map[string]int64{"TCP": 1},
},
})
require.NoError(t, err)

_, err = agent2.PostStats(ctx, &agentsdk.Stats{
TxBytes: 2 + i, RxBytes: 4 + i,
SessionCountVSCode: 6 + i, SessionCountJetBrains: 8 + i, SessionCountReconnectingPTY: 10 + i, SessionCountSSH: 12 + i,
ConnectionCount: 8 + i, ConnectionMedianLatencyMS: 10000,
ConnectionsByProto: map[string]int64{"TCP": 1},
_, err = agent2.UpdateStats(ctx, &agentproto.UpdateStatsRequest{
Stats: &agentproto.Stats{
TxBytes: 2 + i, RxBytes: 4 + i,
SessionCountVscode: 6 + i, SessionCountJetbrains: 8 + i, SessionCountReconnectingPty: 10 + i, SessionCountSsh: 12 + i,
ConnectionCount: 8 + i, ConnectionMedianLatencyMs: 10000,
ConnectionsByProto: map[string]int64{"TCP": 1},
},
})
require.NoError(t, err)

_, err = agent3.PostStats(ctx, &agentsdk.Stats{
TxBytes: 3 + i, RxBytes: 6 + i,
SessionCountVSCode: 12 + i, SessionCountJetBrains: 14 + i, SessionCountReconnectingPTY: 16 + i, SessionCountSSH: 18 + i,
ConnectionCount: 9 + i, ConnectionMedianLatencyMS: 12000,
ConnectionsByProto: map[string]int64{"TCP": 1},
_, err = agent3.UpdateStats(ctx, &agentproto.UpdateStatsRequest{
Stats: &agentproto.Stats{
TxBytes: 3 + i, RxBytes: 6 + i,
SessionCountVscode: 12 + i, SessionCountJetbrains: 14 + i, SessionCountReconnectingPty: 16 + i, SessionCountSsh: 18 + i,
ConnectionCount: 9 + i, ConnectionMedianLatencyMs: 12000,
ConnectionsByProto: map[string]int64{"TCP": 1},
},
})
require.NoError(t, err)
}
Expand Down Expand Up @@ -596,7 +606,7 @@ func TestExperimentsMetric(t *testing.T) {
}
}

func prepareWorkspaceAndAgent(t *testing.T, client *codersdk.Client, user codersdk.CreateFirstUserResponse, workspaceNum int) *agentsdk.Client {
func prepareWorkspaceAndAgent(ctx context.Context, t *testing.T, client *codersdk.Client, user codersdk.CreateFirstUserResponse, workspaceNum int) agentproto.DRPCAgentClient {
authToken := uuid.NewString()

version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
Expand All @@ -611,9 +621,12 @@ func prepareWorkspaceAndAgent(t *testing.T, client *codersdk.Client, user coders
})
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)

agentClient := agentsdk.New(client.URL)
agentClient.SetSessionToken(authToken)
return agentClient
ac := agentsdk.New(client.URL)
ac.SetSessionToken(authToken)
conn, err := ac.ConnectRPC(ctx)
require.NoError(t, err)
agentAPI := agentproto.NewDRPCAgentClient(conn)
return agentAPI
}

var (
Expand Down
Loading
Loading