GraphicalEngine/Update-TuiTable.ps1

# rebuilds all table rows from counter data

function Update-TuiTable {
    [OutputType([void])]
    param(
        [System.Data.DataTable]  $DataTable,
        [Terminal.Gui.TableView] $TableView,
        [System.Collections.Generic.List[psTPCCLASSES.CounterConfiguration]] $Counters,
        [hashtable] $ColumnNames
    )

    $DataTable.Rows.Clear()

    foreach ($c in $Counters) {
        $stats = $c.Statistics

        $row = $DataTable.NewRow()
        $row[$ColumnNames.Computer] = Format-TuiCell $c.ComputerName 12 -Left
        $row[$ColumnNames.Counter]  = Format-TuiCell $c.Title 18 -Left
        $row[$ColumnNames.Unit]     = Format-TuiCell $c.Unit 7
        $row[$ColumnNames.Current]  = Format-TuiCell $(if ($stats.ContainsKey('Current')) { $stats['Current'].ToString("F$($c.DecimalPlaces)") } else { "-" }) 10
        $row[$ColumnNames.Min]      = Format-TuiCell $(if ($stats.ContainsKey('Minimum')) { $stats['Minimum'].ToString("F1") } else { "-" }) 10
        $row[$ColumnNames.Max]      = Format-TuiCell $(if ($stats.ContainsKey('Maximum')) { $stats['Maximum'].ToString("F1") } else { "-" }) 10
        $row[$ColumnNames.Avg]      = Format-TuiCell $(if ($stats.ContainsKey('Average')) { $stats['Average'].ToString("F1") } else { "-" }) 10
        $row[$ColumnNames.Samples]  = Format-TuiCell $(if ($stats.ContainsKey('Count'))   { $stats['Count'].ToString() } else { "0" }) 7
        $row[$ColumnNames.Duration] = Format-TuiCell "$($c.ExecutionDuration.ToString()) ms" 8

        # last 5 values formatted side by side
        if ($stats.ContainsKey('Last5')) {
            $formattedLast5 = @($stats['Last5'] | ForEach-Object { $_.ToString().PadLeft(6) }) -join " | "
            $row[$ColumnNames.Last5] = " $formattedLast5 "
        } else {
            $row[$ColumnNames.Last5] = " - "
        }

        [void]$DataTable.Rows.Add($row)
    }

    $TableView.Update()
}