Skip to content

Commit b31ec33

Browse files
committed
feat(coderd): implement user latency insights logic
1 parent 8a1d3ee commit b31ec33

File tree

17 files changed

+223
-40
lines changed

17 files changed

+223
-40
lines changed

coderd/apidoc/docs.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbauthz/dbauthz.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,13 @@ func (q *querier) GetTemplateDAUs(ctx context.Context, arg database.GetTemplateD
11731173
return q.db.GetTemplateDAUs(ctx, arg)
11741174
}
11751175

1176+
func (q *querier) GetTemplateUserLatencyStats(ctx context.Context, arg database.GetTemplateUserLatencyStatsParams) ([]database.GetTemplateUserLatencyStatsRow, error) {
1177+
if err := q.authorizeContext(ctx, rbac.ActionRead, rbac.ResourceSystem); err != nil {
1178+
return nil, err
1179+
}
1180+
return q.db.GetTemplateUserLatencyStats(ctx, arg)
1181+
}
1182+
11761183
func (q *querier) GetTemplateVersionByID(ctx context.Context, tvid uuid.UUID) (database.TemplateVersion, error) {
11771184
tv, err := q.db.GetTemplateVersionByID(ctx, tvid)
11781185
if err != nil {

coderd/database/dbfake/dbfake.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,6 +1917,15 @@ func (q *FakeQuerier) GetTemplateDAUs(_ context.Context, arg database.GetTemplat
19171917
return rs, nil
19181918
}
19191919

1920+
func (q *FakeQuerier) GetTemplateUserLatencyStats(ctx context.Context, arg database.GetTemplateUserLatencyStatsParams) ([]database.GetTemplateUserLatencyStatsRow, error) {
1921+
err := validateDatabaseType(arg)
1922+
if err != nil {
1923+
return nil, err
1924+
}
1925+
1926+
panic("not implemented")
1927+
}
1928+
19201929
func (q *FakeQuerier) GetTemplateVersionByID(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) {
19211930
q.mutex.RLock()
19221931
defer q.mutex.RUnlock()
@@ -5263,9 +5272,9 @@ func (q *FakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
52635272
}
52645273
}
52655274

5266-
if len(arg.TemplateIds) > 0 {
5275+
if len(arg.TemplateIDs) > 0 {
52675276
match := false
5268-
for _, id := range arg.TemplateIds {
5277+
for _, id := range arg.TemplateIDs {
52695278
if workspace.TemplateID == id {
52705279
match = true
52715280
break

coderd/database/dbmetrics/dbmetrics.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/modelqueries.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ func (q *sqlQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg GetWorkspa
209209
arg.OwnerID,
210210
arg.OwnerUsername,
211211
arg.TemplateName,
212-
pq.Array(arg.TemplateIds),
212+
pq.Array(arg.TemplateIDs),
213213
arg.Name,
214214
arg.HasAgent,
215215
arg.AgentInactiveDisconnectTimeoutSeconds,

coderd/database/querier.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 63 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaceagentstats.sql

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,21 @@ JOIN
155155
workspaces
156156
ON
157157
workspaces.id = agent_stats.workspace_id;
158+
159+
160+
-- name: GetTemplateUserLatencyStats :many
161+
SELECT
162+
workspace_agent_stats.user_id,
163+
users.username,
164+
array_agg(DISTINCT template_id)::uuid[] AS template_ids,
165+
coalesce((PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY connection_median_latency_ms)), -1)::FLOAT AS workspace_connection_latency_50,
166+
coalesce((PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY connection_median_latency_ms)), -1)::FLOAT AS workspace_connection_latency_95
167+
FROM workspace_agent_stats
168+
JOIN users ON (users.id = workspace_agent_stats.user_id)
169+
WHERE
170+
workspace_agent_stats.created_at >= @start_time
171+
AND workspace_agent_stats.created_at < @end_time
172+
AND workspace_agent_stats.connection_median_latency_ms > 0
173+
AND CASE WHEN COALESCE(array_length(@template_ids::uuid[], 1), 0) > 0 THEN template_id = ANY(@template_ids::uuid[]) ELSE TRUE END
174+
GROUP BY workspace_agent_stats.user_id, users.username
175+
ORDER BY user_id ASC;

0 commit comments

Comments
 (0)