Skip to content

Commit 1f5fb4e

Browse files
committed
feat(coderd/database): rewrite GetTemplateInsightsByTemplate to use template_usage_stats
1 parent 2332d81 commit 1f5fb4e

File tree

2 files changed

+70
-48
lines changed

2 files changed

+70
-48
lines changed

coderd/database/queries.sql.go

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

coderd/database/queries/insights.sql

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -145,31 +145,40 @@ FROM
145145
insights;
146146

147147
-- name: GetTemplateInsightsByTemplate :many
148-
WITH agent_stats_by_interval_and_user AS (
149-
SELECT
150-
date_trunc('minute', was.created_at) AS created_at_trunc,
151-
was.template_id,
152-
was.user_id,
153-
CASE WHEN SUM(was.session_count_vscode) > 0 THEN 60 ELSE 0 END AS usage_vscode_seconds,
154-
CASE WHEN SUM(was.session_count_jetbrains) > 0 THEN 60 ELSE 0 END AS usage_jetbrains_seconds,
155-
CASE WHEN SUM(was.session_count_reconnecting_pty) > 0 THEN 60 ELSE 0 END AS usage_reconnecting_pty_seconds,
156-
CASE WHEN SUM(was.session_count_ssh) > 0 THEN 60 ELSE 0 END AS usage_ssh_seconds
157-
FROM workspace_agent_stats was
158-
WHERE
159-
was.created_at >= @start_time::timestamptz
160-
AND was.created_at < @end_time::timestamptz
161-
AND was.connection_count > 0
162-
GROUP BY created_at_trunc, was.template_id, was.user_id
163-
)
148+
WITH
149+
-- The purpose of this CTE is to flatten the data so that a user is
150+
-- only counted once per interval/template.
151+
insights AS (
152+
SELECT
153+
template_id,
154+
user_id,
155+
-- See motivation in GetTemplateInsights for LEAST(SUM(n), 30).
156+
LEAST(SUM(usage_mins), 30) AS usage_mins,
157+
LEAST(SUM(ssh_mins), 30) AS ssh_mins,
158+
LEAST(SUM(sftp_mins), 30) AS sftp_mins,
159+
LEAST(SUM(reconnecting_pty_mins), 30) AS reconnecting_pty_mins,
160+
LEAST(SUM(vscode_mins), 30) AS vscode_mins,
161+
LEAST(SUM(jetbrains_mins), 30) AS jetbrains_mins
162+
FROM
163+
template_usage_stats
164+
WHERE
165+
start_time >= @start_time::timestamptz
166+
AND end_time <= @end_time::timestamptz
167+
GROUP BY
168+
start_time, template_id, user_id
169+
)
164170

165171
SELECT
166172
template_id,
167-
COALESCE(COUNT(DISTINCT user_id))::bigint AS active_users,
168-
COALESCE(SUM(usage_vscode_seconds), 0)::bigint AS usage_vscode_seconds,
169-
COALESCE(SUM(usage_jetbrains_seconds), 0)::bigint AS usage_jetbrains_seconds,
170-
COALESCE(SUM(usage_reconnecting_pty_seconds), 0)::bigint AS usage_reconnecting_pty_seconds,
171-
COALESCE(SUM(usage_ssh_seconds), 0)::bigint AS usage_ssh_seconds
172-
FROM agent_stats_by_interval_and_user
173+
COUNT(DISTINCT user_id) AS active_users,
174+
(SUM(usage_mins) * 60)::bigint AS usage_total_seconds, -- Includes app usage.
175+
(SUM(ssh_mins) * 60)::bigint AS usage_ssh_seconds,
176+
(SUM(sftp_mins) * 60)::bigint AS usage_sftp_seconds,
177+
(SUM(reconnecting_pty_mins) * 60)::bigint AS usage_reconnecting_pty_seconds,
178+
(SUM(vscode_mins) * 60)::bigint AS usage_vscode_seconds,
179+
(SUM(jetbrains_mins) * 60)::bigint AS usage_jetbrains_seconds
180+
FROM
181+
insights
173182
GROUP BY template_id;
174183

175184
-- name: GetTemplateAppInsights :many

0 commit comments

Comments
 (0)