diff --git a/atdb/docs/ATDB-LDV Data Model.png b/atdb/docs/ATDB-LDV Data Model.png index 92fc76bba762b56b46e351d2c4303dffe6617b08..7bfd01631b07bd41979ea9b365a17c1d4eac0a6e 100644 Binary files a/atdb/docs/ATDB-LDV Data Model.png and b/atdb/docs/ATDB-LDV Data Model.png differ diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index 8f996b8587cab6bfbe0ccc275a81cf4a6ea8854b..80397b46bae4aa61afa049586c519a8ba62d2d83 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -17,34 +17,32 @@ class Workflow(models.Model): class Task(models.Model): + + # Task control properties taskID = models.CharField(db_index=True, max_length=30, blank=True, null=True) task_type = models.CharField(max_length=20, default="task") - filter = models.CharField(max_length=30, blank=True, null=True) + new_status = models.CharField(max_length=50, default="defining", null=True) + status = models.CharField(db_index=True, default="unknown", max_length=50,blank=True, null=True) - # note: the apparent naming reversal is intentional. Predecessors are somebody elses successors. - # todo: change to Integer... but then the specification service has to be changed to using a dict - # to properly translate a python 'None' string to a Null value. - - predecessor = models.ForeignKey('self', related_name='successors', on_delete=models.SET_NULL, null=True,blank=True) new_workflow_id = models.CharField(max_length=15, blank=True, null=True) new_workflow_uri = models.CharField(max_length=100, blank=True, null=True) - workflow = models.ForeignKey(Workflow, related_name='tasks', on_delete=models.SET_NULL, null=True, blank=True) + skip = models.BooleanField(default=False) + creationTime = models.DateTimeField(default=datetime.utcnow, blank=True) - project = models.CharField(max_length=100, blank=True, null=True, default="unknown") - sas_id = models.CharField(max_length=15, blank=True, null=True) priority = models.IntegerField(null=True) purge_policy = models.CharField(max_length=5, default="no", blank=True, null=True) stage_request_id = models.IntegerField(default=0,null=True) + # LOFAR properties + project = models.CharField(max_length=100, blank=True, null=True, default="unknown") + sas_id = models.CharField(max_length=15, blank=True, null=True) inputs = models.JSONField(null=True, blank=True) outputs = models.JSONField(null=True, blank=True) - skip = models.BooleanField(default=False) - creationTime = models.DateTimeField(default=datetime.utcnow, blank=True) - - new_status = models.CharField(max_length=50, default="defining", null=True) - status = models.CharField(db_index=True, default="unknown", max_length=50,blank=True, null=True) + # relationships + workflow = models.ForeignKey(Workflow, related_name='tasks', on_delete=models.SET_NULL, null=True, blank=True) + predecessor = models.ForeignKey('self', related_name='successors', on_delete=models.SET_NULL, null=True, blank=True) def __str__(self): return str(self.id) + ' - ' + str(self.sas_id) @@ -57,7 +55,6 @@ class Task(models.Model): class LogEntry(models.Model): - task = models.ForeignKey(Task, related_name='log_entries', on_delete=models.CASCADE, null=False) cpu_cycles = models.IntegerField(null=True,blank=True) wall_clock_time = models.IntegerField(null=True,blank=True) url_to_log_file = models.CharField(max_length=100, blank=True, null=True) @@ -65,6 +62,10 @@ class LogEntry(models.Model): start_time = models.DateTimeField(blank=True, null=True) end_time = models.DateTimeField(blank=True, null=True) status = models.CharField(max_length=50,default="defined", blank=True, null=True) + description = models.CharField(max_length=100, blank=True, null=True) + + # relationships + task = models.ForeignKey(Task, related_name='log_entries', on_delete=models.CASCADE, null=False) def __str__(self): return str(self.id)+ ' - '+ str(self.task)+' - '+self.status @@ -73,6 +74,8 @@ class LogEntry(models.Model): class Status(models.Model): name = models.CharField(max_length=50, default="unknown") timestamp = models.DateTimeField(default=datetime.utcnow, blank=True) + + # relationships task = models.ForeignKey(Task, related_name='status_history', on_delete=models.CASCADE, null=False) # the representation of the value in the REST API diff --git a/atdb/taskdatabase/serializers.py b/atdb/taskdatabase/serializers.py index f9bbb37674a13a7ba6bf46e478c8a4887bda776f..f08f750e9bce8c3b7e598f7747642f6ea37072c7 100644 --- a/atdb/taskdatabase/serializers.py +++ b/atdb/taskdatabase/serializers.py @@ -62,11 +62,6 @@ class StatusSerializer(serializers.ModelSerializer): class WorkflowSerializer(serializers.ModelSerializer): -# tasks = serializers.StringRelatedField( -# many=True, -# required=False, -# ) - class Meta: model = Workflow fields = "__all__" diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index 44df4f9820dff82a1d4d12701ca0a8cb4e2cf7d4..c9b8811beed78e560b2eb9aff4543057e4d0e151 100644 --- a/atdb/taskdatabase/templates/taskdatabase/index.html +++ b/atdb/taskdatabase/templates/taskdatabase/index.html @@ -44,7 +44,7 @@ </div> {% include 'taskdatabase/pagination.html' %} </div> - <p class="footer"> Version 1.0.0 (22 jan 2021 - 17:00) + <p class="footer"> Version 1.0.0 (26 jan 2021 - 8:00) <script type="text/javascript"> (function(seconds) { var refresh,