@@ -49,30 +49,61 @@ def status():
4949 num_resources = 0
5050 size_resources = 0
5151 size_other = 0
52- s3_client , s3_session , s3_resource = s3 .get_s3 ()
53- buckets = [b ["Name" ] for b in s3_client .list_buckets ()["Buckets" ]]
54- for bucket in buckets :
55- kwargs = {"Bucket" : bucket ,
56- "MaxKeys" : 500
57- }
58- while True :
59- resp = s3_client .list_objects_v2 (** kwargs )
60-
61- for obj in resp .get ("Contents" , []):
62- if obj ["Key" ].startswith ("resource/" ):
63- num_resources += 1
64- size_resources += obj ["Size" ]
65- else :
66- size_other += obj ["Size" ]
67-
68- if not resp .get ("IsTruncated" ):
69- break
70- else :
71- kwargs ["ContinuationToken" ] = resp .get (
72- "NextContinuationToken" )
73-
74- click .echo (f"S3 buckets: { len (buckets )} " )
52+ num_buckets = 0
53+ for bucket_name in s3 .iter_buckets ():
54+ num_buckets += 1
55+ bi = get_bucket_info (bucket_name )
56+ num_resources += bi ["num_resources" ]
57+ size_resources += bi ["size_resources" ]
58+ size_other += bi ["size_other" ]
59+
60+ click .echo (f"S3 buckets: { num_buckets } " )
7561 click .echo (f"S3 resources number: { num_resources } " )
76- click .echo (f"S3 resources size: { size_resources / 1024 ** 3 :.0f} GB " )
62+ click .echo (f"S3 resources size: { size_resources / 1024 ** 3 :.0f} GiB " )
7763 click .echo (f"S3 total size: "
78- f"{ (size_other + size_resources ) / 1024 ** 3 :.0f} GB" )
64+ f"{ (size_other + size_resources ) / 1024 ** 3 :.0f} GiB" )
65+
66+ # Backup bucket
67+ try :
68+ bbi = get_bucket_info ("000000000-backup" )
69+ except BaseException :
70+ click .echo ("Instance backup bucket does not exist." )
71+ else :
72+ click .echo (f"S3 instance backup number: { bbi ['num_other' ]} " )
73+ click .echo (f"S3 instance backup size: "
74+ f"{ bbi ['size_other' ]/ 1024 ** 3 :.0f} GiB" )
75+
76+
77+ def get_bucket_info (bucket_name ):
78+ s3_client , s3_session , s3_resource = s3 .get_s3 ()
79+ num_resources = 0
80+ num_other = 0
81+ size_resources = 0
82+ size_other = 0
83+
84+ kwargs = {"Bucket" : bucket_name ,
85+ "MaxKeys" : 500
86+ }
87+ while True :
88+ resp = s3_client .list_objects_v2 (** kwargs )
89+
90+ for obj in resp .get ("Contents" , []):
91+ if obj ["Key" ].startswith ("resource/" ):
92+ num_resources += 1
93+ size_resources += obj ["Size" ]
94+ else :
95+ num_other += 1
96+ size_other += obj ["Size" ]
97+
98+ if not resp .get ("IsTruncated" ):
99+ break
100+ else :
101+ kwargs ["ContinuationToken" ] = resp .get (
102+ "NextContinuationToken" )
103+
104+ return {
105+ "num_resources" : num_resources ,
106+ "num_other" : num_other ,
107+ "size_resources" : size_resources ,
108+ "size_other" : size_other ,
109+ }
0 commit comments