Versions Compared

Key

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

Standalone client

In this example we want to monitor a particular task.
If this task is aborted for any reason, we ask the
server for the job output. This could be mailed to the user.
import ecflow
import time
import sys 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 len(defs) is== None0 : sys.exit(0) # return server has no suites # find the task we are interested in critical_task = defs.find_abs_node(path_to_task) if critical_task is None: # No such task sys.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) sys.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)

...