In this example we want to monitor a particular task.
server for the job output. This could be mailed to the user.
#...
!/usr/bin/env python2....
7
...
import ecflow
import time
def monitor_critical_task(ci, path_to_task):
...
# Query the server for any ...
changes
...
if ci.news_local():
...
# get the incremental changes, and merge with defs stored on the Client ...
...
ci.sync_local()
...
# check to see if definition exists in the ...
server
...
defs ...
=...
ci.get_defs()
...
if defs == None :
...
exit(0) # return
...
# find the task we are interested in...
...
...
critical_task = defs.find_abs_node(path_to_task)
...
if critical_task == None:
...
# No such ...
task
...
exit(0) # return
...
# Check to see if task was aborted, if it was email me the job ...
output
...
if critical_task.get_state() == ecflow.State.aborted:
...
# Get the job ...
output
...
the_aborted_task_...
output = ci.get_file(path_to_task,'jobout')
...
# email(the_aborted_task_output)...
...
exit(0)
...
try:
...
# Create the client. This will read the default environment ...
variables
...
ci ...
=...
ecflow.Client("localhost", "4143")
...
# Continually monitor the ...
suite
...
while 1:
...
monitor_critical_...
task(ci, "/suite/critical_node...
"...
)...
...
# Sleep for 5 minutes. ...
...
# To avoid overloading server ensure sleep is ...
> 60 seconds ...
...
time.sleep(300)
...
except RuntimeError, e:
...
print str(e)