Files
coder/coderd/database/queries/workspaceappstats.sql
2023-08-16 15:22:00 +03:00

38 lines
1.2 KiB
SQL

-- name: InsertWorkspaceAppStats :exec
INSERT INTO
workspace_app_stats (
user_id,
workspace_id,
agent_id,
access_method,
slug_or_port,
session_id,
session_started_at,
session_ended_at,
requests
)
SELECT
unnest(@user_id::uuid[]) AS user_id,
unnest(@workspace_id::uuid[]) AS workspace_id,
unnest(@agent_id::uuid[]) AS agent_id,
unnest(@access_method::text[]) AS access_method,
unnest(@slug_or_port::text[]) AS slug_or_port,
unnest(@session_id::uuid[]) AS session_id,
unnest(@session_started_at::timestamptz[]) AS session_started_at,
unnest(@session_ended_at::timestamptz[]) AS session_ended_at,
unnest(@requests::int[]) AS requests
ON CONFLICT
(user_id, agent_id, session_id)
DO
UPDATE SET
session_ended_at = EXCLUDED.session_ended_at,
requests = EXCLUDED.requests
WHERE
workspace_app_stats.user_id = EXCLUDED.user_id
AND workspace_app_stats.agent_id = EXCLUDED.agent_id
AND workspace_app_stats.session_id = EXCLUDED.session_id
-- Since stats are updated in place as time progresses, we only
-- want to update this row if it's fresh.
AND workspace_app_stats.session_ended_at <= EXCLUDED.session_ended_at
AND workspace_app_stats.requests <= EXCLUDED.requests;