diff --git a/atdb/docs/ATDB-LDV Workflow Diagram.png b/atdb/docs/ATDB-LDV Workflow Diagram.png index 34af713c20c18676d574bd938c27970096819900..dead107079db4568e4d5d882a2c5984b3599b8b8 100644 Binary files a/atdb/docs/ATDB-LDV Workflow Diagram.png and b/atdb/docs/ATDB-LDV Workflow Diagram.png differ diff --git a/atdb/taskdatabase/migrations/0001_initial.py b/atdb/taskdatabase/migrations/0001_initial.py deleted file mode 100644 index e10d887c97a221697dd25ef420383d2cd6c89fc7..0000000000000000000000000000000000000000 --- a/atdb/taskdatabase/migrations/0001_initial.py +++ /dev/null @@ -1,74 +0,0 @@ -# Generated by Django 3.1.4 on 2021-01-28 09:36 - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Workflow', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('workflow_uri', models.CharField(blank=True, max_length=30, null=True, unique=True)), - ('repository', models.CharField(blank=True, max_length=100, null=True)), - ('commit_id', models.CharField(blank=True, max_length=15, null=True)), - ('path', models.CharField(blank=True, max_length=100, null=True)), - ], - ), - migrations.CreateModel( - name='Task', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('taskID', models.CharField(blank=True, db_index=True, max_length=30, null=True)), - ('task_type', models.CharField(default='task', max_length=20)), - ('filter', models.CharField(blank=True, max_length=30, null=True)), - ('new_status', models.CharField(default='defining', max_length=50, null=True)), - ('status', models.CharField(blank=True, db_index=True, default='unknown', max_length=50, null=True)), - ('new_workflow_id', models.CharField(blank=True, max_length=15, null=True)), - ('new_workflow_uri', models.CharField(blank=True, max_length=100, null=True)), - ('skip', models.BooleanField(default=False)), - ('creationTime', models.DateTimeField(blank=True, default=datetime.datetime.utcnow)), - ('priority', models.IntegerField(null=True)), - ('purge_policy', models.CharField(blank=True, default='no', max_length=5, null=True)), - ('stage_request_id', models.IntegerField(default=0, null=True)), - ('project', models.CharField(blank=True, default='unknown', max_length=100, null=True)), - ('sas_id', models.CharField(blank=True, max_length=15, null=True)), - ('inputs', models.JSONField(blank=True, null=True)), - ('outputs', models.JSONField(blank=True, null=True)), - ('predecessor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='successors', to='taskdatabase.task')), - ('workflow', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tasks', to='taskdatabase.workflow')), - ], - ), - migrations.CreateModel( - name='Status', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(default='unknown', max_length=50)), - ('timestamp', models.DateTimeField(blank=True, default=datetime.datetime.utcnow)), - ('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='status_history', to='taskdatabase.task')), - ], - ), - migrations.CreateModel( - name='LogEntry', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('cpu_cycles', models.IntegerField(blank=True, null=True)), - ('wall_clock_time', models.IntegerField(blank=True, null=True)), - ('url_to_log_file', models.CharField(blank=True, max_length=100, null=True)), - ('step_name', models.CharField(blank=True, max_length=30, null=True)), - ('start_time', models.DateTimeField(blank=True, null=True)), - ('end_time', models.DateTimeField(blank=True, null=True)), - ('status', models.CharField(blank=True, default='defined', max_length=50, null=True)), - ('description', models.CharField(blank=True, max_length=100, null=True)), - ('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='log_entries', to='taskdatabase.task')), - ], - ), - ] diff --git a/atdb/taskdatabase/migrations/0002_auto_20210128_1120.py b/atdb/taskdatabase/migrations/0002_auto_20210128_1120.py deleted file mode 100644 index 498ff177e828aab17c9be38a184853cf747731e3..0000000000000000000000000000000000000000 --- a/atdb/taskdatabase/migrations/0002_auto_20210128_1120.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.1.4 on 2021-01-28 10:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('taskdatabase', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='task', - name='skip', - ), - migrations.AddField( - model_name='task', - name='metrics', - field=models.JSONField(blank=True, null=True), - ), - migrations.AddField( - model_name='task', - name='resume', - field=models.BooleanField(default=True), - ), - migrations.AlterField( - model_name='task', - name='stage_request_id', - field=models.IntegerField(null=True), - ), - ] diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 397793823153999cfab885a43927ebdbd584745d..b7b4b27537ef37b5a2dcacee71d48eb945474f3b 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -178,6 +178,13 @@ class LogEntryListViewAPI(generics.ListCreateAPIView): filter_backends = (filters.DjangoFilterBackend,) filter_class = LogEntryFilter + # overriding the POST, because the status that comes in with the LogEntry + # also needs to propagate to the task.new_status + def perform_create(self, serializer): + log_entry = serializer.save() + task = log_entry.task + task.new_status = log_entry.status + task.save() # example: /atdb/workflows/5/ # calling this view serializes a task in the REST API @@ -189,9 +196,9 @@ class LogEntryDetailsViewAPI(generics.RetrieveUpdateDestroyAPIView): queryset = LogEntry.objects.all() serializer_class = LogEntrySerializer - # overriding the update, because the status that comes in with the LogEntry + # overriding the POST, because the status that comes in with the LogEntry # also needs to propagate to the task.new_status - def perform_update(self, serializer): + def perform_create(self, serializer): log_entry = serializer.save() task = log_entry.task task.new_status = log_entry.status