@@ -167,44 +167,50 @@ $BucketAccounting | Export-Csv -Path $HOME\Downloads\BucketAccounting.csv -NoTyp
167167
168168## Experimental Accounting of disk usage per tenant and bucket
169169
170+ The following script expects that the S3-Client PowerShell Module is installed and that a connection to a server was established via ` Connect-SgwServer ` .
171+
170172``` powershell
171173$Accounts = Get-SgwAccounts -Capabilities s3
172174$TenantAccounting = @()
173175$BucketAccounting = @()
174176foreach ($Account in $Accounts) {
177+ Write-Host "Checking account $($Account.Name)"
175178 $AccountUsage = 0
176179 $AccountObjectCount = 0
177180 $Buckets = $Account | Get-S3Buckets
178181 foreach ($Bucket in $Buckets) {
182+ Write-Host "Checking bucket $($Bucket.BucketName)"
179183 $BucketUsage = 0
180184 $BucketObjectCount = 0
181- $Objects = $Bucket | Get-S3Objects
182- foreach ($Object in $Objects) {
183- $BucketObjectCount += 1
184- $ObjectMetadata = $Object | Get-SgwObjectMetadata
185- $ReplicaCount = ($ObjectMetadata.locations | ? { $_.type -eq "replicated" }).Count
186- $ErasureCodeDataCount = ($ObjectMetadata.locations.fragments | ? { $_.type -eq "data" }).Count
187- $ErasureCodeParityCount = ($ObjectMetadata.locations.fragments | ? { $_.type -eq "parity" }).Count
188- if ($ReplicaCount) {
185+ if ($Bucket) {
186+ $Objects = $Bucket | Get-S3Objects
187+ foreach ($Object in $Objects) {
188+ $BucketObjectCount += 1
189+ $ObjectMetadata = $Object | Get-SgwObjectMetadata
190+ $ReplicaCount = ($ObjectMetadata.locations | ? { $_.type -eq "replicated" }).Count
191+ $ErasureCodeDataCount = ($ObjectMetadata.locations.fragments | ? { $_.type -eq "data" }).Count
192+ $ErasureCodeParityCount = ($ObjectMetadata.locations.fragments | ? { $_.type -eq "parity" }).Count
193+ if ($ReplicaCount) {
194+ $SizeFactor = $ReplicaCount
195+ }
196+ elseif ($ErasureCodeDataCount) {
197+ $SizeFactor = ($ErasureCodeDataCount + $ErasureCodeParityCount) / $ErasureCodeDataCount
198+ }
199+ elseif ($ObjectMetadata.objectSizeBytes -gt 0) {
200+ Write-Warning "No replicas and EC parts found for object ${Bucket.BucketName}/$($Object.Key)"
201+ }
189202 $SizeFactor = $ReplicaCount
203+ if ($ObjectMetadata.diskSizeBytes) {
204+ $BucketUsage += $SizeFactor * $ObjectMetadata.diskSizeBytes
205+ }
206+ else {
207+ $BucketUsage += $SizeFactor * $ObjectMetadata.objectSizeBytes
208+ }
190209 }
191- elseif ($ErasureCodeDataCount) {
192- $SizeFactor = ($ErasureCodeDataCount + $ErasureCodeParityCount) / $ErasureCodeDataCount
193- }
194- else {
195- Write-Warning "No replicas and EC parts found for object ${Bucket.BucketName}/$($Object.Key)"
196- }
197- $SizeFactor = $ReplicaCount
198- if ($ObjectMetadata.diskSizeBytes) {
199- $BucketUsage += $SizeFactor * $ObjectMetadata.diskSizeBytes
200- }
201- else {
202- $BucketUsage += $SizeFactor * $ObjectMetadata.objectSizeBytes
203- }
210+ $BucketAccounting += [PSCustomObject]@{AccountName=$Account.Name;AccountId=$Account.Id;BucketName=$Bucket.BucketName;BucketUsage=$BucketUsage;BucketObjectCount=$BucketObjectCount}
211+ $AccountUsage += $BucketUsage
212+ $AccountObjectCount += $BucketObjectCount
204213 }
205- $BucketAccounting += [PSCustomObject]@{AccountName=$Account.Name;AccountId=$Account.Id;BucketName=$Bucket.BucketName;BucketUsage=$BucketUsage;BucketObjectCount=$BucketObjectCount}
206- $AccountUsage += $BucketUsage
207- $AccountObjectCount += $BucketObjectCount
208214 }
209215 $TenantAccounting += [PSCustomObject]@{AccountName=$Account.Name;AccountId=$Account.Id;AccountUsage=$AccountUsage;AccountObjectCount=$AccountObjectCount}
210216}
0 commit comments