| 1 | 1 #!/bin/bash | 
|  | 2 | 
|  | 3 site=$1 | 
|  | 4 n=$2 | 
|  | 5 outdir=$3 | 
|  | 6 logfile=$4 | 
|  | 7 htmlfile=$5 | 
|  | 8 mkdir -p $outdir | 
|  | 9 echo $@ >> /tmp/args.txt | 
|  | 10 | 
|  | 11 swift=`\which swift` | 
|  | 12 | 
|  | 13 # use "here" document for configs | 
|  | 14 cat << EOF > /tmp/hello.swift | 
|  | 15 type file; | 
|  | 16 | 
|  | 17 app (file o) helloapp (string msg) { | 
|  | 18   echo msg stdout=@o; | 
|  | 19 } | 
|  | 20 | 
|  | 21 file out[]<simple_mapper; location="$outdir", prefix="f.",suffix=".txt">; | 
|  | 22 | 
|  | 23 foreach j in [1:@toInt(@arg("n","2"))] { | 
|  | 24  out[j] = helloapp ("Hello World!"); | 
|  | 25 } | 
|  | 26 EOF | 
|  | 27 | 
|  | 28 case "$site" in | 
|  | 29 cluster ) | 
|  | 30 cat << 'EOF' > /tmp/sites.xml | 
|  | 31 <?xml version="1.0" encoding="UTF-8"?> | 
|  | 32 <config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites"> | 
|  | 33   <pool handle="cluster"> | 
|  | 34     <execution provider="coaster" jobmanager="local:pbs"/> | 
|  | 35     <profile namespace="globus" key="queue">default</profile> | 
|  | 36     <profile namespace="globus" key="jobsPerNode">8</profile> | 
|  | 37     <profile namespace="globus" key="maxWalltime">02:00:00</profile> | 
|  | 38     <profile namespace="globus" key="maxTime">7500</profile> | 
|  | 39     <profile namespace="globus" key="highOverAllocation">100</profile> | 
|  | 40     <profile namespace="globus" key="lowOverAllocation">100</profile> | 
|  | 41     <profile namespace="globus" key="slots">1</profile> | 
|  | 42     <profile namespace="globus" key="maxNodes">1</profile> | 
|  | 43     <profile namespace="globus" key="nodeGranularity">1</profile> | 
|  | 44     <profile namespace="karajan" key="jobThrottle">.31</profile> | 
|  | 45     <profile namespace="karajan" key="initialScore">10000</profile> | 
|  | 46     <workdirectory>/tmp/swift.workdir</workdirectory> | 
|  | 47   </pool> | 
|  | 48 </config> | 
|  | 49 EOF | 
|  | 50 | 
|  | 51 cat << 'EOF' > /tmp/tc | 
|  | 52 cluster echo  echo | 
|  | 53 cluster cat   cat | 
|  | 54 EOF | 
|  | 55 | 
|  | 56 cat << 'EOF' > /tmp/cf | 
|  | 57 use.provider.staging=true | 
|  | 58 wrapperlog.always.transfer=true | 
|  | 59 execution.retries=1 | 
|  | 60 provider.staging.pin.swiftfiles=false | 
|  | 61 sitedir.keep=true | 
|  | 62 lazy.errors=false | 
|  | 63 EOF | 
|  | 64 ;; | 
|  | 65 | 
|  | 66 localhost ) | 
|  | 67 cat << 'EOF' > /tmp/sites.xml | 
|  | 68 <?xml version="1.0" encoding="UTF-8"?> | 
|  | 69 <config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites"> | 
|  | 70    <pool handle="localhost"> | 
|  | 71       <execution provider="local" /> | 
|  | 72       <profile namespace="karajan" key="jobThrottle">0.01</profile> | 
|  | 73       <profile namespace="karajan" key="initialScore">10000</profile> | 
|  | 74       <filesystem provider="local"/> | 
|  | 75       <workdirectory>/tmp/swift.work</workdirectory> | 
|  | 76       <profile namespace="swift" key="stagingMethod">local</profile> | 
|  | 77    </pool> | 
|  | 78 </config> | 
|  | 79 EOF | 
|  | 80 | 
|  | 81 cat << 'EOF' > /tmp/tc | 
|  | 82 localhost echo echo | 
|  | 83 localhost cat cat | 
|  | 84 EOF | 
|  | 85 | 
|  | 86 cat << 'EOF' > /tmp/cf | 
|  | 87 use.provider.staging=false | 
|  | 88 wrapperlog.always.transfer=true | 
|  | 89 execution.retries=0 | 
|  | 90 provider.staging.pin.swiftfiles=false | 
|  | 91 sitedir.keep=true | 
|  | 92 lazy.errors=false | 
|  | 93 EOF | 
|  | 94 ;; | 
|  | 95 | 
|  | 96 * ) | 
|  | 97 echo "defaulting to localhost" | 
|  | 98 | 
|  | 99 cat << 'EOF' > /tmp/sites.xml | 
|  | 100 <?xml version="1.0" encoding="UTF-8"?> | 
|  | 101 <config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites"> | 
|  | 102    <pool handle="localhost"> | 
|  | 103       <execution provider="local" /> | 
|  | 104       <profile namespace="karajan" key="jobThrottle">0.01</profile> | 
|  | 105       <profile namespace="karajan" key="initialScore">10000</profile> | 
|  | 106       <filesystem provider="local"/> | 
|  | 107       <workdirectory>/tmp/swift.work</workdirectory> | 
|  | 108       <profile namespace="swift" key="stagingMethod">local</profile> | 
|  | 109    </pool> | 
|  | 110 </config> | 
|  | 111 EOF | 
|  | 112 | 
|  | 113 cat << 'EOF' > /tmp/tc | 
|  | 114 localhost echo echo | 
|  | 115 localhost cat cat | 
|  | 116 EOF | 
|  | 117 | 
|  | 118 cat << 'EOF' > /tmp/cf | 
|  | 119 use.provider.staging=false | 
|  | 120 wrapperlog.always.transfer=true | 
|  | 121 execution.retries=0 | 
|  | 122 provider.staging.pin.swiftfiles=false | 
|  | 123 sitedir.keep=true | 
|  | 124 lazy.errors=false | 
|  | 125 EOF | 
|  | 126 ;; | 
|  | 127 esac | 
|  | 128 | 
|  | 129 $swift -sites.file /tmp/sites.xml -tc.file /tmp/tc -config /tmp/cf /tmp/hello.swift -n=$n -data=$data 2> std.err | 
|  | 130 EXITCODE=$? | 
|  | 131 | 
|  | 132 swiftlog=`\ls -t *.log | head -1` | 
|  | 133 | 
|  | 134 cat << 'EOF' > /tmp/plotswiftlogs | 
|  | 135 #!/bin/bash | 
|  | 136 | 
|  | 137 #usage: ./extract4plots <swift.logfile> | 
|  | 138 | 
|  | 139 SWIFTLOGFILE=$1 | 
|  | 140 #TMPDIR=`mktemp -d plotlog.XXX` | 
|  | 141 grep -i ProgressTicker $SWIFTLOGFILE > swiftoutfile.out | 
|  | 142 SWIFTOUTFILE=swiftoutfile.out | 
|  | 143 #extract start time | 
|  | 144 TMPDATE=`grep -i progress $SWIFTOUTFILE 2>/dev/null | head -n 1 | cut -f1-2 -d ' '` | 
|  | 145 START_TIME=`date +%s -d "$TMPDATE"` | 
|  | 146 | 
|  | 147 #extract end time | 
|  | 148 TMPDATE=`grep -i progress $SWIFTOUTFILE 2>/dev/null | tail -n 1 | cut -f1-2 -d ' '` | 
|  | 149 END_TIME=`date +%s -d "$TMPDATE"` | 
|  | 150 | 
|  | 151 #duration | 
|  | 152 DIFFTIME=$((END_TIME - START_TIME)) | 
|  | 153 #echo 0 > active.txt | 
|  | 154 #echo 0 > cumulative.txt | 
|  | 155 #extract active runs in a file | 
|  | 156 (grep -o -i "Active:[0-9]*" $SWIFTOUTFILE 2>/dev/null | awk -F: '{print $2}' > active.txt) | 
|  | 157 | 
|  | 158 #extract successful completions in a file | 
|  | 159 (grep -o -i "Successfully:[0-9]*" $SWIFTOUTFILE 2>/dev/null | awk -F: '{print $2}' > cumulative.txt) | 
|  | 160 | 
|  | 161 #prepare tics | 
|  | 162 activelines=`wc -l active.txt | awk '{print $1}'` | 
|  | 163 cumulines=`wc -l cumulative.txt | awk '{print $1}'` | 
|  | 164 | 
|  | 165 if [ $activelines -ne 0 ] | 
|  | 166 then | 
|  | 167   activelinespertic=`echo "scale=5 ; $DIFFTIME / $activelines" | bc` | 
|  | 168 fi | 
|  | 169 seq 0 $activelinespertic $DIFFTIME > activetics.txt | 
|  | 170 | 
|  | 171 if [ $cumulines -ne 0 ] | 
|  | 172 then | 
|  | 173     cumulinespertic=`echo "scale=5 ; $DIFFTIME / $cumulines" | bc` | 
|  | 174 fi | 
|  | 175 | 
|  | 176 seq 0 $cumulinespertic $DIFFTIME > cumultics.txt | 
|  | 177 | 
|  | 178 #final plot data | 
|  | 179 paste activetics.txt active.txt > plot_active.txt | 
|  | 180 paste cumultics.txt cumulative.txt > plot_cumulative.txt | 
|  | 181 | 
|  | 182 cat << EOF1 > plotit.gp | 
|  | 183 set terminal png enhanced | 
|  | 184 set output "activeplot.png" | 
|  | 185 set nokey | 
|  | 186 set xlabel "Time in sec" | 
|  | 187 set ylabel "number of active jobs" | 
|  | 188 set title "Active jobs" | 
|  | 189 plot "plot_active.txt" using 1:2 with line | 
|  | 190 | 
|  | 191 set output "cumulativeplot.png" | 
|  | 192 set ylabel "number of completed jobs" | 
|  | 193 set title "Cumulative jobs" | 
|  | 194 plot "plot_cumulative.txt" using 1:2 with lines | 
|  | 195 EOF1 | 
|  | 196 | 
|  | 197 gnuplot plotit.gp 2>/dev/null | 
|  | 198 | 
|  | 199 #cp *.png ../ | 
|  | 200 echo `pwd`>/tmp/curdir | 
|  | 201 echo `ls`>/tmp/dirlist | 
|  | 202 #cd .. | 
|  | 203 EOF | 
|  | 204 | 
|  | 205 cat << EOF > $htmlfile | 
|  | 206 <!DOCTYPE HTML> | 
|  | 207 | 
|  | 208 <html xmlns="http://www.w3.org/1999/xhtml"> | 
|  | 209 <head> | 
|  | 210   <title>Hello output</title> | 
|  | 211 </head> | 
|  | 212 <body> | 
|  | 213 <h2>Browse output of hello application</h2> | 
|  | 214 `for i in \`find $outdir -type f\`; do echo "<a href=\`basename $i\`>Output: \`basename $i\`</a><br/>"; done` | 
|  | 215 </body> | 
|  | 216 </html> | 
|  | 217 EOF | 
|  | 218 | 
|  | 219 if [ "$EXITCODE" -ne "0" ]; then | 
|  | 220        cat std.err >&2 | 
|  | 221 fi | 
|  | 222 cp std.err $logfile | 
|  | 223 rm std.err | 
|  | 224 exit $EXITCODE |