Versions Compared

Key

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

...

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

...

  • Reads the logs of tasks that completed within the last 8 hours and writes the log output to individual files in the /tmp directory.

  • The log file names are created from the start time and from the job name of each task.

...

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

...

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

    # serializeforward anda base64variable encodefor 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"lastHistory=json:$($lastHistory | ConvertTo-Json -Compress)" | Out-File $env:JS7_RETURN_VALUES -Append

Disconnect-JS7

...

  • 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 workflow variable is created that carries the History ID of the latest entry list of task log objects returned by the Get-JS7TaskHistory cmdlet for which task logs should be created. This variable is in fact a PowerShell object that is serialized and base64-encoded for to JSON and prefixed with the string json: for later use with the second job in the workflow.

...

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

    # restore object bas64from decodejson andby deserializea thetemporary objectfile
    $xmlLastHistory$lastHistory = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(( (Get-Content $env:LAST_HISTORY_ENCODED ))
	$lastHistory = [System.Management.Automation.PSSerializer]::Deserialize( $xmlLastHistoryFILE).Substring(5) | ConvertFrom-Json )

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

    # serializeforward anda base64variable encodefor 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""lastHistory=json:$($lastHistory | ConvertTo-Json -Compress)" | Out-File $env:JS7_RETURN_VALUES -Append

Disconnect-JS7

...

  • Lines 1, 4: Same explanations as for the previous job.
  • Lines 7,8: The History ID : The variable holding the list of task log objects of the last processing of this job is picked up restored from a temporary file that holds the JSON representation of the objects. The temporary files is provided by the JS7 Agent and is referenced from an environment variable that is assigned the workflow variable previously serialized and base64-encodedlike this.


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

...