From ccb334f356d191364ba0ec6046dca6790a9de2ee Mon Sep 17 00:00:00 2001 From: Manohar Reddy Date: Mon, 10 Nov 2025 13:52:27 +0100 Subject: [PATCH] lvol detail: get used size --- simplyblock_web/api/v2/dtos.py | 4 +++- simplyblock_web/api/v2/volume.py | 16 ++++++++++++++-- simplyblock_web/test/api/v2/test_volume.py | 2 ++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/simplyblock_web/api/v2/dtos.py b/simplyblock_web/api/v2/dtos.py index 54c1b5b01..15d6ec5d4 100644 --- a/simplyblock_web/api/v2/dtos.py +++ b/simplyblock_web/api/v2/dtos.py @@ -197,6 +197,7 @@ class VolumeDTO(BaseModel): nodes: List[util.UrlPath] port: util.Port size: util.Unsigned + used_size: util.Unsigned cloned_from: Optional[util.UrlPath] crypto_key: Optional[Tuple[str, str]] high_availability: bool @@ -206,7 +207,7 @@ class VolumeDTO(BaseModel): max_w_mbytes: util.Unsigned @staticmethod - def from_model(model: LVol, request: Request, cluster_id: str): + def from_model(model: LVol, request: Request, cluster_id: str, used_size: util.Unsigned = 0): return VolumeDTO( id=UUID(model.get_id()), name=model.lvol_name, @@ -223,6 +224,7 @@ def from_model(model: LVol, request: Request, cluster_id: str): ], port=model.subsys_port, size=model.size, + used_size=used_size, cloned_from=str(request.url_for( 'clusters:storage-pools:snapshots:detail', cluster_id=cluster_id, diff --git a/simplyblock_web/api/v2/volume.py b/simplyblock_web/api/v2/volume.py index 698788718..779cac636 100644 --- a/simplyblock_web/api/v2/volume.py +++ b/simplyblock_web/api/v2/volume.py @@ -19,10 +19,22 @@ db = DBController() +def _get_used_size(volume: LVol) -> int: + stats = db.get_lvol_stats(volume, limit=1) + if stats: + return stats[0].size_used + return 0 + + @api.get('/', name='clusters:storage-pools:volumes:list') def list(request: Request, cluster: Cluster, pool: StoragePool) -> List[VolumeDTO]: return [ - VolumeDTO.from_model(lvol, request, cluster.get_id()) + VolumeDTO.from_model( + lvol, + request, + cluster.get_id(), + used_size=_get_used_size(lvol), + ) for lvol in db.get_lvols_by_pool_id(pool.get_id()) ] @@ -122,7 +134,7 @@ def _lookup_volume(volume_id: UUID) -> LVol: @instance_api.get('/', name='clusters:storage-pools:volumes:detail') def get(request: Request, cluster: Cluster, pool: StoragePool, volume: Volume) -> VolumeDTO: - return VolumeDTO.from_model(volume, request, cluster.get_id()) + return VolumeDTO.from_model(volume, request, cluster.get_id(), used_size=_get_used_size(volume)) class UpdatableLVolParams(BaseModel): diff --git a/simplyblock_web/test/api/v2/test_volume.py b/simplyblock_web/test/api/v2/test_volume.py index 74fa30ecd..71ec584f5 100644 --- a/simplyblock_web/test/api/v2/test_volume.py +++ b/simplyblock_web/test/api/v2/test_volume.py @@ -35,6 +35,8 @@ def test_volume_get(call, cluster, storage_pool, volume): assert volume_details['name'] == 'volumeX' assert volume_details['id'] == volume assert volume_details['size'] == 2 * 10 ** 9 + assert 'used_size' in volume_details + assert volume_details['used_size'] >= 0 # TODO assert schema