diff --git a/arkindex/process/api.py b/arkindex/process/api.py index 7b0d2cc1f66cf5f897a1ba5ed7926f1408aaa132..fab6dceb5743f97cb72284080c2b96a170b18d8d 100644 --- a/arkindex/process/api.py +++ b/arkindex/process/api.py @@ -1747,8 +1747,11 @@ class WorkerActivityBase(ListAPIView): serializer_class = WorkerStatisticsSerializer pagination_class = None queryset = WorkerActivity.objects \ - .values('worker_version_id', 'configuration_id') \ - .annotate( + .values( + 'worker_version_id', + 'configuration_id', + 'model_version_id' + ).annotate( average_processed_time=Avg( F('updated') - F('started'), filter=Q(state=WorkerActivityState.Processed, started__isnull=False), diff --git a/arkindex/process/serializers/workers.py b/arkindex/process/serializers/workers.py index f89b6fc7af5a608b8af65ec470eb098bc1775861..fd8c2f315f4cfd8d2e2b44d4556fda068573ee79 100644 --- a/arkindex/process/serializers/workers.py +++ b/arkindex/process/serializers/workers.py @@ -296,7 +296,8 @@ class WorkerActivitySerializer(serializers.ModelSerializer): # Avoid loading up to 1000 processes when opening this endpoint in a browser style={'base_template': 'input.html'}, ) - configuration_id = serializers.UUIDField(read_only=True, allow_null=True, required=False) + configuration_id = serializers.UUIDField(read_only=True, allow_null=True) + model_version_id = serializers.UUIDField(read_only=True, allow_null=True) worker_version_id = serializers.UUIDField(read_only=True) class Meta: @@ -306,6 +307,7 @@ class WorkerActivitySerializer(serializers.ModelSerializer): 'process_id', 'configuration_id', 'worker_version_id', + 'model_version_id', 'created', 'updated', 'started', @@ -317,6 +319,7 @@ class WorkerActivitySerializer(serializers.ModelSerializer): 'started', 'configuration_id', 'worker_version_id', + 'model_version_id', ) def validate_process_id(self, process): @@ -417,6 +420,7 @@ class WorkerStatisticsSerializer(serializers.Serializer): """ worker_version_id = serializers.UUIDField(read_only=True) configuration_id = serializers.UUIDField(read_only=True, allow_null=True) + model_version_id = serializers.UUIDField(read_only=True, allow_null=True) queued = serializers.IntegerField(read_only=True) started = serializers.IntegerField(read_only=True) processed = serializers.IntegerField(read_only=True) diff --git a/arkindex/process/tests/test_workeractivity.py b/arkindex/process/tests/test_workeractivity.py index 138625035ebf0872006dedd69d3075717bfd737f..0c4ff82264631e9c358c32dc6dd43a5040e3c967 100644 --- a/arkindex/process/tests/test_workeractivity.py +++ b/arkindex/process/tests/test_workeractivity.py @@ -732,6 +732,7 @@ class TestWorkerActivity(FixtureTestCase): 'process_id': str(self.process.id), 'worker_version_id': str(self.worker_version.id), 'configuration_id': str(self.configuration.id), + 'model_version_id': str(self.model_version.id), 'state': 'queued' } ] @@ -761,6 +762,7 @@ class TestWorkerActivity(FixtureTestCase): 'process_id': str(self.process.id), 'worker_version_id': str(self.worker_version.id), 'configuration_id': str(self.configuration.id), + 'model_version_id': str(self.model_version.id), 'state': 'started', } ] @@ -813,6 +815,7 @@ class TestWorkerActivity(FixtureTestCase): 'process_id': str(process.id), 'worker_version_id': str(self.worker_version.id), 'configuration_id': None, + 'model_version_id': None, 'state': 'queued' } ] @@ -849,6 +852,7 @@ class TestWorkerActivity(FixtureTestCase): 'process_id': str(self.process.id), 'worker_version_id': str(self.worker_version.id), 'configuration_id': None, + 'model_version_id': None, 'state': 'processed' } ] diff --git a/arkindex/process/tests/test_workeractivity_stats.py b/arkindex/process/tests/test_workeractivity_stats.py index 27e3e23c031533ecfe24293cb274c4bbb59863f6..820660721d6372daef0beb96d16505be60208f88 100644 --- a/arkindex/process/tests/test_workeractivity_stats.py +++ b/arkindex/process/tests/test_workeractivity_stats.py @@ -17,10 +17,11 @@ from arkindex.process.models import ( WorkerVersion, ) from arkindex.project.tests import FixtureAPITestCase +from arkindex.training.models import Model from arkindex.users.models import Role, User -class TestWorkersActivity(FixtureAPITestCase): +class TestWorkerActivityStats(FixtureAPITestCase): @classmethod def setUpTestData(cls): @@ -28,6 +29,8 @@ class TestWorkersActivity(FixtureAPITestCase): cls.version_1 = WorkerVersion.objects.get(worker__slug='reco') cls.version_2 = WorkerVersion.objects.get(worker__slug='dla') cls.configuration_1 = WorkerConfiguration.objects.create(name='some_config', configuration={'aa': 'bb'}, worker=cls.version_1.worker) + cls.model = Model.objects.create(name='Loukoum', public=False) + cls.model_version = cls.model.versions.create() cls.private_corpus = Corpus.objects.create(name='private', public=False) cls.process_1 = Process.objects.first() cls.process_2 = Process.objects.create( @@ -44,6 +47,7 @@ class TestWorkersActivity(FixtureAPITestCase): state=state, worker_version_id=cls.version_1.id, configuration_id=cls.configuration_1.id, + model_version_id=cls.model_version.id, process_id=cls.process_1.id, started=datetime.now(timezone.utc), ) for elt, state in zip(cls.corpus.elements.all(), itertools.cycle(WorkerActivityState)) @@ -133,6 +137,7 @@ class TestWorkersActivity(FixtureAPITestCase): { 'worker_version_id': str(self.version_1.id), 'configuration_id': str(self.configuration_1.id), + 'model_version_id': str(self.model_version.id), 'queued': self.queued, 'started': self.started, 'processed': self.processed, @@ -145,6 +150,7 @@ class TestWorkersActivity(FixtureAPITestCase): }, { 'worker_version_id': str(self.version_2.id), 'configuration_id': None, + 'model_version_id': None, 'queued': 0, 'started': 0, 'processed': self.corpus.elements.count(), @@ -197,6 +203,7 @@ class TestWorkersActivity(FixtureAPITestCase): { 'worker_version_id': str(self.version_1.id), 'configuration_id': str(self.configuration_1.id), + 'model_version_id': str(self.model_version.id), 'queued': self.queued, 'started': self.started, 'processed': 4, @@ -209,6 +216,7 @@ class TestWorkersActivity(FixtureAPITestCase): }, { 'worker_version_id': str(self.version_2.id), 'configuration_id': None, + 'model_version_id': None, 'queued': 0, 'started': 0, 'processed': self.corpus.elements.count(), @@ -236,6 +244,7 @@ class TestWorkersActivity(FixtureAPITestCase): { 'worker_version_id': str(self.version_1.id), 'configuration_id': str(self.configuration_1.id), + 'model_version_id': str(self.model_version.id), 'queued': self.queued, 'started': self.started, 'processed': 0, @@ -286,6 +295,7 @@ class TestWorkersActivity(FixtureAPITestCase): { 'worker_version_id': str(self.version_1.id), 'configuration_id': str(self.configuration_1.id), + 'model_version_id': str(self.model_version.id), 'queued': self.queued, 'started': self.started, 'processed': self.processed,