|
In this exercise, we will use one of the command-line features of ecflow.
We will use query command, to determine the state of a node, event, meter. An alternative to the query command would be to use the python API.
The general format is:
ecflow_client --query arg1 arg2 arg3 |
Where:
Here are some examples using the query command:
value=$(ecflow_client --query repeat /path/to/node ) # return the current value as a string
value=$(ecflow_client --query repeat /path/to/node prev ) # return the previous value as a string, does not modify real repeat
value=$(ecflow_client --query repeat /path/to/node next) # return the next value as a string, does not modify real repeat
limit_value=$(ecflow_client --query limit /path/to/task/with/limit:limit_name) # returns the current value of the limit
limit_max=$(ecflow_client --query limit_max /path/to/task/with/limit:limit_name) # returns the max value of the limit
We will create new query task
%include <head.h> meter=$(ecflow_client --query meter /test/f1/t1:progress) while [[ $meter -lt 100 ]] do sleep 2 meter=$(ecflow_client --query meter /test/f1/t1:progress) eventa=$(ecflow_client --query event /test/f1/t2:a) eventb=$(ecflow_client --query event /test/f1/t2:b) t5_state=$(ecflow_client --query state /test/f1/t5) ecflow_client --label=query "meter($meter) eventa($eventa) eventb($eventb) t5_state($t5_state)" done %include <tail.h> |
# 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 task query label query "" endfamily endsuite |
import os from ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter def create_family_f1(): return Family("f1", Edit(SLEEP=20), Task("t1", Meter("progress", 1, 100, 90)), Task("t2", Trigger("t1 == complete"), Event("a"), Event("b")), Task("t3", Trigger("t2:a")), Task("t4", Trigger("t2 == 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")), Task("query",Label("query",""))) print("Creating suite definition") home = os.path.join(os.getenv("HOME"), "course") defs = Defs( Suite("test", Edit(ECF_INCLUDE=home,ECF_HOME=home), create_family_f1())) print(defs) print("Checking job creation: .ecf -> .job0") print(defs.check_job_creation()) print("Saving definition to file 'test.def'") defs.save_as_defs("test.def") |
Modify query.ecf, to use ecflow_client --query variable, and show this variable in the query label.
Although a variable is accessible in the script by using %VAR%, ecflow_client --query variable might be more useful in an interactive shell or a different server |
|