| |
|
|
| import django.db.models.deletion |
| import uuid |
| from django.conf import settings |
| from django.db import migrations, models |
|
|
|
|
| class Migration(migrations.Migration): |
|
|
| dependencies = [ |
| ("core", "0001_initial"), |
| ] |
|
|
| operations = [ |
| migrations.AddField( |
| model_name="run", |
| name="trigger_type", |
| field=models.CharField( |
| choices=[ |
| ("manual", "Manual"), |
| ("scheduled", "Scheduled"), |
| ("api", "API"), |
| ], |
| default="manual", |
| help_text="How this run was triggered", |
| max_length=20, |
| ), |
| ), |
| migrations.CreateModel( |
| name="GlobalSettings", |
| fields=[ |
| ( |
| "id", |
| models.BigAutoField( |
| auto_created=True, |
| primary_key=True, |
| serialize=False, |
| verbose_name="ID", |
| ), |
| ), |
| ( |
| "schedules_paused", |
| models.BooleanField( |
| default=False, |
| help_text="Global pause for all scheduled script executions", |
| ), |
| ), |
| ( |
| "schedules_paused_at", |
| models.DateTimeField( |
| blank=True, help_text="When schedules were paused", null=True |
| ), |
| ), |
| ("updated_at", models.DateTimeField(auto_now=True)), |
| ( |
| "schedules_paused_by", |
| models.ForeignKey( |
| blank=True, |
| null=True, |
| on_delete=django.db.models.deletion.SET_NULL, |
| related_name="+", |
| to=settings.AUTH_USER_MODEL, |
| ), |
| ), |
| ], |
| options={ |
| "verbose_name": "global settings", |
| "verbose_name_plural": "global settings", |
| "db_table": "global_settings", |
| }, |
| ), |
| migrations.CreateModel( |
| name="ScriptSchedule", |
| fields=[ |
| ( |
| "id", |
| models.UUIDField( |
| default=uuid.uuid4, |
| editable=False, |
| primary_key=True, |
| serialize=False, |
| ), |
| ), |
| ( |
| "run_mode", |
| models.CharField( |
| choices=[ |
| ("manual", "Manual"), |
| ("interval", "Interval"), |
| ("daily", "Daily"), |
| ], |
| default="manual", |
| max_length=20, |
| ), |
| ), |
| ( |
| "interval_minutes", |
| models.PositiveIntegerField( |
| blank=True, |
| choices=[ |
| (5, "Every 5 minutes"), |
| (10, "Every 10 minutes"), |
| (15, "Every 15 minutes"), |
| (30, "Every 30 minutes"), |
| (60, "Every hour"), |
| (120, "Every 2 hours"), |
| (360, "Every 6 hours"), |
| (720, "Every 12 hours"), |
| ], |
| help_text="Interval in minutes (for interval mode)", |
| null=True, |
| ), |
| ), |
| ( |
| "daily_times", |
| models.JSONField( |
| blank=True, |
| default=list, |
| help_text='List of times in HH:MM format, e.g., ["09:00", "18:00"]', |
| ), |
| ), |
| ( |
| "timezone", |
| models.CharField( |
| default="UTC", |
| help_text="Timezone for daily schedules (e.g., 'America/New_York')", |
| max_length=50, |
| ), |
| ), |
| ( |
| "is_active", |
| models.BooleanField( |
| default=True, |
| help_text="Whether this schedule is active (can be paused without deleting)", |
| ), |
| ), |
| ( |
| "q_schedule_ids", |
| models.JSONField( |
| blank=True, |
| default=list, |
| help_text="django-q2 Schedule object IDs", |
| ), |
| ), |
| ( |
| "next_run", |
| models.DateTimeField( |
| blank=True, |
| help_text="Cached next scheduled run time", |
| null=True, |
| ), |
| ), |
| ( |
| "last_scheduled_run", |
| models.DateTimeField( |
| blank=True, |
| help_text="When the schedule last triggered a run", |
| null=True, |
| ), |
| ), |
| ("created_at", models.DateTimeField(auto_now_add=True)), |
| ("updated_at", models.DateTimeField(auto_now=True)), |
| ( |
| "created_by", |
| models.ForeignKey( |
| blank=True, |
| null=True, |
| on_delete=django.db.models.deletion.SET_NULL, |
| related_name="created_schedules", |
| to=settings.AUTH_USER_MODEL, |
| ), |
| ), |
| ( |
| "script", |
| models.OneToOneField( |
| on_delete=django.db.models.deletion.CASCADE, |
| related_name="schedule", |
| to="core.script", |
| ), |
| ), |
| ], |
| options={ |
| "verbose_name": "script schedule", |
| "verbose_name_plural": "script schedules", |
| "db_table": "script_schedules", |
| }, |
| ), |
| migrations.CreateModel( |
| name="ScheduleHistory", |
| fields=[ |
| ( |
| "id", |
| models.UUIDField( |
| default=uuid.uuid4, |
| editable=False, |
| primary_key=True, |
| serialize=False, |
| ), |
| ), |
| ( |
| "change_type", |
| models.CharField( |
| choices=[ |
| ("created", "Created"), |
| ("updated", "Updated"), |
| ("enabled", "Enabled"), |
| ("disabled", "Disabled"), |
| ("deleted", "Deleted"), |
| ], |
| max_length=20, |
| ), |
| ), |
| ( |
| "previous_config", |
| models.JSONField( |
| blank=True, |
| help_text="Previous schedule configuration", |
| null=True, |
| ), |
| ), |
| ( |
| "new_config", |
| models.JSONField( |
| blank=True, help_text="New schedule configuration", null=True |
| ), |
| ), |
| ("created_at", models.DateTimeField(auto_now_add=True)), |
| ( |
| "changed_by", |
| models.ForeignKey( |
| blank=True, |
| null=True, |
| on_delete=django.db.models.deletion.SET_NULL, |
| to=settings.AUTH_USER_MODEL, |
| ), |
| ), |
| ( |
| "schedule", |
| models.ForeignKey( |
| on_delete=django.db.models.deletion.CASCADE, |
| related_name="history", |
| to="core.scriptschedule", |
| ), |
| ), |
| ], |
| options={ |
| "verbose_name": "schedule history", |
| "verbose_name_plural": "schedule history entries", |
| "db_table": "schedule_history", |
| "ordering": ["-created_at"], |
| }, |
| ), |
| ] |
|
|