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 3 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