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/Add+a+complete
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/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.
To notify ecflow_server, the task ( t1 in the example below) must call
the ecflow_client –meter. This is also one of the child command‘s.


Code Block
languagebash
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

#!/usr/bin/env python2.7

Code Block
languagepy
title$HOME/course/test.py
import os
import
from ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter

def create_family_f1():
    
f1 =
return 
ecflow.
Family("f1"
)
,
       
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_trigger
Task("t2", Trigger("t1 
eq
== complete")
t2.add_event
, Event("a")
t2.add_event
, Event("b")),
            
    
f1.add_task
Task("t3"
).add_trigger
, Trigger("t2:a")),
      
    
    
t4
 
=
 
f1.add_task
Task("t4"
) t4.add_trigger
, Trigger("t2 
eq
== complete")
t4.add_complete
, Complete("t2:b"))
,
            
    
f1.add_task
Task("t5"
).add_trigger
, Trigger("t1:progress ge 30")),
           
     
f1.add_task
Task("t6"
).add_trigger
, Trigger("t1:progress ge 60")),
    
            
f1.add_task
Task("t7"
).add_trigger
, Trigger("t1:progress ge 90")))  
   
return
 
f1
 
   
print
("Creating suite definition"
)  
defs
home = 
ecflow.Defs() suite = defs.add_suite("test") suite.add_variable("ECF_INCLUDE",
os.path.join(os.getenv("HOME")
+
, "
/
course")
suite.add_variable("ECF_HOME", os.getenv("HOME") + "/course") suite.add_family(

defs = Defs( 
        Suite("test",
            Edit(ECF_INCLUDE=home,ECF_HOME=home),
            create_family_f1()
))
print(defs) 
defs


print
("Checking job creation: .ecf -> .job0"
)  
print
(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

:

  1. Edit the definition file or python to add the modifications.
  2. Edit t1.ecf to call ecflow_client –meter
  3. Copy t4.ecf to t5.ecf, t6.ecf and t7.ecf
  4. Replace the suite
    python: python3 test.py ; python3 client.py
    text:      ecflow_client --suspend=/test   ; ecflow_client --replace=/test  test.def
  5. Observe the tasks in ecflowview.in ecflow_ui
  6. See the triggers by selecting progress and clicking on the Triggers icon.
  7. Move the mouse pointer over progressImage Removed progress icon, then with the right mouse button, choose Edit...
  8. Modify the value of the meter and click on the Apply icon applyImage Removed

 

...

  1. .
       
Horizontal Navigation Bar


Button Group

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