...
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Time+Dependencies |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Add+a+Cron |
---|
|
|
|
In this section we show an 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 day of the month
- DOW day of the week, 0-6, where 0 is sundaySunday
- 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 HHMM
- YYYY year
These time-based variables on the suite, use the suites calendar. The suites calendar can be configured with the clock attribute.
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 |
The ':' means a search for the variable up the node tree.
Triggers can also use AND/OR logic . and the full range of operators <,>,<=,>=
Code Block |
---|
language | bash |
---|
title | Time attributes |
---|
| task t1
day monday
time 13:00 |
|
Code Block |
---|
language | bash |
---|
title | time based trigger |
---|
| task t1
trigger :DOW == 1 and :TIME >= 1300 |
|
Code Block |
---|
language | bash |
---|
title | combination |
---|
| task t1
day monday
trigger :TIME >= 1300 |
|
---|
Warning |
---|
It should be noted that relative time are 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
trigger :ECF_DATE ==20200720 and :TIME >= 1000
task t2
trigger :DOW == 4 and :TIME >= 1300
task t3
trigger :DD == 1 and :TIME >= 1200
task t4
trigger (:DOW == 1 and :TIME >= 1300) or (:DOW == 5 and :TIME >= 1000)
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 |
---|
language | py |
---|
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", Trigger(":ECF_DATE ==20200720 and :TIME >= 1000")),
Task("t2", Trigger(":DOW == 4 and :TIME >= 1300")),
Task("t3", Trigger(":DD == 1 and :TIME >= 1200")),
Task("t4", Trigger("(:DOW == 1 and :TIME >= 1300) or (:DOW == 5 and :TIME >= 1000)")),
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
- Make the changes to the suite definition file
- Replace the suite
python: python3 test.py; python3 client.py
text: ecflow_client --suspend=/test ; ecflow_client --replace=/test test.def - ecflow_ui has a special window to explain why a task is queued. Select a queued task and click on the 'Why tab'
- Vary the time triggers so that all task runs
...
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Time+Dependencies |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Add+a+Cron |
---|
|
|
|