monacousa-portal/supabase/migrations/024_cron_execution_logs.sql

46 lines
1.4 KiB
MySQL
Raw Permalink Normal View History

-- Migration 024: Cron Execution Logs
-- Tracks cron job execution history for monitoring
CREATE TABLE IF NOT EXISTS public.cron_execution_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
job_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'running' CHECK (status IN ('running', 'completed', 'failed')),
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ,
duration_ms INTEGER,
result JSONB,
error_message TEXT,
triggered_by TEXT DEFAULT 'cron'
);
-- Index for quick lookups
CREATE INDEX IF NOT EXISTS idx_cron_logs_job_name ON public.cron_execution_logs (job_name, started_at DESC);
CREATE INDEX IF NOT EXISTS idx_cron_logs_started ON public.cron_execution_logs (started_at DESC);
-- Enable RLS
ALTER TABLE public.cron_execution_logs ENABLE ROW LEVEL SECURITY;
-- Only admins can read cron logs
CREATE POLICY "Admins can read cron logs"
ON public.cron_execution_logs
FOR SELECT
TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.members
WHERE members.user_id = auth.uid()
AND members.role = 'admin'
)
);
-- Service role can insert/update (for cron endpoints)
CREATE POLICY "Service role can manage cron logs"
ON public.cron_execution_logs
FOR ALL
TO service_role
USING (true)
WITH CHECK (true);
-- Auto-cleanup: keep only 90 days of logs
COMMENT ON TABLE public.cron_execution_logs IS 'Tracks cron job execution history. Entries older than 90 days should be periodically purged.';