| 
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
 |