Public/Watch-P1Commands.ps1
function Watch-P1Commands { <# .Synopsis Watch the commands on PlannerOne server. .Description Display for one environment loaded in PlannerOne the current command, queued commands and executed commands. .Parameter HostName The hostname to query (default localhost) .Parameter ServicePort The hostname port of REST Service (default 80) .Parameter Product The product to query (PS or RP - Default PS) .Parameter NameFilter Filter for the environment name. .Example Watch-P1ServerModel -ServicePort 8073 #> [cmdletbinding()] param( [string] $HostName, [int] $ServicePort, [string] $Product, [string] $NameFilter ) Process { if ($HostName -eq "") { $HostName = "localhost" } if ($ServicePort -eq 0) { $ServicePort = 80 } [string] $message = "" $state = 0 $auto = $true $continue = $true while($continue) { clear Get-Date if ($state -eq 0) { if ($Product -ne "RP") { $Product = "PS" $service = "commandproduction" } else { $service = "commandproject" } $escapedService = EscapeQueryData $service $url = 'http://' + $HostName + ':' + $ServicePort + "/Services/$escapedService/" $serviceUrl = FixUrl $url Write-Verbose $serviceUrl echo "Product: $Product - Filter: $NameFilter" if ($message -ne "") { echo $message $message = "" } $ids = (wget $serviceUrl).Content Write-Verbose $ids $idsObj = $ids | ConvertFrom-Json $filteredArray = @() $displayArray = @() if ($idsObj.Length -eq 0) { Write-Output "NO COMMAND EXECUTER FOR $Product" } else { [int] $i = 1 foreach ($env in $idsObj) { $envName = $env.Name $peak = $true if ($NameFilter -ne "") { if (!($envName.Contains($NameFilter))) { $peak = $false } } if ($peak) { $displayObj = New-Object System.Object $displayObj | Add-Member -type NoteProperty -name No -value $i $displayObj | Add-Member -type NoteProperty -name Name -value $envName $displayObj | Add-Member -type NoteProperty -name Group -value $env.PlanningGroupContainer $displayArray += $displayObj $filteredArray += $env } } $displayArray | Format-Table } echo "ESCAPE: Quit | R: Refresh | 1-9: Select environment | S: PS/RP switch" $x = [System.Console]::ReadKey() [int] $select = -1 switch ($x.key) { # http://msdn.microsoft.com/en-us/library/system.consolekey(v=vs.110).aspx Escape { $continue = $false } R {} S { if ($Product -eq "PS") { $Product = "RP" } else { $Product = "PS" } } D1 { $select = 0 } D2 { $select = 1 } D3 { $select = 2 } D4 { $select = 3 } D5 { $select = 4 } D6 { $select = 5 } D7 { $select = 6 } D8 { $select = 7 } D9 { $select = 8 } NumPad1 { $select = 0 } NumPad2 { $select = 1 } NumPad3 { $select = 2 } NumPad4 { $select = 3 } NumPad5 { $select = 4 } NumPad6 { $select = 5 } NumPad7 { $select = 6 } NumPad8 { $select = 7 } NumPad9 { $select = 8 } } if ($select -ne -1) { if ($select -gt $filterArray.Length) { $message = "Selected environment does not exist" } else { $selectedEnv = $filteredArray[$select] $state = 1 } } } else { if ($state -eq 1 -and $continue) { $escapedService = EscapeQueryData $service $escapedName = EscapeQueryData $selectedEnv.Name $escapedGroup = EscapeQueryData $selectedEnv.PlanningGroupContainer $url = 'http://' + $HostName + ':' + $ServicePort + "/Services/" + $escapedService + "/" + $escapedName + '/' + $escapedGroup $serviceUrl = FixUrl $url Write-Verbose $serviceUrl $headLine = "Product: $Product - Environment: " + $selectedEnv.Name + " - " + $selectedEnv.PlanningGroupContainer echo $headLine $commands = (wget $serviceUrl).Content Write-Verbose $commands $commandsObj = $commands | ConvertFrom-Json $commandsObj | Format-Table echo "ESCAPE: Quit | R: Refresh | L: Got back to list | A: Auto-Refresh (5s): $auto" $counter = 0 if ($auto) { while(![console]::KeyAvailable -and ($counter++ -lt 10)) { [Threading.Thread]::Sleep( 500 ) } } if ([console]::KeyAvailable -or !$auto) { $x = [System.Console]::ReadKey() switch ($x.key) { # http://msdn.microsoft.com/en-us/library/system.consolekey(v=vs.110).aspx Escape { $continue = $false } R {} L { $selectedEnv = $null $state = 0 } A { $auto = !$auto } } } } } } Write-Output "Watch end" } } |