feat: enrich task record details

This commit is contained in:
2026-05-10 22:33:58 +08:00
parent 205a4b625e
commit 53f8edfb67
19 changed files with 1781 additions and 165 deletions
@@ -0,0 +1,72 @@
ALTER TABLE IF EXISTS gateway_tasks
ADD COLUMN IF NOT EXISTS api_key_name text,
ADD COLUMN IF NOT EXISTS api_key_prefix text,
ADD COLUMN IF NOT EXISTS requested_model text,
ADD COLUMN IF NOT EXISTS resolved_model text,
ADD COLUMN IF NOT EXISTS request_id text,
ADD COLUMN IF NOT EXISTS usage jsonb NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS metrics jsonb NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS billing_summary jsonb NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS final_charge_amount numeric NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS response_started_at timestamptz,
ADD COLUMN IF NOT EXISTS response_finished_at timestamptz,
ADD COLUMN IF NOT EXISTS response_duration_ms bigint;
ALTER TABLE IF EXISTS gateway_task_attempts
ADD COLUMN IF NOT EXISTS request_id text,
ADD COLUMN IF NOT EXISTS usage jsonb NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS metrics jsonb NOT NULL DEFAULT '{}'::jsonb,
ADD COLUMN IF NOT EXISTS response_started_at timestamptz,
ADD COLUMN IF NOT EXISTS response_finished_at timestamptz,
ADD COLUMN IF NOT EXISTS response_duration_ms bigint;
CREATE INDEX IF NOT EXISTS idx_gateway_tasks_request_id
ON gateway_tasks(request_id)
WHERE request_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_gateway_tasks_api_key_created
ON gateway_tasks(api_key_id, created_at DESC)
WHERE api_key_id IS NOT NULL;
UPDATE gateway_tasks
SET requested_model = model
WHERE requested_model IS NULL;
UPDATE gateway_tasks AS t
SET api_key_name = COALESCE(t.api_key_name, k.name),
api_key_prefix = COALESCE(t.api_key_prefix, k.key_prefix)
FROM gateway_api_keys AS k
WHERE t.api_key_id = k.id::text;
WITH billing_totals AS (
SELECT
t.id,
COUNT(line.value) AS line_count,
COALESCE(SUM(
CASE
WHEN jsonb_typeof(line.value) = 'object'
AND line.value ? 'amount'
AND line.value->>'amount' ~ '^-?[0-9]+(\.[0-9]+)?$'
THEN (line.value->>'amount')::numeric
ELSE 0
END
), 0) AS total_amount
FROM gateway_tasks AS t
LEFT JOIN LATERAL jsonb_array_elements(COALESCE(t.billings, '[]'::jsonb)) AS line(value) ON true
GROUP BY t.id
)
UPDATE gateway_tasks AS t
SET final_charge_amount = billing_totals.total_amount,
billing_summary = jsonb_build_object(
'lineCount', billing_totals.line_count,
'totalAmount', billing_totals.total_amount,
'currency', 'resource',
'finalCharge', jsonb_build_object(
'amount', billing_totals.total_amount,
'currency', 'resource',
'simulated', COALESCE(t.run_mode = 'simulation', false)
)
)
FROM billing_totals
WHERE t.id = billing_totals.id
AND COALESCE(t.billing_summary, '{}'::jsonb) = '{}'::jsonb;