Skip to content

Commit 8941494

Browse files
committed
Apply PR comments
1 parent f197327 commit 8941494

8 files changed

Lines changed: 19 additions & 17 deletions

File tree

src/dstack/_internal/server/background/tasks/process_runs.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
RunStatus,
2121
RunTerminationReason,
2222
)
23-
from dstack._internal.server.background.metrics import run_metrics
2423
from dstack._internal.server.db import get_session_ctx
2524
from dstack._internal.server.models import JobModel, ProjectModel, RunModel
2625
from dstack._internal.server.services.jobs import (
@@ -29,6 +28,7 @@
2928
group_jobs_by_replica_latest,
3029
)
3130
from dstack._internal.server.services.locking import get_locker
31+
from dstack._internal.server.services.prometheus.push_metrics import run_metrics
3232
from dstack._internal.server.services.runs import (
3333
create_job_model_for_new_submission,
3434
fmt,
@@ -371,7 +371,7 @@ async def _process_active_run(session: AsyncSession, run_model: RunModel):
371371
new_status.name,
372372
)
373373
if run_model.status == RunStatus.SUBMITTED and new_status == RunStatus.PROVISIONING:
374-
current_time = datetime.datetime.now(datetime.timezone.utc)
374+
current_time = common.get_current_datetime()
375375
submit_to_provision_duration = (
376376
current_time - run_model.submitted_at.replace(tzinfo=datetime.timezone.utc)
377377
).total_seconds()
@@ -381,13 +381,11 @@ async def _process_active_run(session: AsyncSession, run_model: RunModel):
381381
submit_to_provision_duration,
382382
)
383383
project_name = run_model.project.name
384-
run_type = RunSpec.__response__.parse_raw(run_model.run_spec).configuration.type
385384
run_metrics.log_submit_to_provision_duration(
386-
submit_to_provision_duration, project_name, run_type
385+
submit_to_provision_duration, project_name, run_spec.configuration.type
387386
)
388387

389388
if new_status == RunStatus.PENDING:
390-
run_spec = RunSpec.__response__.parse_raw(run_model.run_spec)
391389
run_metrics.increment_pending_runs(run_model.project.name, run_spec.configuration.type)
392390

393391
run_model.status = new_status

src/dstack/_internal/server/routers/prometheus.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from dstack._internal.server import settings
1010
from dstack._internal.server.db import get_session
1111
from dstack._internal.server.security.permissions import OptionalServiceAccount
12-
from dstack._internal.server.services import prometheus
12+
from dstack._internal.server.services.prometheus import pull_metrics
1313
from dstack._internal.server.utils.routers import error_not_found
1414

1515
_auth = OptionalServiceAccount(os.getenv("DSTACK_PROMETHEUS_AUTH_TOKEN"))
@@ -27,6 +27,6 @@ async def get_prometheus_metrics(
2727
) -> str:
2828
if not settings.ENABLE_PROMETHEUS_METRICS:
2929
raise error_not_found()
30-
custom_metrics = await prometheus.get_metrics(session=session)
30+
custom_metrics = await pull_metrics.get_metrics(session=session)
3131
prometheus_metrics = generate_latest()
3232
return custom_metrics + prometheus_metrics.decode()

src/dstack/_internal/server/services/prometheus/__init__.py

Whitespace-only changes.

src/dstack/_internal/server/services/prometheus.py renamed to src/dstack/_internal/server/services/prometheus/pull_metrics.py

File renamed without changes.

src/dstack/_internal/server/background/metrics.py renamed to src/dstack/_internal/server/services/prometheus/push_metrics.py

File renamed without changes.

src/tests/_internal/server/background/tasks/test_process_runs.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
get_job_provisioning_data,
2929
get_run_spec,
3030
)
31+
from dstack._internal.utils import common
3132

3233
pytestmark = pytest.mark.usefixtures("image_config_mock")
3334

@@ -72,10 +73,14 @@ async def make_run(
7273
class TestProcessRuns:
7374
@pytest.mark.asyncio
7475
@pytest.mark.parametrize("test_db", ["sqlite", "postgres"], indirect=True)
76+
@patch(
77+
"dstack._internal.utils.common.get_current_datetime",
78+
return_value=datetime.datetime(2024, 1, 1, 12, 0, 0, tzinfo=datetime.timezone.utc),
79+
)
7580
async def test_submitted_to_provisioning(self, test_db, session: AsyncSession):
7681
run = await make_run(session, status=RunStatus.SUBMITTED)
7782
await create_job(session=session, run=run, status=JobStatus.PROVISIONING)
78-
current_time = datetime.datetime.now(datetime.timezone.utc)
83+
current_time = common.get_current_datetime()
7984

8085
expected_duration = (
8186
current_time - run.submitted_at.replace(tzinfo=datetime.timezone.utc)
@@ -91,9 +96,7 @@ async def test_submitted_to_provisioning(self, test_db, session: AsyncSession):
9196
assert args[1] == run.project.name
9297
assert args[2] == "service"
9398
# Assert the duration is close to our expected duration (within 0.05 second tolerance)
94-
assert abs(args[0] - expected_duration) < 0.05, (
95-
f"Expected duration ~{expected_duration:.3f}s, got {args[0]:.3f}s"
96-
)
99+
assert args[0] == expected_duration
97100

98101
await session.refresh(run)
99102
assert run.status == RunStatus.PROVISIONING
@@ -233,11 +236,15 @@ async def test_pending_to_submitted(self, test_db, session: AsyncSession):
233236
class TestProcessRunsReplicas:
234237
@pytest.mark.asyncio
235238
@pytest.mark.parametrize("test_db", ["sqlite", "postgres"], indirect=True)
239+
@patch(
240+
"dstack._internal.utils.common.get_current_datetime",
241+
return_value=datetime.datetime(2024, 1, 1, 12, 0, 0, tzinfo=datetime.timezone.utc),
242+
)
236243
async def test_submitted_to_provisioning_if_any(self, test_db, session: AsyncSession):
237244
run = await make_run(session, status=RunStatus.SUBMITTED, replicas=2)
238245
await create_job(session=session, run=run, status=JobStatus.SUBMITTED, replica_num=0)
239246
await create_job(session=session, run=run, status=JobStatus.PROVISIONING, replica_num=1)
240-
current_time = datetime.datetime.now(datetime.timezone.utc)
247+
current_time = common.get_current_datetime()
241248

242249
expected_duration = (
243250
current_time - run.submitted_at.replace(tzinfo=datetime.timezone.utc)
@@ -253,10 +260,7 @@ async def test_submitted_to_provisioning_if_any(self, test_db, session: AsyncSes
253260
assert args[1] == run.project.name
254261
assert args[2] == "service"
255262
assert isinstance(args[0], float)
256-
# Assert the duration is close to our expected duration (within 0.05 second tolerance)
257-
assert abs(args[0] - expected_duration) < 0.05, (
258-
f"Expected duration ~{expected_duration:.3f}s, got {args[0]:.3f}s"
259-
)
263+
assert args[0] == expected_duration
260264

261265
await session.refresh(run)
262266
assert run.status == RunStatus.PROVISIONING

src/tests/_internal/server/services/prometheus/__init__.py

Whitespace-only changes.

src/tests/_internal/server/background/test_metrics.py renamed to src/tests/_internal/server/services/prometheus/test_push_metrics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from unittest.mock import MagicMock
22

3-
from dstack._internal.server.background.metrics import run_metrics
3+
from dstack._internal.server.services.prometheus.push_metrics import run_metrics
44

55

66
class TestRunMetrics:

0 commit comments

Comments
 (0)