From 4cac87e434c54536e2d7ab0cc3aa90890532896b Mon Sep 17 00:00:00 2001 From: Sergey Mezentsev Date: Thu, 15 Feb 2024 04:34:14 +0300 Subject: [PATCH 1/4] Added region and created properties to the pool api --- ruff.toml | 2 +- src/dstack/_internal/core/models/pools.py | 2 ++ src/dstack/_internal/server/services/pools.py | 2 ++ src/dstack/_internal/server/testing/common.py | 1 + src/tests/_internal/server/services/test_pools.py | 2 ++ 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ruff.toml b/ruff.toml index 32e7b000d..26348546e 100644 --- a/ruff.toml +++ b/ruff.toml @@ -10,4 +10,4 @@ ignore =[ [lint.isort] known-first-party = ["dstack"] -known-third-party = ["mkdocs_gen_files"] +known-third-party = ["mkdocs_gen_files", "datacrunch"] diff --git a/src/dstack/_internal/core/models/pools.py b/src/dstack/_internal/core/models/pools.py index beb623a00..33a3edb65 100644 --- a/src/dstack/_internal/core/models/pools.py +++ b/src/dstack/_internal/core/models/pools.py @@ -24,6 +24,8 @@ class Instance(BaseModel): job_status: Optional[JobStatus] = None hostname: str status: InstanceStatus + created: Optional[datetime.datetime] + region: str price: float diff --git a/src/dstack/_internal/server/services/pools.py b/src/dstack/_internal/server/services/pools.py index 4260f0636..67183ec1d 100644 --- a/src/dstack/_internal/server/services/pools.py +++ b/src/dstack/_internal/server/services/pools.py @@ -229,6 +229,8 @@ def instance_model_to_instance(instance_model: InstanceModel) -> Instance: instance_type=jpd.instance_type, hostname=jpd.hostname, status=instance_model.status, + region=offer.region, + created=instance_model.created_at, price=offer.price, ) if instance_model.job is not None: diff --git a/src/dstack/_internal/server/testing/common.py b/src/dstack/_internal/server/testing/common.py index 642270e58..6be2f7cce 100644 --- a/src/dstack/_internal/server/testing/common.py +++ b/src/dstack/_internal/server/testing/common.py @@ -320,6 +320,7 @@ async def create_instance( project=project, status=status, created_at=created_at, + started_at=created_at, finished_at=finished_at, job_provisioning_data='{"backend": "datacrunch", "instance_type": {"name": "instance", "resources": {"cpus": 1, "memory_mib": 512, "gpus": [], "spot": false, "disk": {"size_mib": 102400}, "description": ""}}, "instance_id": "running_instance.id", "ssh_proxy": null, "hostname": "running_instance.ip", "region": "running_instance.location", "price": 0.1, "username": "root", "ssh_port": 22, "dockerized": true, "backend_data": null}', offer='{"backend": "datacrunch", "instance": {"name": "instance", "resources": {"cpus": 2, "memory_mib": 12000, "gpus": [], "spot": false, "disk": {"size_mib": 102400}, "description": ""}}, "region": "en", "price": 0.1, "availability": "available"}', diff --git a/src/tests/_internal/server/services/test_pools.py b/src/tests/_internal/server/services/test_pools.py index b47ce8e11..da833d5fb 100644 --- a/src/tests/_internal/server/services/test_pools.py +++ b/src/tests/_internal/server/services/test_pools.py @@ -79,6 +79,8 @@ def test_convert_instance(): name="test_instance", hostname="hostname_test", status=InstanceStatus.PENDING, + region="eu-west-1", + started=None, price=1.0, ) From d6d7fe6ce155377ad44b64fe67cb17040e99a7da Mon Sep 17 00:00:00 2001 From: Sergey Mezentsev Date: Thu, 15 Feb 2024 05:58:54 +0300 Subject: [PATCH 2/4] Add columns to the dstack pool show --- src/dstack/_internal/cli/commands/pool.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/dstack/_internal/cli/commands/pool.py b/src/dstack/_internal/cli/commands/pool.py index b815a8a37..552d7a439 100644 --- a/src/dstack/_internal/cli/commands/pool.py +++ b/src/dstack/_internal/cli/commands/pool.py @@ -1,4 +1,5 @@ import argparse +import datetime from pathlib import Path from typing import Sequence @@ -290,18 +291,29 @@ def print_instance_table(instances: Sequence[Instance]) -> None: table = Table(box=None) table.add_column("INSTANCE NAME") table.add_column("BACKEND") + table.add_column("REGION") table.add_column("INSTANCE TYPE") + table.add_column("SPOT") table.add_column("STATUS") table.add_column("PRICE") + table.add_column("CREATED") for instance in instances: style = "success" if instance.status.is_available() else "warning" + created = ( + pretty_date(instance.created.replace(tzinfo=datetime.timezone.utc)) + if instance.created is not None + else "" + ) row = [ instance.name, instance.backend, + instance.region, instance.instance_type.resources.pretty_format(), + "yes" if instance.instance_type.resources.spot else "no", f"[{style}]{instance.status.value}[/]", f"${instance.price:.4}", + created, ] table.add_row(*row) From b8f78689a9bc6cbf4c41b8c4b3bf7601e304f0e1 Mon Sep 17 00:00:00 2001 From: Sergey Mezentsev Date: Thu, 15 Feb 2024 09:31:52 +0300 Subject: [PATCH 3/4] fixup! Added region and created properties to the pool api --- src/tests/_internal/server/services/test_pools.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tests/_internal/server/services/test_pools.py b/src/tests/_internal/server/services/test_pools.py index da833d5fb..28c53047a 100644 --- a/src/tests/_internal/server/services/test_pools.py +++ b/src/tests/_internal/server/services/test_pools.py @@ -25,6 +25,7 @@ from dstack._internal.core.models.users import GlobalRole from dstack._internal.server.models import InstanceModel from dstack._internal.server.testing.common import create_project, create_user +from dstack._internal.utils.common import get_current_datetime @pytest.mark.asyncio @@ -71,6 +72,7 @@ async def test_pool(session: AsyncSession, test_db): def test_convert_instance(): + created = get_current_datetime() expected_instance = Instance( backend=BackendType.LOCAL, instance_type=InstanceType( @@ -81,12 +83,13 @@ def test_convert_instance(): status=InstanceStatus.PENDING, region="eu-west-1", started=None, + created=created, price=1.0, ) im = InstanceModel( id=str(uuid.uuid4()), - created_at=dt.datetime.now(), + created_at=created, name="test_instance", status=InstanceStatus.PENDING, project_id=str(uuid.uuid4()), From 01f439e38ddc114415f9427ac44f63b23c10e03b Mon Sep 17 00:00:00 2001 From: Sergey Mezentsev Date: Thu, 15 Feb 2024 09:33:11 +0300 Subject: [PATCH 4/4] fixup! Added region and created properties to the pool api --- src/tests/_internal/server/services/test_pools.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tests/_internal/server/services/test_pools.py b/src/tests/_internal/server/services/test_pools.py index 28c53047a..935e463a3 100644 --- a/src/tests/_internal/server/services/test_pools.py +++ b/src/tests/_internal/server/services/test_pools.py @@ -82,7 +82,6 @@ def test_convert_instance(): hostname="hostname_test", status=InstanceStatus.PENDING, region="eu-west-1", - started=None, created=created, price=1.0, )