Adding a meter

A meter is very similar to an event, but instead of a boolean value (true/false) it can take a range of integer values. Other tasks can be triggered when the meter reaches a certain value. Like an event, a meter has a name and a task can have several of them.

Update Task Script

Create new tasks t5, t6 and t7 that will be triggered when the meter in task t1 reaches certain values.

To notify ecflow_server, update the task t1 to use the ecflow_client with the --meter option (this is one of the child commands).

Listing 34 $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>

Update Suite Definition

Update the suite definition to add the meter to task t1 and the new tasks t5, t6 and t7.

# Definition of the suite test.
suite test
 edit ECF_INCLUDE "{{HOME}}/course" # replace '{{HOME}}' appropriately
 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

What to do:

  1. Create the new task scripts, as described above.

  2. Modify the task script t1.ecf to use the --meter option, as shown above.

  3. Modify the suite definition, as shown above.

  4. Replace the suite, using:

    ecflow_client --suspend /test
    ecflow_client --replace /test test.def
    
  5. Observe the tasks in ecflow_ui.

  6. Inspect the meter as it changes.

  7. Inspect the triggers by selecting progress and clicking on the Triggers icon.

  8. Modify the value of the meter using the context menu in the progress icon.