Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Add+a+complete |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Time+Dependencies |
---|
|
|
|
A
meter is very similar to an
event.
Instead of being a boolean value (on/off), it can take a range of integer values.
Other tasks are then triggered when the
meter reaches a certain value.
Like events,
meter‘s have names and a
task can have several of them.
Ecf Script
We will create new tasks (t5, t6, and t7) that will be triggered
when the
meter in task t1 reaches certain values.
Code Block |
---|
language | bash |
---|
title | $HOME/course/f1/t1.ecf |
---|
|
%include <head.h>
echo "I will now sleep for %SLEEP% seconds"
sleep %SLEEP%
n=1
while [[ $n -le 100 ]] # Loop 100 times
do
sleep 1 # Wait a short time
ecflow_client --meter=progress $n # Notify ecFlow
(( n = $n + 1 ))
done
%include <tail.h> |
Text
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 f1
edit SLEEP 20
task t1
meter progress 1 100 90
task t2
trigger t1 eq complete
event a
event b
task t3
trigger t2:a
task t4
trigger t2 eq complete
complete t2:b
task t5
trigger t1:progress ge 30
task t6
trigger t1:progress ge 60
task t7
trigger t1:progress ge 90
endfamily
endsuite |
Python
Python
#!/usr/bin/env python2.7
Code Block |
---|
language | py |
---|
title | $HOME/course/test.py |
---|
|
importfrom ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter
def create_family_f1():
|
f1= ecflow.) f1.add_variable("SLEEP", 20)
f1.add_task("t1").add_meter Edit(SLEEP=20),
Task("t1", Meter("progress", 1, 100, 90)),
|
t2=f1.add_task("t2")
t2.add_triggereq
t2.add_event
t2.add_event
f1.add_task).add_trigger
t4=f1.add_task)
t4.add_triggereq
t4.add_complete
f1.add_task).add_trigger, Trigger("t1:progress ge 30")),
|
f1.add_task).add_trigger, Trigger("t1:progress ge 60")),
|
f1.add_task).add_trigger, Trigger("t1:progress ge 90")))
|
returnf1
("Creating suite definition" |
defs = ecflow.Defs()
suitedefs.add_suite("test")
suite.add_variable("ECF_INCLUDE", os.path.join(os.getenv("HOME"), |
)
suite.add_variable("ECF_HOME", os.path.join(os.getenv("HOME"), "course"))
suite.add_family(
defs = Defs(
Suite("test",
Edit(ECF_INCLUDE=home,ECF_HOME=home),
create_family_f1()) |
defs ("Checking job creation: .ecf -> .job0" |
(defs.check_job_creation())
print |
"Checking trigger expressions"
print defs.check)
print "Saving definition to file 'test.def'")
defs.save_as_defs("test.def") |
What to do
- Edit the definition file or python to add the modifications.
- Edit t1.ecf to call ecflow_client –meter
- Copy t4.ecf to t5.ecf, t6.ecf and t7.ecf
- Replace the suite
python: python3 test.py ; python3 client.py
text: ecflow_client --suspend=/test ; ecflow_client --replace=/test test.def - Observe the tasks in ecflow_ui
- See the triggers by selecting progress and clicking on the Triggers icon.
- Move the mouse pointer over Image Removed progress icon, then with the right mouse button, choose Edit...
- Modify the value of the meter.
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Add+a+complete |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Time+Dependencies |
---|
|
|
|
...