mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
84de391f26
AI seat tracking inserted as heartbeat into usage table.
39 lines
1.4 KiB
PL/PgSQL
39 lines
1.4 KiB
PL/PgSQL
DROP INDEX IF EXISTS idx_usage_events_ai_seats;
|
|
|
|
-- Remove hb_ai_seats_v1 rows so the original constraint can be restored.
|
|
DELETE FROM usage_events WHERE event_type = 'hb_ai_seats_v1';
|
|
DELETE FROM usage_events_daily WHERE event_type = 'hb_ai_seats_v1';
|
|
|
|
-- Restore original constraint.
|
|
ALTER TABLE usage_events
|
|
DROP CONSTRAINT usage_event_type_check,
|
|
ADD CONSTRAINT usage_event_type_check CHECK (event_type IN ('dc_managed_agents_v1'));
|
|
|
|
-- Restore the original aggregate function without hb_ai_seats_v1 support.
|
|
CREATE OR REPLACE FUNCTION aggregate_usage_event()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
IF NEW.event_type NOT IN ('dc_managed_agents_v1') THEN
|
|
RAISE EXCEPTION 'Unhandled usage event type in aggregate_usage_event: %', NEW.event_type;
|
|
END IF;
|
|
|
|
INSERT INTO usage_events_daily (day, event_type, usage_data)
|
|
VALUES (
|
|
date_trunc('day', NEW.created_at AT TIME ZONE 'UTC')::date,
|
|
NEW.event_type,
|
|
NEW.event_data
|
|
)
|
|
ON CONFLICT (day, event_type) DO UPDATE SET
|
|
usage_data = CASE
|
|
WHEN NEW.event_type IN ('dc_managed_agents_v1') THEN
|
|
jsonb_build_object(
|
|
'count',
|
|
COALESCE((usage_events_daily.usage_data->>'count')::bigint, 0) +
|
|
COALESCE((NEW.event_data->>'count')::bigint, 0)
|
|
)
|
|
END;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|