Versions Compared

Key

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


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Time+Dependencies
Button Hyperlink
titleUp
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+a+Cron


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

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

(In ecflow_ui, select a suite, then look at the variables tab)

  • 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. This has the same format as repeat date. 
  • MM     month 01-12
  • TIME  HHMM
  • YYYY  year

Here are examples of time attributes and the corresponding trigger examples

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

Triggers can also use AND/OR logic and the full range of operators <,>,<=,>=


Code Block
languagebash
titleTime attributes
task t1
    day monday
    time 13:00



Code Block
languagebash
titletime based trigger
 task t1
    trigger DOW == 1 and TIME >= 1300



Code Block
languagebash
titlecombination
task t1
  day monday
  trigger TIME >= 1300



Warning

It should be noted that relative time( time +00:01) are not possible with time based triggers, and time series are more problematic.


Text


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


Code Block
# 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 TIME == 0002              # 2 minutes past midnight
 endfamily
endsuite


Python

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

Code Block
languagepy
title$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("DOW == 4 and TIME >= 1300")),
            Task("t3", Trigger("DD == 1 and TIME >= 1200")),   
            Task("t4"),                 
            Task("t5", Trigger("TIME == 0002")))                 # 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. Replace the suite
    python:  python3 test.py; python3 client.py
    text:       ecflow_client --suspend=/test  ;  ecflow_client --replace=/test  test.def
  3. ecflow_ui  has a special window to explain why a task is queued. Select a queued task and click on the 'Why tab'
  4. Vary the time triggers so that all task runs


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Time+Dependencies
Button Hyperlink
titleUp
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+a+Cron



Code Block