@@ -145,31 +145,40 @@ FROM
145
145
insights;
146
146
147
147
-- 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
+ )
164
170
165
171
SELECT
166
172
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
173
182
GROUP BY template_id;
174
183
175
184
-- name: GetTemplateAppInsights :many
0 commit comments