functions/Get-JS7ControllerStatus.ps1
function Get-JS7ControllerStatus { <# .SYNOPSIS Returns status information, optionally summary and history information for a JS7 Controller .DESCRIPTION Status information, optionally summary and history information are returned for a JS7 Controller. * Status information includes e.g. the start date and JS7 release * Summary information includes e.g. the number of running orders * History information includes e.g. an overview of past orders The following REST Web Service API resources are used: * /controller * /controller/p * /controllers/p .PARAMETER DateFrom Specifies the date starting from which history items should be returned. Consider that a UTC date has to be provided. Default: Begin of the current day as a UTC date .PARAMETER DateTo Specifies the date until which history items should be returned. Consider that a UTC date has to be provided. Default: End of the current day as a UTC date .PARAMETER RelativeDateFrom Specifies a relative date starting from which history items should be returned, e.g. * -1s, -2s: one second ago, two seconds ago * -1m, -2m: one minute ago, two minutes ago * -1h, -2h: one hour ago, two hours ago * -1d, -2d: one day ago, two days ago * -1w, -2w: one week ago, two weeks ago * -1M, -2M: one month ago, two months ago * -1y, -2y: one year ago, two years ago Optionally a time offset can be specified, e.g. -1d+02:00, as otherwise midnight UTC is assumed. Alternatively a timezone offset can be added, e.g. by using -1d+TZ, that is calculated by the cmdlet for the timezone that is specified with the -Timezone parameter. This parameter takes precedence over the -DateFrom parameter. .PARAMETER RelativeDateTo Specifies a relative date until which history items should be returned, e.g. * -1s, -2s: one second ago, two seconds ago * -1m, -2m: one minute ago, two minutes ago * -1h, -2h: one hour ago, two hours ago * -1d, -2d: one day ago, two days ago * -1w, -2w: one week ago, two weeks ago * -1M, -2M: one month ago, two months ago * -1y, -2y: one year ago, two years ago Optionally a time offset can be specified, e.g. -1d+02:00, as otherwise midnight UTC is assumed. Alternatively a timezone offset can be added, e.g. by using -1d+TZ, that is calculated by the cmdlet for the timezone that is specified with the -Timezone parameter. This parameter takes precedence over the -DateFrom parameter. .PARAMETER Summary Specifies that summary information about orders and tasks should be returned. .PARAMETER History Specifies that history information about orders and tasks should be returned. .PARAMETER Display Specifies that formatted output will be displayed, otherwise a status object will be returned that contain the respective information. .EXAMPLE Get-JS7ControllerStatus Returns status information about the JS7 Controller. .EXAMPLE Get-JS7ControllerStatus -Summary -Display Returns status information and summary information about orders and jobs. Formatted output is displayed. .EXAMPLE $status = Get-JS7ControllerStatus -Summary Returns an object including status information and summary information. .LINK about_JS7 #> [cmdletbinding()] param ( [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [DateTime] $DateFrom = (Get-Date -Hour 0 -Minute 0 -Second 0).ToUniversalTime(), [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [DateTime] $DateTo = (Get-Date -Hour 0 -Minute 0 -Second 0).AddDays(1).ToUniversalTime(), [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $RelativeDateFrom, [Parameter(Mandatory=$False,ValueFromPipeline=$False,ValueFromPipelinebyPropertyName=$True)] [string] $RelativeDateTo, [Parameter(Mandatory=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $History, [Parameter(Mandatory=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $Summary, [Parameter(Mandatory=$False,ValueFromPipelinebyPropertyName=$True)] [switch] $Display ) Begin { Approve-JS7Command $MyInvocation.MyCommand $stopWatch = Start-JS7StopWatch } Process { $body = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'controllerId' -value $script:jsWebService.ControllerId -InputObject $body [string] $requestBody = $body | ConvertTo-Json -Depth 100 $response = Invoke-JS7WebRequest -Path '/controller' -Body $requestBody if ( $response.StatusCode -eq 200 ) { $volatileStatus = ( $response.Content | ConvertFrom-JSON ).controller } else { throw ( $response | Format-List -Force | Out-String ) } $response = Invoke-JS7WebRequest -Path '/controller/p' -Body $requestBody if ( $response.StatusCode -eq 200 ) { $permanentStatus = ( $response.Content | ConvertFrom-JSON ).controller } else { throw ( $response | Format-List -Force | Out-String ) } $response = Invoke-JS7WebRequest -Path '/controllers/p' -Body $requestBody if ( $response.StatusCode -eq 200 ) { $clusterStatus = ( $response.Content | ConvertFrom-JSON ).controllers } else { throw ( $response | Format-List -Force | Out-String ) } $returnStatus = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'Volatile' -value $volatileStatus -InputObject $returnStatus Add-Member -Membertype NoteProperty -Name 'Permanent' -value $permanentStatus -InputObject $returnStatus foreach( $clusterNodeInstance in $clusterStatus ) { if ( $clusterNodeInstance.Url -eq $volatileStatus.Url ) { if ( !$volatileStatus.clusterNodeState -or $volatileStatus.clusterNodeState._text -eq 'active' ) { Add-Member -Membertype NoteProperty -Name 'Active' -value $clusterNodeInstance -InputObject $returnStatus } else { Add-Member -Membertype NoteProperty -Name 'Passive' -value $clusterNodeInstance -InputObject $returnStatus } } else { if ( $volatileStatus.clusterNodeState._text -eq 'active' ) { Add-Member -Membertype NoteProperty -Name 'Passive' -value $clusterNodeInstance -InputObject $returnStatus } else { Add-Member -Membertype NoteProperty -Name 'Active' -value $clusterNodeInstance -InputObject $returnStatus } } } if ( $Display ) { $output = " ________________________________________________________________________ ....... Controller ID: $($returnStatus.Permanent.controllerId) ............. version: $($returnStatus.Permanent.version) ................. URL: $($returnStatus.Volatile.url) ................ role: $($returnStatus.Volatile.role) ............... title: $($returnStatus.Permanent.title) ....... running since: $($returnStatus.Volatile.startedAt) ...... security level: $($returnStatus.Permanent.securityLevel) ..... cluster coupled: $($returnStatus.Volatile.isCoupled) .. cluster node state: $($returnStatus.Volatile.clusterNodeState._text) .... component status: $($returnStatus.Volatile.componentState._text) ... connection status: $($returnStatus.Volatile.connectionState._text)" foreach( $cluster in $returnStatus.cluster ) { $output += " ......... cluster URL: $($cluster.clusterUrl) ................ role: $($cluster.role) .................. OS: $($cluster.os.name), $($cluster.os.architecture), $($cluster.os.distribution)" } $output += " ________________________________________________________________________" Write-Output $output } if ( $Summary ) { $response = Invoke-JS7WebRequest -Path '/orders/overview/snapshot' -Body $requestBody if ( $response.StatusCode -eq 200 ) { $orderSummary = ( $response.Content | ConvertFrom-JSON ).orders } else { throw ( $response | Format-List -Force | Out-String ) } if ( $Display ) { $output = " ________________________________________________________________________ Order Summary ............. pending: $($orderSummary.pending) ........... scheduled: $($orderSummary.scheduled) ......... in progress: $($orderSummary.inProgress) ............. running: $($orderSummary.running) ........... suspended: $($orderSummary.suspended) ........... completed: $($orderSummary.terminated) ........... prompting: $($orderSummary.prompting) ............. waiting: $($orderSummary.waiting) ............. blocked: $($orderSummary.blocked) .............. failed: $($orderSummary.failed) ________________________________________________________________________" Write-Output $output } Add-Member -Membertype NoteProperty -Name 'OrderSummary' -value $orderSummary -InputObject $returnStatus } if ( $History ) { $body = New-Object PSObject Add-Member -Membertype NoteProperty -Name 'controllerId' -value $script:jsWebService.ControllerId -InputObject $body if ( $DateFrom -or $RelativeDateFrom ) { if ( $RelativeDateFrom ) { if ( $RelativeDateFrom.endsWith( '+TZ' ) ) { $RelativeDateFrom = $RelativeDateFrom.Substring( 0, $RelativeDateFrom.length-3 ) + $timezoneOffset } Add-Member -Membertype NoteProperty -Name 'dateFrom' -value $RelativeDateFrom -InputObject $body } else { Add-Member -Membertype NoteProperty -Name 'dateFrom' -value ( Get-Date (Get-Date $DateFrom).ToUniversalTime() -Format 'u').Replace(' ', 'T') -InputObject $body } } if ( $DateTo -or $RelativeDateTo ) { if ( $RelativeDateTo ) { if ( $RelativeDateTo.endsWith( '+TZ' ) ) { $RelativeDateTo = $RelativeDateTo.Substring( 0, $RelativeDateTo.length-3 ) + $timezoneOffset } Add-Member -Membertype NoteProperty -Name 'dateTo' -value $RelativeDateTo -InputObject $body } else { Add-Member -Membertype NoteProperty -Name 'dateTo' -value ( Get-Date (Get-Date $DateTo).ToUniversalTime() -Format 'u').Replace(' ', 'T') -InputObject $body } } [string] $requestBody = $body | ConvertTo-Json -Depth 100 $response = Invoke-JS7WebRequest -Path '/orders/overview/summary' -Body $requestBody if ( $response.StatusCode -eq 200 ) { $orderHistory = ( $response.Content | ConvertFrom-JSON ).orders } else { throw ( $response | Format-List -Force | Out-String ) } $response = Invoke-JS7WebRequest -Path '/jobs/overview/summary' -Body $requestBody if ( $response.StatusCode -eq 200 ) { $jobHistory = ( $response.Content | ConvertFrom-JSON ).jobs } else { throw ( $response | Format-List -Force | Out-String ) } if ( $Display ) { $output = " ________________________________________________________________________ Order History .......... successful: $($orderHistory.successful) .............. failed: $($orderHistory.failed) Task History .......... successful: $($jobHistory.successful) .............. failed: $($jobHistory.failed) ________________________________________________________________________" Write-Output $output } Add-Member -Membertype NoteProperty -Name 'OrderHistory' -value $orderHistory -InputObject $returnStatus Add-Member -Membertype NoteProperty -Name 'JobHistory' -value $jobHistory -InputObject $returnStatus } if ( !$Display ) { $returnStatus } else { Write-Output "" } } End { Trace-JS7StopWatch -CommandName $MyInvocation.MyCommand.Name -StopWatch $stopWatch Update-JS7Session } } |