From de5b477d4241d631abd223fd24febfb4166ca05e Mon Sep 17 00:00:00 2001 From: Jacopo Gasparetto <jacopo.gasparetto@cnaf.infn.it> Date: Wed, 5 Apr 2023 18:24:40 +0200 Subject: [PATCH] Add objects count and total size to GET buckets --- backend/src/ceph_service.py | 33 ++++++++++++++++++++------------- backend/src/models/buckets.py | 3 ++- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/backend/src/ceph_service.py b/backend/src/ceph_service.py index 5be6fe8..49b8903 100644 --- a/backend/src/ceph_service.py +++ b/backend/src/ceph_service.py @@ -10,36 +10,43 @@ AWS_SESSION_TOKEN = None def get_s3_client(): - resource = boto3.resource('s3', - endpoint_url=MINIO_ENDPOINT, - aws_access_key_id=AWS_ACCESS_KEY_ID, - aws_secret_access_key=AWS_SECRET_ACCESS_KEY, - aws_session_token=AWS_SESSION_TOKEN, - config=boto3.session.Config(signature_version='s3v4'), - verify=False - ) - client = resource.meta.client - return client + return boto3.resource('s3', + endpoint_url=MINIO_ENDPOINT, + aws_access_key_id=AWS_ACCESS_KEY_ID, + aws_secret_access_key=AWS_SECRET_ACCESS_KEY, + aws_session_token=AWS_SESSION_TOKEN, + config=boto3.session.Config(signature_version='s3v4'), + verify=False + ) def list_buckets() -> BucketResponse: s3 = get_s3_client() - response = s3.list_buckets() + client = s3.meta.client + response = client.list_buckets() buckets_info = response["Buckets"] buckets = [None] * len(buckets_info) for i, bucket_info in enumerate(buckets_info): bucket_name = bucket_info["Name"] creation_date = bucket_info["CreationDate"] - bucket_acl = s3.get_bucket_acl(Bucket=bucket_name) + bucket_acl = client.get_bucket_acl(Bucket=bucket_name) grant = bucket_acl["Grants"][0] # TODO: Here we can have multiple grants permission = grant["Permission"] read = permission in ("READ", "FULL_CONTROL") write = permission in ("WRITE", "FULL_CONTROL") + objects = s3.Bucket(bucket_name).objects.all() + n_objects = 0 + size_byte = 0 + for obj in objects: + n_objects += 1 + size_byte += obj.size rw_access = BucketRWAccess(read=read, write=write) buckets[i] = Bucket( name=bucket_name, creation_date=creation_date, details={}, - rw_access=rw_access + rw_access=rw_access, + objects=n_objects, + size=size_byte ) return BucketResponse(buckets=buckets, total=len(buckets)) diff --git a/backend/src/models/buckets.py b/backend/src/models/buckets.py index 542e0bc..4d7bd41 100644 --- a/backend/src/models/buckets.py +++ b/backend/src/models/buckets.py @@ -13,7 +13,8 @@ class Bucket(BaseModel): creation_date: datetime details: dict rw_access: BucketRWAccess - + objects: int + size: int class BucketResponse(BaseModel): buckets: List[Bucket] -- GitLab