/[MITgcm]/mitgcm.org/front_content/parse_emails
ViewVC logotype

Contents of /mitgcm.org/front_content/parse_emails

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.22 - (show annotations) (download)
Wed Feb 17 22:25:46 2010 UTC (11 years, 7 months ago) by jmc
Branch: MAIN
Changes since 1.21: +41 -40 lines
change default TEMPDIR and temporary error msg file

1 #! /usr/bin/env bash
2
3 # $Header: /u/gcmpack/mitgcm.org/front_content/parse_emails,v 1.21 2009/12/03 18:03:27 jmc Exp $
4 #
5 # The purpose of this script is to parse the emails produced by the
6 # MITgcm/verificaton/testreport script and store the data in a
7 # reasonable location.
8
9
10 usage()
11 {
12 echo
13 echo "Usage: $0 [OPTIONS]"
14 echo
15 echo "where possible OPTIONS are:"
16 echo " (-h|-help) print usage"
17 echo " (-s|-silent) silent mode"
18 echo " (-v|-verbose) verbose mode"
19 echo " (-i |-ind )DIR get mpack-created emails from DIR"
20 echo " [def=\"$INDIR\"]"
21 echo " (-o |-outd )DIR write the data to DIR"
22 echo " [def=\"$BASEDIR/$monthDir\"]"
23 echo " (-t |-tempd )DIR use temporary directory DIR"
24 echo " [def=\"$TEMPDIR\"]"
25 echo " (-u |-unpack )EXE use executable EXE to unpack e-mails"
26 echo " [def=\"$MUNPACK\"]"
27 echo " (-a |-addr )ADDR send e-mail to ADDR if Error"
28 echo " [def='"$ADDRERR"']"
29 echo
30 exit 1
31 }
32
33 # defaults
34 INDIR="/u/u2/jmc/Mail/MITgcm-test"
35 BASEDIR="/u/u0/httpd/html/testing/results"
36 monthDir=`date +%Y`"_"`date +%m`
37 OUTDIR=
38 TEMPDIR=/tmp/prc_emails
39 ERRMSG=/tmp/tmp.$$
40 MUNPACK=munpack
41 ADDRERR=
42 PRT=1
43
44 # Parse options
45 ac_prev=
46 for ac_option ; do
47
48 # If the previous option needs an argument, assign it.
49 if test -n "$ac_prev"; then
50 eval "$ac_prev=\$ac_option"
51 ac_prev=
52 continue
53 fi
54
55 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
56
57 case $ac_option in
58
59 -help | --help | -h | --h)
60 usage ;;
61 -s | --s | -silent | --silent)
62 PRT=0 ;;
63 -v | --v | -verbose | --verbose)
64 PRT=2 ;;
65
66 -ind | --ind | -i | --i)
67 ac_prev=INDIR ;;
68 --ind=* | -ind=* | --i=* | -i=*)
69 INDIR=$ac_optarg ;;
70
71 -outd | --outd | -o | --o)
72 ac_prev=OUTDIR ;;
73 --outd=* | -outd=* | --o=* | -o=*)
74 OUTDIR=$ac_optarg ;;
75
76 -tempd | --tempd | -t | --t)
77 ac_prev=TEMPDIR ;;
78 --tempd=* | -tempd=* | --t=* | -t=*)
79 TEMPDIR=$ac_optarg ;;
80
81 -u | --u | -unpack | --unpack)
82 ac_prev=MUNPACK ;;
83 -u=* | --u=* | -unpack=* | --unpack=*)
84 MUNPACK=$ac_optarg ;;
85
86 -a | --a | -addr | --addr)
87 ac_prev=ADDRERR ;;
88 -a=* | --a=* | -addr=* | --addr=*)
89 ADDRERR=$ac_optarg ;;
90
91 *)
92 # copy the file list to FL_#
93 date
94 echo "Error: don't understand argument \"$ac_option\""
95 usage
96 ;;
97
98 esac
99
100 done
101
102 if test ! -x $MUNPACK ; then
103 date
104 echo "ERROR: \"$MUNPACK\" is not executable"
105 exit 2
106 fi
107 if test "x$OUTDIR" = x ; then
108 OUTDIR="$BASEDIR/$monthDir"
109 else
110 monthDir=0
111 fi
112 if test ! -e $OUTDIR ; then
113 mkdir $OUTDIR
114 RETVAL=$?
115 if test "x$RETVAL" != x0 ; then
116 date
117 echo "ERROR: directory \"$OUTDIR\" doesn't exist and can't be created"
118 exit 3
119 else
120 echo "Successfully created new dir: \"$OUTDIR\""
121 fi
122 chgrp gcmpack $OUTDIR
123 chmod 775 $OUTDIR
124 fi
125
126 all_files=`ls -1 $INDIR`
127 nb_files=`echo "$all_files" | grep -c '^msg\.'`
128
129 if test $PRT = 1 ; then
130 echo "Using OUTDIR=\"$OUTDIR\""
131 echo "Using INDIR=\"$INDIR\""
132 echo -n "Unpacking the emails ..."
133 elif test $nb_files != 0 ; then
134 echo -n "Unpacking $nb_files emails ("`date`
135 if test "x$ADDRERR" != x ; then
136 echo -n ", err-msg: '$ADDRERR'"
137 fi
138 echo ")"
139 echo " from '$INDIR' to '$OUTDIR'"
140 fi
141
142 for file in $all_files ; do
143
144 #-- create local copy
145 test -e $TEMPDIR && rm -rf $TEMPDIR
146 mkdir $TEMPDIR
147 RETVAL=$?
148 if test "x$RETVAL" = x0 ; then
149 cp $INDIR"/"$file $TEMPDIR
150 RETVAL=$?
151 fi
152 if test "x$RETVAL" != x0 ; then
153 if test "x$ADDRERR" != x ; then
154 echo "parsing email error" > $ERRMSG
155 echo " processing file: '$INDIR/$file'" >> $ERRMSG
156 echo -n "'mkdir $TEMPDIR' or 'cp $INDIR/$file $TEMPDIR'" >> $ERRMSG
157 echo " returns error $RETVAL" >> $ERRMSG
158 mail -s 'parse_emails err_0' $ADDRERR < $ERRMSG
159 rm -f $ERRMSG
160 fi
161 mv -f $INDIR"/"$file $INDIR"/../fail2process/"$file
162 continue
163 fi
164
165 #-- ignore multi-part messages
166 grep "Content-Type: message/partial" $INDIR"/"$file > /dev/null 2>&1
167 RETVAL=$?
168 if test "x$RETVAL" = x0 ; then
169 if test "x$ADDRERR" != x ; then
170 echo "parsing email error" > $ERRMSG
171 echo 'grep "Content-Type: message/partial" returns error:' $RETVAL >> $ERRMSG
172 ls -l $INDIR"/"$file >> $ERRMSG
173 mail -s 'parse_emails err_1' $ADDRERR < $ERRMSG
174 rm -f $ERRMSG
175 fi
176 mv -f $INDIR"/"$file $INDIR"/../fail2process/"$file
177 continue
178 fi
179
180 #-- munpack
181 mun=`( cd $TEMPDIR ; $MUNPACK $file | cut -d ' ' -f 1 | head -1 )`
182 RETVAL=$?
183 if test "x$RETVAL" != x0 ; then
184 if test "x$ADDRERR" != x ; then
185 echo "parsing email error" > $ERRMSG
186 echo "$MUNPACK $file returns error: $RETVAL" >> $ERRMSG
187 ls -l $INDIR"/"$file >> $ERRMSG
188 mail -s 'parse_emails err_2' $ADDRERR < $ERRMSG
189 rm -f $ERRMSG
190 fi
191 mv -f $INDIR"/"$file $INDIR"/../fail2process/"$file
192 continue
193 fi
194
195 #-- un-tar
196 #( cd $TEMPDIR ; tar -xzvf $mun > out )
197 # to remove small files "._mydir" that some MAC OS are adding
198 # (for each file or dir) to a tar-file, use option "--exclude=":
199 ( cd $TEMPDIR ; tar -xzvf $mun --exclude="._*" > out )
200 RETVAL=$?
201 if test "x$RETVAL" != x0 ; then
202 if test "x$ADDRERR" != x ; then
203 echo "parsing email error" > $ERRMSG
204 echo "tar -xzvf $mun returns error:" $RETVAL >> $ERRMSG
205 ls -l $INDIR"/"$file >> $ERRMSG
206 ls -l $mun >> $ERRMSG
207 mail -s 'parse_emails err_3a' $ADDRERR < $ERRMSG
208 rm -f $ERRMSG
209 fi
210 mv -f $INDIR"/"$file $INDIR"/../fail2process/"$file
211 continue
212 fi
213 tdir=`cat $TEMPDIR"/out" | head -1 | sed -e 's|^./||g' | cut -d '/' -f 1`
214 #tdir=`( cd $TEMPDIR ; /bin/ls -l | grep '^d' | head -1 | awk '{print $NF}' )`
215 if test -d $TEMPDIR/$tdir ; then
216 rm -f $TEMPDIR"/out"
217 else
218 if test "x$ADDRERR" != x ; then
219 echo "parsing email error" > $ERRMSG
220 echo " fail to get a dir output name 'tdir=$tdir'" >> $ERRMSG
221 echo " from tar file '$TEMPDIR/$mun'" >> $ERRMSG
222 mail -s 'parse_emails err_3b' $ADDRERR < $ERRMSG
223 rm -f $ERRMSG
224 fi
225 mv -f $INDIR"/"$file $INDIR"/../fail2process/"$file
226 continue
227 fi
228
229 #-- select which Monthly Output Dir:
230 locDir=$OUTDIR
231 if test "x$monthDir" != x0 ; then
232 dd=`echo $tdir | sed 's/_/ /g' | awk '{ for(i=1;i<=NF;i++) print $i }'\
233 | grep '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' | tail -1`
234 mn=`echo $dd | sed 's/..$//' | sed 's/..$/_&/'`
235 if test "x$mn" != "x$monthDir" ; then
236 if test "x$mn" = x ; then
237 if test $PRT = 2 ; then echo " cannot get month from '$tdir'" ; fi
238 else
239 # could comment out this line:
240 #if test $PRT = 2 ; then echo " chg month: '$mn' for '$tdir'" ; fi
241 locDir="$BASEDIR/$mn"
242 if test ! -d $locDir ; then
243 if test $PRT = 2 ; then echo "NO DIR: '$locDir' => '$tdir' POSTPONED" ; fi
244 if test "x$ADDRERR" != x ; then
245 echo "parsing email error" > $ERRMSG
246 echo "no dir '$locDir' for outp. '$tdir'" > $ERRMSG
247 ls -l $INDIR"/"$file >> $ERRMSG
248 mail -s 'parse_emails err_4' $ADDRERR < $ERRMSG
249 rm -f $ERRMSG
250 fi
251 continue
252 fi
253 fi
254 fi
255 fi
256
257 #-- copy to $locDir and rename if necessary
258 sdir=$tdir
259 if test -e $locDir"/"$tdir ; then
260 ad=0
261 while test -e $locDir"/"$tdir"_"$ad ; do
262 ad=$(( $ad + 1 ))
263 done
264 sdir=$tdir"_"$ad
265 fi
266 if test $PRT = 2 ; then
267 if test "x$locDir" = "x$OUTDIR"
268 then echo " '$sdir'"
269 else echo " '$sdir' => '$locDir'"
270 fi
271 fi
272 mv $TEMPDIR"/"$tdir $locDir"/"$sdir > /dev/null 2>&1
273 RETVAL=$?
274 if test "x$RETVAL" != x0 ; then
275 if test "x$ADDRERR" != x ; then
276 echo "parsing email error" > $ERRMSG
277 echo "mv $TEMPDIR/$tdir $locDir/$sdir returns error:" $RETVAL >> $ERRMSG
278 echo -n "in dir: $TEMPDIR : " ; ls -l $TEMPDIR >> $ERRMSG
279 echo -n "in dir: $OUTDIR : " ; ls -l $locDir >> $ERRMSG
280 mail -s 'parse_emails err_5' $ADDRERR < $ERRMSG
281 rm -f $ERRMSG
282 fi
283 mv -f $INDIR"/"$file $INDIR"/../fail2process/"$file
284 continue
285 fi
286 chmod -R a+rx $locDir"/"$sdir > /dev/null 2>&1
287
288 #-- remove the original file
289 rm -f $INDIR"/"$file
290
291 done
292 if test $PRT = 1 ; then echo " done" ; fi

  ViewVC Help
Powered by ViewVC 1.1.22