HI i have been doing some tests with UD and i have tried to test the following code
Get-UDDashboard | Stop-UDDashboard
$Services = New-UDEndpoint -Id test -Url "/Services" -Endpoint {
$Cache:Services = (Get-Service -ComputerName "app001" -Name "MpsSvc") | Select-Object Name, Status | Sort-Object Name | ForEach-Object {
$FontColor = 'Green'
if ($_.Status -ne 'Running') {
$FontColor = 'Red'
}
[PSCustomObject]@{
Name = $_.Name
Status = New-UDElement -Tag 'div' -Attributes @{ style = @{ color = $FontColor } } -Content { $_.Status.ToString() }
Select = if ($_.Status -eq 'Stopped') {
New-UDButton -BackgroundColor "Red" -Text "Start" -OnClick {
Get-Service -ComputerName "app001" -Name $_.Name | Start-Service
Invoke-RestMethod http://localhost:1000/api/services
Show-UDToast -Message "Service Started!" -MessageColor Green -Title $_.Name -Position topCenter -Duration 2500
}
}
else {
if ($_.Status -eq 'Running') {
New-UDButton -BackgroundColor "#26a69a" -Text "Stop" -Icon stop_circle -OnClick {
Get-Service -ComputerName "app001" -Name $_.Name | Stop-Service
Invoke-RestMethod http://localhost:1000/api/services
Show-UDToast -Message "Service Stopped!" -MessageColor Red -Title $_.Name -Position topCenter -Duration 2500
}
}
}
}
}
}
$HomePage = New-UDPage -Name "Home" -Icon home -Content {
New-UDCard -Title "Welcome to Tasks Manager Dashboard! You can begin by clicking hamburger menu icon above"
New-UdRow {
New-UdColumn -Size 6 -Content {
New-UdRow {
New-UdColumn -Size 12 -Content {
New-UdTable -Title "Server Information" -Headers @(" ", " ") -Endpoint {
@{
'Computer Name' = $env:COMPUTERNAME
'Operating System' = (Get-CimInstance -ClassName Win32_OperatingSystem).Caption
'Total Disk Space (C:)' = (Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DeviceID='C:'").Size / 1GB | ForEach-Object { "$([Math]::Round($_, 2)) GBs " }
'Free Disk Space (C:)' = (Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace / 1GB | ForEach-Object { "$([Math]::Round($_, 2)) GBs " }
}.GetEnumerator() | Out-UDTableData -Property @("Name", "Value")
}
}
}
New-UdRow {
New-UdColumn -Size 3 -Content {
New-UdChart -Title "Memory by Process" -Type Doughnut -RefreshInterval 5 -Endpoint {
Get-Process | ForEach-Object { [PSCustomObject]@{ Name = $_.Name; WorkingSet = [Math]::Round($_.WorkingSet / 1MB, 2) } } | Out-UDChartData -DataProperty "WorkingSet" -LabelProperty Name
} -Options @{
legend = @{
display = $false
}
}
}
New-UdColumn -Size 3 -Content {
New-UdChart -Title "CPU by Process" -Type Doughnut -RefreshInterval 5 -Endpoint {
Get-Process | ForEach-Object { [PSCustomObject]@{ Name = $_.Name; CPU = $_.CPU } } | Out-UDChartData -DataProperty "CPU" -LabelProperty Name
} -Options @{
legend = @{
display = $false
}
}
}
New-UdColumn -Size 3 -Content {
New-UdChart -Title "Handle by Process" -Type Doughnut -RefreshInterval 5 -Endpoint {
Get-Process | Out-UDChartData -DataProperty "HandleCount" -LabelProperty Name
} -Options @{
legend = @{
display = $false
}
}
}
New-UdColumn -Size 3 -Content {
New-UdChart -Title "Threads by Process" -Type Doughnut -RefreshInterval 5 -Endpoint {
Get-Process | ForEach-Object { [PSCustomObject]@{ Name = $_.Name; Threads = $_.Threads.Count } } | Out-UDChartData -DataProperty "Threads" -LabelProperty Name
} -Options @{
legend = @{
display = $false
}
}
}
}
New-UdRow {
New-UdColumn -Size 12 -Content {
New-UdChart -Title "Disk Space by Drive" -Type Bar -AutoRefresh -Endpoint {
Get-CimInstance -ClassName Win32_LogicalDisk | ForEach-Object {
[PSCustomObject]@{ DeviceId = $_.DeviceID;
Size = [Math]::Round($_.Size / 1GB, 2);
FreeSpace = [Math]::Round($_.FreeSpace / 1GB, 2);
} } | Out-UDChartData -LabelProperty "DeviceID" -Dataset @(
New-UdChartDataset -DataProperty "Size" -Label "Size" -BackgroundColor "#80962F23" -HoverBackgroundColor "#80962F23"
New-UdChartDataset -DataProperty "FreeSpace" -Label "Free Space" -BackgroundColor "#8014558C" -HoverBackgroundColor "#8014558C"
)
} -Options @{
scales = @{
yAxes = @(@{
min = 0
})
}
}
}
}
}
New-UdColumn -Size 6 -Content {
New-UdRow {
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "CPU (% processor time)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#80FF6B63' -ChartBorderColor '#FFFF6B63' -Endpoint {
try {
Get-Counter '\Processor(_Total)\% Processor Time' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "SQL CPU (% processor time)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#80FF6B63' -ChartBorderColor '#FFFF6B63' -Endpoint {
try {
Get-Counter '\Processor(_Total)\% Processor Time' -ComputerName lmsdbstg06 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "Memory (% in use)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#8028E842' -ChartBorderColor '#FF28E842' -Endpoint {
try {
Get-Counter '\memory\% committed bytes in use' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "SQL Memory (% in use)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#8028E842' -ChartBorderColor '#FF28E842' -Endpoint {
try {
Get-Counter '\memory\% committed bytes in use' -ComputerName lmsdbstg06 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
}
New-UdRow {
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "Network (IO Read Bytes/sec)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#80E8611D' -ChartBorderColor '#FFE8611D' -Endpoint {
try {
Get-Counter '\Process(_Total)\IO Read Bytes/sec' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "SQL Network (IO Read Bytes/sec)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#80E8611D' -ChartBorderColor '#FFE8611D' -Endpoint {
try {
Get-Counter '\Process(_Total)\IO Read Bytes/sec' -ComputerName lmsdbstg06 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "Disk (% disk time)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#80E8611D' -ChartBorderColor '#FFE8611D' -Endpoint {
try {
Get-Counter '\physicaldisk(_total)\% disk time' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
New-UdColumn -Size 6 -Content {
New-UdMonitor -Title "SQL Disk (% disk time)" -Type Line -DataPointHistory 20 -RefreshInterval 5 -ChartBackgroundColor '#80E8611D' -ChartBorderColor '#FFE8611D' -Endpoint {
try {
Get-Counter '\physicaldisk(_total)\% disk time' -ComputerName lmsdbstg06 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty CounterSamples | Select-Object -ExpandProperty CookedValue | Out-UDMonitorData
}
catch {
0 | Out-UDMonitorData
}
}
}
}
New-UdRow {
New-UdColumn -Size 12 {
New-UdGrid -Title "Processes" -Headers @("Name", "ID", "Working Set", "CPU") -Properties @("Name", "Id", "WorkingSet", "CPU") -AutoRefresh -RefreshInterval 60 -Endpoint {
Get-Process | Select-Object Name, ID, WorkingSet, CPU | Out-UDGridData
}
}
}
}
}
}
$Page1 = New-UDPage -Name "Services" -Icon server -Content {
New-UDElement -Id "Services" -Tag div4 -EndPoint {
New-UDGrid -Id "Grid" -Title "Services" -Headers @("Name", "Status", "Select") -Properties @("Name", "Status", "Select") -Endpoint {
$Cache:Services | Out-UDGridData
}
}
New-UDButton -BackgroundColor "#26a69a" -Text "Refresh" -OnClick {
Start-Sleep -Seconds 2
Sync-UDElement -Id "Grid" -Broadcast
Start-Sleep -Seconds 2
}
}
Start-UDDashboard -Endpoint @($Services) -Content {
New-UDDashboard -Pages @($HomePage, $Page1) -Title "SM" -Color '#FF050F7F'
} -Port 1000 -Name SM -AutoReload
and below is the results when trying to do Invoke-RestMethod http://localhost:1000/api/services
felt like a bug but it worked when i gave the button an ID but wont work right when u have multiple objects because they cannot share same id.
i have tried giving the button a different id for different object and when i refresh the grid the status changed after onclick but the button remains the same unless i refresh the whole page F5 then the button changed to match the next status
after F5