...
- The File Size Monitor can be configured from job or order parameters.
The following parameters are used:
Parameter Required Default Description monitor_file_change_location
yes The full path of a file that should be monitored. monitor_file_change_timeout
yes The max. duration in seconds that repeated checks for steady file size are performed. monitor_file_change_interval
no 1 Specifies the number of seconds that the monitor sleeps between repeated checks of the file size. monitor_file_change_exit_code
no Optionally sets the exit code of the current job to the specified value if the monitored files is not being found steady. This works for shell jobs exclusively. monitor_file_change_error_state
no Optionally sets the order to the specified state if the monitored file is not being found steady
Explanations
s
Code Block language js title Monitor implementation linenumbers true collapse true function spooler_process_before() { var rc = true; // merge parameters from task and order var params = spooler_task.params; params.merge( spooler_task.order.params ); // required parameters var monitorLocation = params.value( 'monitor_file_change_location' ); var monitorTimeout = params.value( 'monitor_file_change_timeout' ); // optional parameters var monitorInterval = params.value( 'monitor_file_change_interval' ); var monitorExitCode = params.value( 'monitor_file_change_exit_code' ); var monitorErrorState = params.value( 'monitor_file_change_error_state' ); if ( !monitorLocation ) { spooler_log.error( '.. parameter missing: monitor_file_change_location' ); return false; } if ( !monitorTimeout ) { spooler_log.error( '.. parameter missing: monitor_file_change_timeout' ); return false; } else { monitorTimeout = parseInt( monitorTimeout ); } if ( !monitorInterval ) { monitorInterval = 1; } else { monitorInterval = parseInt( monitorInterval ); } if ( !monitorExitCode ) { monitorExitCode = 1; } else { monitorExitCode = parseInt( monitorExitCode ); } // let's use a Java package for file operations var monitorFile = new java.io.File( monitorLocation ); if ( !monitorFile.isFile() ) { spooler_log.error( 'file does not exist: ' + monitorLocation ); return false; } else { spooler_log.info( '.. monitoring file for max. ' + monitorTimeout + ' seconds: ' + monitorLocation ); } var currentDuration = 0; var fileSize = 0; var lastFileSize = 0; do { lastFileSize = monitorFile.length(); spooler_log.info( '.. current file size: ' + lastFileSize + ' bytes' ); java.lang.Thread.sleep( monitorInterval * 1000 ); fileSize = monitorFile.length(); currentDuration = currentDuration + monitorInterval; } while ( (fileSize != lastFileSize) && (currentDuration < monitorTimeout) ) if ( fileSize === lastFileSize ) { spooler_log.info( '.. file size is steady after ' + currentDuration + ' seconds (' + fileSize + ' bytes): ' + monitorLocation ); } else { spooler_log.info( '.. giving up as file size is not steady after ' + currentDuration + ' seconds (' + fileSize + ' bytes): ' + monitorLocation ); rc = false; if ( monitorExitCode ) { spooler_log.info( '.. setting task exit code: ' + monitorExitCode ); spooler_task.exit_code = monitorExitCode; } if ( monitorErrorState ) { spooler_log.info( '.. moving order to error state: ' + monitorErrorState ); spooler_task.order.state = monitorErrorState; } } return rc; }
- xxx