From b3d2020045f41aae1d6671e6a4c6cd58542fe5b6 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 27 Mar 2023 12:32:44 -0400 Subject: [PATCH] Replicate JobResults to new Job model --- ..._move_jobresult_to_core.py => 0003_job.py} | 2 +- .../migrations/0004_replicate_jobresults.py | 45 +++++++++++++++++++ .../migrations/0005_job_created_auto_now.py | 18 ++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) rename netbox/core/migrations/{0003_move_jobresult_to_core.py => 0003_job.py} (96%) create mode 100644 netbox/core/migrations/0004_replicate_jobresults.py create mode 100644 netbox/core/migrations/0005_job_created_auto_now.py diff --git a/netbox/core/migrations/0003_move_jobresult_to_core.py b/netbox/core/migrations/0003_job.py similarity index 96% rename from netbox/core/migrations/0003_move_jobresult_to_core.py rename to netbox/core/migrations/0003_job.py index cf1b9e743..ab6f058ff 100644 --- a/netbox/core/migrations/0003_move_jobresult_to_core.py +++ b/netbox/core/migrations/0003_job.py @@ -22,7 +22,7 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), ('name', models.CharField(max_length=200)), - ('created', models.DateTimeField(auto_now_add=True)), + ('created', models.DateTimeField()), ('scheduled', models.DateTimeField(blank=True, null=True)), ('interval', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), ('started', models.DateTimeField(blank=True, null=True)), diff --git a/netbox/core/migrations/0004_replicate_jobresults.py b/netbox/core/migrations/0004_replicate_jobresults.py new file mode 100644 index 000000000..89da894d4 --- /dev/null +++ b/netbox/core/migrations/0004_replicate_jobresults.py @@ -0,0 +1,45 @@ +from django.db import migrations + + +def replicate_jobresults(apps, schema_editor): + """ + Replicate existing JobResults to the new Jobs table before deleting the old JobResults table. + """ + Job = apps.get_model('core', 'Job') + JobResult = apps.get_model('extras', 'JobResult') + + jobs = [] + for job_result in JobResult.objects.iterator(chunk_size=100): + jobs.append( + Job( + object_type=job_result.obj_type, + name=job_result.name, + created=job_result.created, + scheduled=job_result.scheduled, + interval=job_result.interval, + started=job_result.started, + completed=job_result.completed, + user=job_result.user, + status=job_result.status, + data=job_result.data, + job_id=job_result.job_id, + ) + ) + if len(jobs) == 100: + Job.objects.bulk_create(jobs) + if jobs: + Job.objects.bulk_create(jobs) + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0003_job'), + ] + + operations = [ + migrations.RunPython( + code=replicate_jobresults, + reverse_code=migrations.RunPython.noop + ), + ] diff --git a/netbox/core/migrations/0005_job_created_auto_now.py b/netbox/core/migrations/0005_job_created_auto_now.py new file mode 100644 index 000000000..12fd526ef --- /dev/null +++ b/netbox/core/migrations/0005_job_created_auto_now.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.7 on 2023-03-27 17:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_replicate_jobresults'), + ] + + operations = [ + migrations.AlterField( + model_name='job', + name='created', + field=models.DateTimeField(auto_now_add=True), + ), + ]