Private/AWS/Merge-SilkTCOAWSFSxData.ps1
|
function Merge-SilkTCOAWSFSxData { param ( [Parameter(Mandatory)] [array] $fslist, [Parameter(Mandatory)] [array] $metrics, [Parameter()] [array] $costs ) $newarray = @() foreach ($fs in $fslist) { $fsId = $fs.FileSystemId $rows = @($metrics | Where-Object { $_.FileSystemId -eq $fsId }) if (-not $rows) { continue } # fsx bills the filesystem, not the volume. rather than spread an estimate across # every volume row we put the whole thing on the first row and null the rest - # same trick the ec2 merge uses for VMCostUSD. column still sums correctly. $fsCompute = $null $fsStorage = $null if ($costs) { $computeMatch = $costs | Where-Object { $_.ResourceId -eq $fsId -and $_.MeterCategory -eq 'Compute' } $storageMatch = $costs | Where-Object { $_.ResourceId -eq $fsId -and $_.MeterCategory -eq 'Storage' } if ($computeMatch) { $fsCompute = ($computeMatch | Measure-Object -Property Cost -Sum).Sum } if ($storageMatch) { $fsStorage = ($storageMatch | Measure-Object -Property Cost -Sum).Sum } } $first = $true foreach ($r in $rows) { $obj = New-Object psobject $obj | Add-Member -MemberType NoteProperty -Name VMName -Value $r."FS name" $obj | Add-Member -MemberType NoteProperty -Name ResourceGroupName -Value $r.ResourceGroup $obj | Add-Member -MemberType NoteProperty -Name Zone -Value $r."FS Zone" $obj | Add-Member -MemberType NoteProperty -Name VMSize -Value $r."FS size" $obj | Add-Member -MemberType NoteProperty -Name DiskName -Value $r."Volume Name" $obj | Add-Member -MemberType NoteProperty -Name DiskReadMB -Value $r."ReadMBps-avg" $obj | Add-Member -MemberType NoteProperty -Name DiskWriteMB -Value $r."WriteMBps-avg" $obj | Add-Member -MemberType NoteProperty -Name DiskReadIOPS -Value $r."ReadIOPS-avg" $obj | Add-Member -MemberType NoteProperty -Name DiskWriteIOPS -Value $r."WriteIOPS-avg" $obj | Add-Member -MemberType NoteProperty -Name DiskCostUSD -Value $(if ($first) { $fsStorage } else { $null }) $obj | Add-Member -MemberType NoteProperty -Name VMCostUSD -Value $(if ($first) { $fsCompute } else { $null }) $obj | Add-Member -MemberType NoteProperty -Name "DiskSizeGB" -Value $r.VolumeSizeGB $obj | Add-Member -MemberType NoteProperty -Name "Disk SKU" -Value 'ONTAP' $obj | Add-Member -MemberType NoteProperty -Name "Disk Tier" -Value $r.TieringPolicy $obj | Add-Member -MemberType NoteProperty -Name "Disk Class" -Value 'SSD+CapacityPool' $obj | Add-Member -MemberType NoteProperty -Name "Disk IOPS" -Value $r.ProvisionedIOPS $obj | Add-Member -MemberType NoteProperty -Name "Disk MBps" -Value $r.ThroughputCapacityMBps $obj | Add-Member -MemberType NoteProperty -Name "Region" -Value $r.Region # always-on managed service, nothing was actually measured so dont imply 100 $obj | Add-Member -MemberType NoteProperty -Name "UptimePercentage" -Value 'N/A' $obj | Add-Member -MemberType NoteProperty -Name Days -Value $r.Days $newarray += $obj $first = $false } } return $newarray } |