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 5 Next »

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.
# Definition of the suite test.
suite test
 edit ECF_INCLUDE "$HOME/course"
 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

In python this would be:

#!/usr/bin/env python2.5
import os
import ecflow  

def create_family_f1():
    f1 = ecflow.Family("f1")
    f1.add_variable("SLEEP",20)
    t1 = f1.add_task("t1")
    t1.add_meter("progress",1,100,90)
    t2 = f1.add_task("t2")  
    t2.add_trigger("t1 eq complete") 
    t2.add_event("a")
    t2.add_event("b")
    t3 = f1.add_task("t3")
    t3.add_trigger("t2:a")  
    t4 = f1.add_task("t4")
    t4.add_trigger("t2 eq complete")  
    t4.add_complete("t2:b")  
    t5 = f1.add_task("t5")
    t5.add_trigger("t1:progress ge 30")  
    t6 = f1.add_task("t6")
    t6.add_trigger("t1:progress ge 60")  
    t7 = f1.add_task("t7")
    t7.add_trigger("t1:progress ge 90") 
    return f1 
   
defs = ecflow.Defs("test.def")
suite = defs.add_suite("test")
suite.add_variable("ECF_INCLUDE",os.getenv("HOME") + "/course")
suite.add_variable("ECF_HOME   ",os.getenv("HOME") + "/course")

suite.add_family( create_family_f1() )
To notify ecf_server, the task t1 must call the ecf_client –meter.
This is also one of the child command‘s
%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
   ecf_client --meter progress $n # Notify ecFlow
   (( n = $n + 1 ))
done
%include <tail.h>

What to do:

  1. Edit the definition file or python to add the modifications.
  2. Edit t1.ecf to call ecf_client –meter
  3. Copy t4.ecf to t5.ecf, t6.ecf and t7.ecf
  4. Load the definition again.
  5. Observe the tasks in ecFlowview.
  6. See the triggers by selecting progress and clicking on the Triggers icon.
  7. Move the mouse pointer over progress then with the right mouse button, choose Edit...
  8. Modify the value of the meter and click on the Apply icon apply
  • No labels