You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Starting Situation

  • User might be interested to automatically receive a report about the daily plan.
  • The report includes the same information as available from the JOC Cockpit Daily Plan view.

Use Cases

Report Daily Plan from a job

The PowerShell CLI can be used by jobs to create reports. Two modules are in use for this purpose

  • the JobScheduler PowerShell Module
  • a reporting PowerShell Module. This example make use of ImportExcel that can be used to create Excel reports on Windows and Linux.

The Get-JobSchedulerDailyPlan cmdlet is used to retrieve daily plan data and to forward them to the ImportExcel module within a job:


Daily Plan Report (Windows version)
<?xml version="1.0" encoding="ISO-8859-1"?>
<job title="Report Daily Plan" process_class="agent_windows">
  <script language="powershell"><![CDATA[
Import-Module $env:SCHEDULER_DATA/config/powershell/Modules/ImportExcel
Import-Module $env:SCHEDULER_DATA/config/powershell/Modules/JobScheduler

Connect-JobScheduler -Url $JOCCockpitUrl -Credential $JOCCockpitCredential | Out-Null

# start mode mapping
$startModes = @{"0"="single start"; "1"="repeat start-start"; "2"="repeat end-start"}

# Dates in local time zone, output includes local date format
Get-JSDailyPlan -Timezone (Get-Timezone) `
                |  Select-Object -Property @{name="Job Chain/Job"; expression={ "$($_.jobChain)$($_.job)"}}, `
                                           @{name="Order ID"; expression={$_.orderId}}, `
                                           @{name="Status"; expression={$_.state._text}}, `
                                           @{name="Job Stream"; expression={$_.jobStream}}, `
                                           @{name="Late"; expression={$_.late}}, `
                                           @{name="Start Type"; expression={ $startModes[ "$($_.startMode)"] }}, `
                                           @{name="Repeat Interval"; expression={$_.period.repeat}}, `
                                           @{name="Planned Start Time"; expression={ Get-Date $_.plannedStartTime }}, `
                                           @{name="Expected End Time"; expression={ Get-Date $_.expectedEndTime }}, `
                                           @{name="Expected Duration (sec.)"; expression={ (New-Timespan -Start "$($_.plannedStartTime)" -End "$($_.expectedEndTime)").Seconds }}, `
                                           @{name="Start Time"; expression={ Get-Date $_.startTime }}, `
                                           @{name="End Time"; expression={ Get-Date $_.endTime }}, `
                                           @{name="Duration (sec.)"; expression={ (New-Timespan -Start "$($_.startTime)" -End "$($_.endTime)").Seconds }} `
                | Export-Excel -Path /tmp/jobscheduler_reporting.xlsx -WorksheetName "Daily-Plan" -ClearSheet
				
Write-Output ".. report created: /tmp/jobscheduler_reporting.xls"
]]></script>
  <run_time/>
</job>

Explanations

  • The job creates two events that signal start and completion of the job.
    • A common event class is used that is assigned the path of the job chain
    • Individual event ids are assigned that are created from the job name
  • All communication with the JobScheduler Supervisor or Master takes place by internal commands, no additional HTTP/HTTPS connection is used.


Daily Plan Report (Linux version)
<?xml version="1.0" encoding="ISO-8859-1"?>
<job title="Report Daily Plan" process_class="agent_linux">
  <script language="shell"><![CDATA[pwsh -NoLogo -NonInteractive -Command '& {
    . $env:SCHEDULER_DATA/config/powershell/JobScheduler.PowerShell_profile.ps1
	Import-Module $env:SCHEDULER_DATA/config/powershell/Modules/ImportExcel
	Import-Module $env:SCHEDULER_DATA/config/powershell/Modules/JobScheduler

	Connect-JobScheduler -Url $JOCCockpitUrl -Credential $JOCCockpitCredential | Out-Null

	# start mode mapping
	$startModes = @{"0"="single start"; "1"="repeat start-start"; "2"="repeat end-start"}

	# Dates in local time zone, output includes local date format
	Get-JSDailyPlan -Timezone (Get-Timezone) `
                |  Select-Object -Property @{name="Job Chain/Job"; expression={ "$($_.jobChain)$($_.job)"}}, `
                                           @{name="Order ID"; expression={$_.orderId}}, `
                                           @{name="Status"; expression={$_.state._text}}, `
                                           @{name="Job Stream"; expression={$_.jobStream}}, `
                                           @{name="Late"; expression={$_.late}}, `
                                           @{name="Start Type"; expression={ $startModes[ "$($_.startMode)"] }}, `
                                           @{name="Repeat Interval"; expression={$_.period.repeat}}, `
                                           @{name="Planned Start Time"; expression={ Get-Date $_.plannedStartTime }}, `
                                           @{name="Expected End Time"; expression={ Get-Date $_.expectedEndTime }}, `
                                           @{name="Expected Duration (sec.)"; expression={ (New-Timespan -Start "$($_.plannedStartTime)" -End "$($_.expectedEndTime)").Seconds }}, `
                                           @{name="Start Time"; expression={ Get-Date $_.startTime }}, `
                                           @{name="End Time"; expression={ Get-Date $_.endTime }}, `
                                           @{name="Duration (sec.)"; expression={ (New-Timespan -Start "$($_.startTime)" -End "$($_.endTime)").Seconds }} `
                | Export-Excel -Path /tmp/jobscheduler_reporting.xlsx -WorksheetName "Daily-Plan" -ClearSheet
}'
]]></script>
  <run_time/>
</job>
 

Explantions

  • The Add-JobSchedulerEvent cmdlet returns an event object that can be used for later pipelining
  • Event processing occurs asynchroneously, therefore newly created events might take some seconds to be available for retrieval..
  • The Get-JobSchedulerEvent cmdlet retrieves an array of event objects that are available with JobScheduler.
  • A previously created event object can be pipelined to the Remove-JobSchedulerEvent cmdlet.
  • In a more general sense all events as returned from Get-JobSchedulerEvent can be pipelined to the Remove-JobSchedulerEvent cmdlet.


  • No labels