Skip to content

Commit affb066

Browse files
committed
Improved example for disk accounting
1 parent e5edfd3 commit affb066

File tree

1 file changed

+30
-24
lines changed

1 file changed

+30
-24
lines changed

StorageGRID-Webscale-Tutorial.md

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = @()
174176
foreach ($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

Comments
 (0)