File: ecflow_suite_gen.sh

package info (click to toggle)
ecflow 5.15.2-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 51,872 kB
  • sloc: cpp: 269,341; python: 22,756; sh: 3,609; perl: 770; xml: 333; f90: 204; ansic: 141; makefile: 63
file content (159 lines) | stat: -rwxr-xr-x 3,307 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/bin/bash
exec 3> /dev/stdout
commands="   autocancel   
clock        complete     cron         date         day          defstatus    
edit         endfamily    endsuite     endtask      event        extern       
family       inlimit      label        late         limit        meter        
repeat       suite        task              time    today        trigger      "

# enable -n time || : # shell builtin removed
for fname in $commands; do
source /dev/stdin <<EOF
function $fname()
{
  echo $fname "\${*}" >&3
}
EOF
done

alias time="echo time \"\${*}\" >&3"
init="ECF_NAME=%ECF_NAME% ECF_PASS=%ECF_PASS% ecflow_client --init;"
complete="ECF_NAME=%ECF_NAME% ECF_PASS=%ECF_PASS% ecflow_client --complete;"

ensemble() {
num=0
tot=10
family ensemble
limit  lim 5
inlimit ensemble:lim
while (( num <= tot)); do 
  family $(printf "%02d" $num)
    task model; edit MEMBER $num; (( num += 1))
  endfamily
done
endfamily

family process
  for param in "z" "u" "v" "t" "q"; do 
    task $param; edit PARAM $param; 
  done
endfamily # process

family seq
  for num in $(seq 1 9); do
    family $(printf "%02d" $num)
      task model; edit MEMBER $num; (( num += 1))
    endfamily  
  done
endfamily
}

producer() {
    family producer
      repeat date YMD 20160101 20321212
      family produce
        edit PRODUCE 1
        edit CONSUME 0
        task generic
	  event p
	  event c
	  meter step -1 100 90
      endfamily # produce

      family consume
        edit PRODUCE 0
        complete produce:CONSUME eq 1
        trigger produce/generic:p or produce==complete
	task generic
      endfamily # consume

      family consume2
        repeat integer STEP 0 100
        edit PRODUCE 0
        complete produce:CONSUME eq 1
        trigger produce/generic:step gt consume2:STEP or produce==complete
	task generic
      endfamily # consume2
    endfamily # producer
}

test_suite() {
extern /limits:tasks

suite $SUITE_NAME
  defstatus suspended
  autocancel +10
  clock real

  family limits
    limit tasks 10
     defstatus complete
  endfamily
  inlimit /limits:tasks

  producer # function defined upper

  ensemble

  task cron
    cron 00:00 23:59 01:00
    late -s 00:05 -c 00:10

  task day
    day monday
  
  family fam
    time 12:00
    date "1.*.*"
    task t1
      event 1
      meter step -1 100 90
      label info nop
}

usage() {
echo <<EOF
$0 -p <ECF_PORT> -n <ECF_HOST> -s <suite_name> -r <path>
   -l: load
   -r: replace path
   -t: test suite generated
EOF
}

LOAD=0
REPL=0

while getopts dln:p:r:s:t option
do
case $option in
    d) DEBUG=1; set -eux;;
    l) LOAD=1;;
    n) ECF_HOST=$OPTARG;; # NODE HOST
    p) ECF_PORT=$OPTARG;; # PORT
    r) REPL=$OPTARG;;
    s) SUITE_NAME=$OPTARG;;
    t) TEST=1;;
    ?|*) usage; exit 2 ;;
esac
done

sdef=${SUITE_NAME:=test}.exp
exec 3> $sdef
if [[ $TEST == 1 ]]; then
 test_suite
else
  echo "#ERR: insert your suite definition HERE $0 $LINENO"
  exit 2
fi

CLIENT="ecflow_client --port ${ECF_PORT:=31415} --host ${ECF_HOST:=localhost}"
if [[ $REPL != 0 ]]; then
  $CLIENT --replace $REPL $sdef
  echo "#MSG: node $REPL was replaced as defined in $sdef" \
       " on ${ECF_HOST:=localhost} ${ECF_PORT:=31415}"
elif [[ $LOAD != 0 ]]; then
  $CLIENT --load $sdef
else
  cat $sdef
  echo "#MSG: suite was created in file $sdef"
fi