ecFlow's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

This page contains macros or features from a plugin which requires a valid license.

You will need to contact your administrator.

Previous Up Next

In the section we show alternative to time based attributes using time triggers.

The following suite based generated variables are available for time based triggers.

  • DD  day of the month
  • DOW   day of the week, 0-6, where 0 is sunday
  • DOY    day of the year
  • ECF_DATE  YYYYMMDD , year, month, day format
  • MM     month 01-12
  • TIME  HHMM
  • YYYY  year

Here are examples of time attributes and the corresponding trigger examples

time 23:00                  # trigger TIME 2300
date 1.*.*                  # trigger DD ==1
day monday                  # trigger DOW ==1

Triggers can also use AND/OR logic. 

task t1
    day monday
    time 13:00
 task t1
    trigger DOW == 1 and TIME >= 1300

Text


Let us modify the previous definition file for family f2.
For brevity we have omitted the previous family f1


# Definition of the suite test
suite test
 edit ECF_INCLUDE "$HOME/course"  # replace '$HOME' with the path to your home directory
 edit ECF_HOME    "$HOME/course"

 family f2
     edit SLEEP 20
     task t1
     task t2
         trigger DOW ==  4 and TIME >= 1300  
     task t3
         trigger DD == 1 and TIME >= 1200
     task t4
     task t5
         trigger 0002              # 2 minutes past midnight
 endfamily
endsuite

Python

For brevity we have left out family f1. In python this would be:

$HOME/course/test.py
import os
from ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter,Time,Day,Date,Edit

def create_family_f2():
    return Family("f2",
            Edit(SLEEP=20),
            Task("t1"),     
            Task("t2", Trigger),
            Task("t3", Date("1.*.*"), Time("12:00")),  # Date(day,month,year) - * means every day,month,year
            Task("t4", Time("+00:02")),                # + means realative to suite begin/requeue time
            Task("t5", Time("00:02")))                 # 2 minutes past midnight
 
print("Creating suite definition")  
home = os.path.join(os.getenv("HOME"), "course")
defs = Defs( 
        Suite("test",
            Edit(ECF_INCLUDE=home,ECF_HOME=home),
            create_family_f2()
            ))
print(defs) 

print("Checking job creation: .ecf -> .job0")  
print(defs.check_job_creation())

print("Checking trigger expressions")
errors = defs.check()
assert len(errors) == 0,errors

print("Saving definition to file 'test.def'")
defs.save_as_defs("test.def")

What to do

  1. Make the changes to the suite definition file
  2. Create all the necessary ecf script‘s by copying the one from /test/f1/t7
  3. Replace the suite
    python:  python3 test.py; python3 client.py
    text:       ecflow_client --suspend=/test  ;  ecflow_client --replace=/test  test.def
  4. ecflow_ui  has a special window to explain why a task is queued. Select a queued task and click on the 'Why tab'
  5. Vary the time attributes so that all task runs


  • No labels