Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepowershell
titleExample how to write order logs to individual log files
linenumberstrue
Get-JS7OrderHistory -RelativeDateFrom -8h | Get-JS7OrderLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.workflow))-$($_.orderId).order.log"}}, @{name='value'; expression={ $_.log }} | Set-Content

...

Code Block
languagepowershell
titleExample how to write order logs at an ongoing basis
linenumberstrue
# execute once
$lastHistory = Get-JS7OrderHistory -RelativeDateFrom -8h | Sort-Object -Property startTime

# execute in intervals
Get-JS7OrderHistory -DateFrom $lastHistory[0].startTime | Tee-Object -Variable lastHistory | Get-JS7OrderLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.workflow))-$($_.orderId).order.log"}}, @{name='value'; expression={ $_.log }} | Set-Content

...

Code Block
languagepowershell
titleExample how to write task logs to individual log files
linenumberstrue
Get-JS7TaskHistory -RelativeDateFrom -8h | Get-JS7TaskLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.job)).task.log"}}, @{name='value'; expression={ $_.log }} | Set-Content

...

Code Block
languagepowershell
titleExample how to write task logs at an ongoing basis
linenumberstrue
# execute once
$lastHistory = Get-JS7TaskHistory -RelativeDateFrom -8h | Sort-Object -Property startTime

# execute in intervals
Get-JS7TaskHistory -DateFrom $lastHistory[0].startTime | Tee-Object -Variable lastHistory | Get-JS7TaskLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.job)).task.log"}}, @{name='value'; expression={ $_.log }} | Set-Content

...

  • Provides a mechanism to subsequently retrieve previous logs. Starting from initial execution of the Get-JS7TaskHistory cmdlet the resulting $lastHistory object is used for any subsequent calls.
    Consider use of the Tee-Object cmdlet in the pipeline that updates the $lastHistory object that can be used for later executions of the same pipeline.

  • This pipeline can e.g. be executed in a cyclic job.

Automate Task Log File Creation

A workflow is created that runs the above commands in a cycle. The workflow operates 24/7 and writes task logs to files.

Download: pdwTaskLogsToFiles.workflow.json


Image Added

Explanation:

  • The first job get-history-task-logs is executed at the point in time when the order arrives that starts the workflow.
    • This job determines the last history entry from which to start.
  • The second job write-task-logs-to-files is executed within a JS7 - Cycle Instruction:
    • The above example implements a ticking cycle every 30 minutes. For a 24h period the job will repeat every 30 minutes. 
    • Users can adjust the cycle at their will.

The first job get-history-task-logs looks like this:

Code Block
languagepowershell
titleExample for job get-history-task-logs
linenumberstrue
#!/usr/bin/env pwsh

Import-Module JS7
Connect-JS7 -Url http://root:root@localhost:4446 -Id Controller | Out-Null

$lastHistory = Get-JS7TaskHistory -RelativeDateFrom -30m | Sort-Object -Property startTime

    # serialize and base64 encode the object
	$xmlLastHistory = [management.automation.psserializer]::Serialize( $lastHistory )
	$lastHistoryEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes( $xmlLastHistory ))

    # forward a variable for the object
    "lastHistoryEncoded=$lastHistoryEncoded" | Out-File $env:JS7_RETURN_VALUES -Append

Disconnect-JS7

Explanation:

  • Line 1: The shebang is required to identify PowerShell being the interpreter of the script. The above example is for Unix, for Windows the first line of the job script should be replaced as follows:
    • Code Block
      languagepowershell
      titleExample of shebang for PowerShell with Unix
      linenumberstrue
      #!/usr/bin/env pwsh
    • Code Block
      languagepowershell
      titleExample of shebang for PowerShell with Windows
      linenumberstrue
      @@findstr/v "^@@f.*&" "%~f0"|pwsh.exe -&goto:eof
  • Line 4: The are a number of ways how to specify details for a JS7 connection, see JS7 - How to connect to JOC Cockpit using the PowerShell Module.
    • The host and port are specific for a user's environment.
    • The Controller ID is specified during installation of the Controller and defaults to Controller.
  • Line 9-13: A variable is created that carries the History ID of the latest entry for which task logs should be created. This variable is in fact a PowerShell object that is serialized and base64-encoded for use with the second job in the workflow.

The second job write-task-logs-to-files looks like this:

Code Block
languagepowershell
titleExample for job write-task-logs-to-files
linenumberstrue
#!/usr/bin/env pwsh

Import-Module JS7
Connect-JS7 -Url http://root:root@localhost:4446 -Id Controller | Out-Null

    # bas64 decode and deserialize the object
    $xmlLastHistory = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String( $env:LAST_HISTORY_ENCODED ))
	$lastHistory = [System.Management.Automation.PSSerializer]::Deserialize( $xmlLastHistory )

Get-JS7TaskHistory -DateFrom $lastHistory[0].startTime | Tee-Object -Variable lastHistory | Get-JS7TaskLog | Select-Object @{name='path'; expression={ "/tmp/history/$(Get-Date $_.startTime -f 'yyyyMMdd-hhmmss')-$([io.path]::GetFileNameWithoutExtension($_.job)).task.log"}}, @{name='value'; expression={ $_.log }} | Set-Content

    # serialize and base64 encode the object
	$xmlLastHistory = [management.automation.psserializer]::Serialize( $lastHistory )
	$lastHistoryEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes( $xmlLastHistory ))

    # forward a variable for the object
    "lastHistoryEncoded=$lastHistoryEncoded" | Out-File $env:JS7_RETURN_VALUES -Append

Disconnect-JS7

Explanation:

  • Lines 1, 4: Same explanations as for the previous job.
  • Lines 7,8: The History ID of the last processing of this job is picked up from an environment variable that is assigned the workflow variable previously serialized and base64-encoded.
    • Image Added

  • Line 10: When reading the task history then the variable carrying the History ID is updated and is forwarded to the workflow for next execution of the cycle.