diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index fb0d66b30..c8bef06d1 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -22,7 +22,7 @@ import websockets import yaml from billiard.exceptions import SoftTimeLimitExceeded -from celery import Celery, task +from celery import Celery, task, utils from kombu import Queue, Exchange from urllib3 import Retry @@ -309,6 +309,7 @@ def _update_submission(self, data): def _update_status(self, status, extra_information=None): if status not in AVAILABLE_STATUSES: raise SubmissionException(f"Status '{status}' is not in available statuses: {AVAILABLE_STATUSES}") + data = { "status": status, "status_details": extra_information, @@ -663,8 +664,9 @@ def prepare(self): self._get_container_image(self.container_image) def start(self): + hostname = utils.nodenames.gethostname() if not self.is_scoring: - self._update_status(STATUS_RUNNING) + self._update_status(STATUS_RUNNING, extra_information=f"hostname-{hostname}") program_dir = os.path.join(self.root_dir, "program") ingestion_program_dir = os.path.join(self.root_dir, "ingestion_program") diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index aaf7386b6..75e75df47 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -37,6 +37,13 @@ def check_object_permissions(self, request, obj): raise PermissionDenied("Cannot add task-specific submission re-runs to leaderboards.") return if self.request and self.request.method in ('POST', 'PUT', 'PATCH'): + dir(self.request) + # Set hostname of submission + if "status_details" in self.request.data.keys(): + if request.data['status_details'].find('hostname') != -1: + hostname = request.data['status_details'].replace('hostname-', '') + obj.worker_hostname = hostname + obj.save() not_bot_user = self.request.user.is_authenticated and not self.request.user.is_bot if self.action in ['update_fact_sheet', 're_run_submission']: diff --git a/src/apps/competitions/migrations/0032_submission_worker_hostname.py b/src/apps/competitions/migrations/0032_submission_worker_hostname.py new file mode 100644 index 000000000..0586a5978 --- /dev/null +++ b/src/apps/competitions/migrations/0032_submission_worker_hostname.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.17 on 2023-05-09 04:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('competitions', '0031_auto_20230504_1016'), + ] + + operations = [ + migrations.AddField( + model_name='submission', + name='worker_hostname', + field=models.CharField(blank=True, max_length=255, null=True), + ), + ] diff --git a/src/apps/competitions/models.py b/src/apps/competitions/models.py index 9c5be88ef..f355802d1 100644 --- a/src/apps/competitions/models.py +++ b/src/apps/competitions/models.py @@ -452,7 +452,7 @@ class Submission(ChaHubSaveMixin, models.Model): started_when = models.DateTimeField(null=True) is_public = models.BooleanField(default=False) is_specific_task_re_run = models.BooleanField(default=False) - + worker_hostname = models.CharField(max_length=255, blank=True, null=True) is_migrated = models.BooleanField(default=False) created_by_migration = models.ForeignKey(Phase, related_name='migrated_submissions', on_delete=models.CASCADE, null=True, diff --git a/src/templates/pages/server_status.html b/src/templates/pages/server_status.html index b9d0dd294..0ff214291 100644 --- a/src/templates/pages/server_status.html +++ b/src/templates/pages/server_status.html @@ -12,6 +12,7 @@

Recent submissions (up to 250 or 2 days old)

Competition Submission PK Submitter + Hostname Submitted at Status @@ -26,6 +27,7 @@

Recent submissions (up to 250 or 2 days old)

{{ submission.phase.competition }} {{ submission.pk }} {{ submission.owner.username }} + {{ submission.worker_hostname }} {{ submission.created_when|timesince }} ago {{ submission.status }}