Skip to content

Commit e420866

Browse files
committed
Dynamic Manual Execution Time
1 parent e102ffc commit e420866

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

src/backend/apps/clusters/parser.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import decimal
12
import logging
23

4+
from django.conf import settings
35
from django.db import transaction
46

57
from backend.apps.clusters.models import (
@@ -60,12 +62,26 @@ def organization(self) -> Organization | None:
6062
@property
6163
def job_template(self) -> JobTemplate:
6264
external_job_template = self.data.summary_fields.job_template
63-
return JobTemplate.create_or_update(
65+
job_template = JobTemplate.create_or_update(
6466
cluster=self.cluster,
6567
external_id=external_job_template.id if external_job_template else -1,
6668
name=external_job_template.name if external_job_template else self.data.name,
6769
description=external_job_template.description if external_job_template else self.data.description,
6870
)
71+
job_count = Job.objects.filter(job_template=job_template).count()
72+
# If no jobs exist for this template, it's safe to calculate the manual execution time
73+
if job_count == 0:
74+
logger.info("No jobs exist for this template. Calculating manual execution time.")
75+
elapsed = self.data.elapsed
76+
if elapsed is not None:
77+
manual_execution_time = int(decimal.Decimal(elapsed / 60 * 2).quantize(decimal.Decimal(1), rounding=decimal.ROUND_UP))
78+
if manual_execution_time < settings.DEFAULT_TIME_TAKEN_TO_MANUALLY_EXECUTE_MINUTES:
79+
manual_execution_time = settings.DEFAULT_TIME_TAKEN_TO_MANUALLY_EXECUTE_MINUTES
80+
if manual_execution_time > 1000000:
81+
manual_execution_time = 1000000
82+
job_template.time_taken_manually_execute_minutes = manual_execution_time
83+
job_template.save(update_fields=['time_taken_manually_execute_minutes'])
84+
return job_template
6985

7086
@property
7187
def launched_by(self) -> AAPUser | None:

src/backend/tests/conftest.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,20 @@ def cluster_sync_data(cluster, api_jobs, api_host_summaries):
532532
)
533533

534534

535+
@pytest.fixture
536+
def cluster_sync_data_elapsed(cluster, api_jobs, api_host_summaries):
537+
data = api_jobs[1]
538+
data["elapsed"] = 8965.58
539+
data["host_summaries"] = [
540+
api_host_summaries[1],
541+
api_host_summaries[2],
542+
]
543+
544+
return ClusterSyncData.objects.create(
545+
cluster=cluster,
546+
data=data,
547+
)
548+
535549
@pytest.fixture
536550
def superuser():
537551
return User.objects.create(

src/backend/tests/unit/test_parser.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ def test_update_job_template(self, cluster, cluster_sync_data, job_templates, ex
253253
for key, value in expected.items():
254254
assert getattr(job_template, key) == value
255255

256+
def test_job_template_calculate_manual_execution_time(self, cluster, cluster_sync_data_elapsed):
257+
parser = DataParser(cluster_sync_data_elapsed.id)
258+
job_template = parser.job_template
259+
assert JobTemplate.objects.count() == 1
260+
assert job_template.time_taken_manually_execute_minutes == 299
261+
256262
@pytest.mark.parametrize('expected', [
257263
aap_user_expected_data,
258264
])

0 commit comments

Comments
 (0)