123 lines
3.3 KiB
Markdown
123 lines
3.3 KiB
Markdown
# Supabase Cron Job Setup for sync-analysis-results
|
|
|
|
This document explains how to set up a Supabase cron job to automatically call the `sync-analysis-results` API endpoint every 15 minutes.
|
|
|
|
## Prerequisites
|
|
|
|
1. Supabase project with database access
|
|
2. Your application deployed and accessible via a public URL
|
|
3. `JOBS_API_TOKEN` environment variable configured
|
|
|
|
## Setup Steps
|
|
|
|
### 1. Enable Required Extensions
|
|
|
|
First, enable the required PostgreSQL extensions in your Supabase project:
|
|
|
|
```sql
|
|
create extension if not exists pg_cron;
|
|
create extension if not exists pg_net;
|
|
```
|
|
|
|
You can run this either:
|
|
- In the Supabase Dashboard → Database → SQL Editor
|
|
- Or deploy the migration file: `supabase/migrations/setup_sync_analysis_results_cron.sql`
|
|
|
|
### 2. Schedule the Cron Job
|
|
|
|
Use the helper function to schedule the cron job with your specific configuration:
|
|
|
|
```sql
|
|
select schedule_sync_analysis_results_cron(
|
|
'https://your-actual-domain.com', -- Replace with your API URL
|
|
'your-actual-jobs-api-token' -- Replace with your JOBS_API_TOKEN
|
|
);
|
|
```
|
|
|
|
### 3. Verify the Setup
|
|
|
|
Check if the job was scheduled successfully:
|
|
|
|
```sql
|
|
select * from cron.job where jobname = 'sync-analysis-results-every-15-minutes';
|
|
```
|
|
|
|
## Management Commands
|
|
|
|
### View Job Execution History
|
|
|
|
```sql
|
|
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;
|
|
```
|
|
|
|
### Check All Scheduled Jobs
|
|
|
|
```sql
|
|
select jobid, schedule, active, jobname from cron.job;
|
|
```
|
|
|
|
### Unschedule the Job
|
|
|
|
```sql
|
|
select cron.unschedule('sync-analysis-results-every-15-minutes');
|
|
```
|
|
|
|
## Configuration Details
|
|
|
|
- **Schedule**: `*/15 * * * *` (every 15 minutes)
|
|
- **HTTP Method**: POST
|
|
- **Headers**:
|
|
- `Content-Type: application/json`
|
|
- `x-jobs-api-key: YOUR_JOBS_API_TOKEN`
|
|
- **Body**: JSON with metadata about the cron trigger
|
|
|
|
## Security Considerations
|
|
|
|
1. **API Token**: Store your `JOBS_API_TOKEN` securely and never commit it to version control
|
|
2. **Network Access**: Ensure your Supabase instance can reach your deployed application
|
|
3. **Rate Limiting**: The 15-minute interval should be appropriate for your use case
|
|
|
|
## Troubleshooting
|
|
|
|
### Job Not Running
|
|
|
|
1. Check if extensions are enabled:
|
|
```sql
|
|
select * from pg_extension where extname in ('pg_cron', 'pg_net');
|
|
```
|
|
|
|
2. Verify job is active:
|
|
```sql
|
|
select * from cron.job where jobname = 'sync-analysis-results-every-15-minutes';
|
|
```
|
|
|
|
3. Check for execution errors:
|
|
```sql
|
|
select * from cron.job_run_details
|
|
where jobid = (select jobid from cron.job where jobname = 'sync-analysis-results-every-15-minutes')
|
|
and status = 'failed'
|
|
order by start_time desc;
|
|
```
|
|
|
|
### API Authentication Issues
|
|
|
|
1. Verify your `JOBS_API_TOKEN` is correct
|
|
2. Test the API endpoint manually:
|
|
```bash
|
|
curl -X POST https://your-domain.com/api/job/sync-analysis-results \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-jobs-api-key: YOUR_JOBS_API_TOKEN"
|
|
```
|
|
|
|
## Alternative: Using Supabase Edge Functions
|
|
|
|
If you prefer using Supabase Edge Functions instead of pg_cron, you can:
|
|
|
|
1. Create an Edge Function that calls your API
|
|
2. Use Supabase's built-in cron triggers for Edge Functions
|
|
3. This approach provides better logging and error handling
|
|
|
|
Contact your team lead for assistance with Edge Functions setup if needed.
|