65 lines
2.2 KiB
PL/PgSQL
65 lines
2.2 KiB
PL/PgSQL
-- Enable required extensions for cron jobs and HTTP requests
|
|
create extension if not exists pg_cron;
|
|
create extension if not exists pg_net;
|
|
|
|
-- Enable the cron extension to be used in all databases
|
|
-- This needs to be run with superuser privileges or via Supabase Dashboard
|
|
grant usage on schema cron to postgres;
|
|
grant all privileges on all tables in schema cron to postgres;
|
|
|
|
-- Function to safely schedule the cron job with environment variables
|
|
-- This approach allows for easier management and avoids hardcoding sensitive values
|
|
create or replace function schedule_sync_analysis_results_cron(
|
|
api_url text,
|
|
api_token text
|
|
) returns text as $$
|
|
declare
|
|
job_exists boolean;
|
|
begin
|
|
-- Check if job already exists
|
|
select exists(
|
|
select 1 from cron.job
|
|
where jobname = 'sync-analysis-results-every-15-minutes'
|
|
) into job_exists;
|
|
|
|
-- If job exists, unschedule it first
|
|
if job_exists then
|
|
perform cron.unschedule('sync-analysis-results-every-15-minutes');
|
|
end if;
|
|
|
|
-- Schedule the new job
|
|
perform cron.schedule(
|
|
'sync-analysis-results-every-15-minutes',
|
|
'*/15 * * * *', -- Every 15 minutes
|
|
format(
|
|
'select net.http_post(url := ''%s/api/job/sync-analysis-results'', headers := jsonb_build_object(''Content-Type'', ''application/json'', ''x-jobs-api-key'', ''%s''), body := jsonb_build_object(''triggered_by'', ''supabase_cron'', ''timestamp'', now())) as request_id;',
|
|
api_url, api_token
|
|
)
|
|
);
|
|
|
|
return 'Cron job scheduled successfully';
|
|
end;
|
|
$$ language plpgsql;
|
|
|
|
-- Example usage (replace with your actual values):
|
|
-- select schedule_sync_analysis_results_cron(
|
|
-- 'https://your-domain.com',
|
|
-- 'your-jobs-api-token-here'
|
|
-- );
|
|
|
|
-- Utility queries for managing the cron job:
|
|
|
|
-- 1. Check if the job is scheduled
|
|
-- select * from cron.job where jobname = 'sync-analysis-results-every-15-minutes';
|
|
|
|
-- 2. View job execution history
|
|
-- select * from cron.job_run_details
|
|
-- where jobid = (select jobid from cron.job where jobname = 'sync-analysis-results-every-15-minutes')
|
|
-- order by start_time desc limit 10;
|
|
|
|
-- 3. Unschedule the job if needed
|
|
-- select cron.unschedule('sync-analysis-results-every-15-minutes');
|
|
|
|
-- 4. Check all scheduled jobs
|
|
-- select jobid, schedule, active, jobname from cron.job;
|