suite definition and replace
#!/usr/bin/env python import sys, os; path = "/home/ma/emos/def/o/def"; sys.path.append(path) import ecf; from ecf import ( Autocancel, Client, Clock, Complete, Cron, Date, Day, Defs, Defstatus, Edit, Event, Extern, Family, Inlimit, Label, Late, Limit, Meter, Node, Repeat, Suite, Task, Time, Today, Trigger) HOME = os.environ['HOME'] + '/course' SUITE = os.getenv("SUITE", "test") NODE = '/' + SUITE # WRONG? no repeat, dates/time would not allow looping def create(): return Suite(SUITE).add( Defstatus("suspended"), Limit("total", 2), Inlimit("total"), # !!! Edit(ECF_INCLUDE=HOME, # header files ECF_FILES=HOME, # task wrappers .ecf ECF_HOME=HOME, # job + local output files ), Family("f1").add( Task("t1").add( Meter("step", -1, 100)), Task("t2").add( Meter("step", -1, 100), Event("a"), Event("b"), Trigger("t1:step gt 0")), Task("t3").add( Trigger("t2:a")), Task("t4").add( Complete("t2:b"), Trigger("t2 eq complete and not t2:b"))), Family("f2").add( Task("t1").add( Time("00:30 23:30 00:30")), Task("t2").add( Day("sunday")), Task("t3").add( Time("12:00"), Date("1.*.*")), Task("t4").add( Time("+00:02")), Task("t5").add( Time("00:02")))) if __name__ == "__main__": client = Client(os.getenv('ECF_HOST', 'localhost'), os.getenv('ECF_PORT', '31415')); defs=Defs() suite=create() if 0: import limit, limit2, fif, ffor, case; suite.add( limit.family_limit(), limit2.family_limit(), fif.family_if(), ffor.family_for(), case.family_case()) defs.add_suite(suite) client.replace(NODE, defs)
suite-env.sh
#!/bin/bash # aka $HOME/.ecflowrc/ecflowrc export ECF_PORT=$(($(id -u)+1500)) ECF_HOST=$(uname -n) client="ecflow_client --port=$ECF_PORT --host=$ECF_HOST" alias replace="$client --replace" alias load="$client --load" commands="autocancel clock complete cron date day defstatus edit event family inlimit label late limit meter repeat suite task today trigger endfamily endsuite endtask extern " # keywords exec 3> ${SUITE:=test}.exp # expended def-file will be created for fname in $commands; do source /dev/stdin <<@@ $fname() { echo $fname \${*} >&3; } @@ done alias time="echo time \${*} >&3"
suite example
#!/bin/bash . suite-env.sh; ECF_HOME=$HOME/course extern /limits:hpc # suite limits; limit hpc 100; endsuite suite ${SUITE:=test} edit ECF_INCLUDE $ECF_HOME; edit ECF_FILES $ECF_HOME; # r-x edit ECF_HOME $ECF_HOME # rwx defstatus suspended; limit lim 2; inlimit lim; edit SLEEP 20 . for.def; . if.def ; . case.def ; . trigger.def # external def family f1 task t1; meter step -1 100; # endtask # optional task t2; trigger t1:step gt 0; meter step -1 100; event a; event b task t3; trigger t2:a task t4; complete t2:b; trigger "t2 eq complete and not t2:b" endfamily; family f2 for i in $(seq 1 5); do task t$i; case $i in 1)time 00:30 23:30 00:30;; 2)day sunday;; 3)time 12:00; date 1.*.*;; 4)time +00:02;; 5)time 00:02;; esac; done # endfamily # f2 # endsuite # SUITE # not necessary at the end!