source: trunk/mailtouser.sh

Last change on this file was 353, checked in by pinsard, 10 years ago

fix thanks to coding rules; typo

  • Property svn:keywords set to Id
File size: 9.4 KB
RevLine 
[2]1#! /bin/sh
[75]2#+
[80]3#
[177]4# .. _mailtouser.sh:
5#
[109]6# .. program:: mailtouser.sh
[103]7#
[95]8# =============
9# mailtouser.sh
10# =============
[2]11#
[93]12# SYNOPSIS
[75]13# ========
[2]14#
[325]15# .. code-block:: sh
[75]16#
[325]17#    mailtouser.sh -m mailbodyfile -x xmloutput
[75]18#
19# DESCRIPTION
20# ===========
21#
[108]22# .. option:: -m <mailbodyfile>
23# .. option:: -x <xmloutput>
[75]24#
[108]25# convert email text in xml form following :file:`user.dtd`
26#
[80]27# SEE ALSO
28# ========
[2]29#
[103]30# :ref:`bibopa.sh`
[80]31#
[75]32# EXAMPLES
33# ========
34#
[352]35# .. code-block:: sh
[75]36#
[325]37#    mailtouser.sh -m data/mail2007-05-10T09:01:56Z -x ginette.xml
[75]38#
[95]39# TODO
40# ====
[75]41#
[2]42# ++ gestion des comments
[75]43#
[2]44# ++ gestion de la signature
[75]45#
[95]46# EVOLUTIONS
47# ==========
48#
[4]49# $Id$
[2]50#
[75]51# - fplod 2008-09-16T15:42:41Z aedon.locean-ipsl.upmc.fr (Darwin)
52#
[353]53#  * comments in reStructuredText
[75]54#
55# - fplod 2007-06-06T09:27:55Z aedon.locean-ipsl.upmc.fr (Darwin)
56#
57#  * correction for Off-Line and PC Cluster
58#
59# - fplod 2007-05-18T08:31:48Z aedon.locean-ipsl.upmc.fr (Darwin)
60#
61#  * add off-line and agrif components
62#
63# - fplod 2007-05-09T15:03:15Z aedon.locean-ipsl.upmc.fr (Darwin)
64#
65#  * reprise + ajout middlename + ajout components_date
66#
67# - fplod 2007-04-25T09:15:38Z aedon.locean-ipsl.upmc.fr (Darwin)
68#
69#  * creation
70#
71#-
72system=$(uname)
73case "${system}" in
[352]74    AIX|IRIX64)
75        echo " www : no specific posix checking"
76    ;;
77    *)
78        set -o posix
79    ;;
[75]80esac
[100]81unset system
82#
[116]83set -u
84#
[80]85command=$(basename ${0})
[93]86log_date=$(date -u +"%Y%m%dT%H%M%SZ")
87log=/tmp/$(basename ${command} .sh).log.${log_date}
[2]88#
89usage=" Usage : ${command} -m mailbodyfile -x xmloutput"
90#
91# test if xmllint is available
[80]92tool=xmllint
93type ${tool} 1> /dev/null 2>&1
[2]94status=${?}
95if [ ${status} -ne 0 ]
96then
[352]97    echo " eee : ${tool} not found"
98    exit 1
[2]99fi
[80]100unset tool
101unset status
[2]102#
[31]103# check for user.dtd
104if [ ! -f user.dtd ]
[2]105then
[352]106    echo "eee : user.dtd not found"
107    exit 1
[2]108fi
109#
[116]110while [ ${#} -gt 0 ]
[2]111do
[352]112    case ${1} in
113        -m)
114            mailbodyfile=${2}
115            shift
116        ;;
117        -x)
118            xmloutput=${2}
119            shift
120        ;;
121        *)
122            # other choice
123            echo "eee : unknown option ${1}"
124            echo "${usage}"
125            exit 1
126        ;;
127    esac
128    # next flag
129    shift
[2]130done
[100]131unset usage
[2]132#
133# check for mailbodyfile
134if [ ! -f ${mailbodyfile} ]
135then
[352]136    echo "eee : ${mailbodyfile} not found"
137    exit 1
[2]138fi
139#
140# check for xmloutput
141#++ err si exist
142#
[31]143echo "<user>" > ${xmloutput}
[2]144echo "<!-- mailbodyfile : ${mailbodyfile} " >> ${xmloutput}
145cat ${mailbodyfile} >> ${xmloutput}
146echo "-->" >> ${xmloutput}
147echo "<!-- ${log_date} -->" >> ${xmloutput}
148author_id=$(grep "author_id=" ${mailbodyfile} | awk -F"=" '{print $2}')
149surname=$(grep "personal_surname=" ${mailbodyfile} | awk -F"=" '{print $2}')
150firstname=$(grep "personal_firstname=" ${mailbodyfile} | awk -F"=" '{print $2}')
151middlename=$(grep "personal_middlename=" ${mailbodyfile} | awk -F"=" '{print $2}')
152if [ "${author_id}" = "template" ]
153then
[352]154    author_id=$( echo ${surname} | \
155    tr "[:lower:]" "[:upper:]" | \
156    tr " " "_"  | \
157    recode -d -f UTF-8..flat)
158    author_id=${author_id}_$( echo ${firstname:0:1} | \
159    tr "[:upper:]" "[:lower:]" | \
160    recode -d -f UTF-8..flat)
[2]161fi
162echo "<userid>${author_id}</userid>" >> ${xmloutput}
163#
164echo "<personname>" >> ${xmloutput}
165#
[352]166echo "<surname>${surname}</surname>" >> ${xmloutput}
[2]167#
[352]168echo "<firstname>${firstname}</firstname>" >> ${xmloutput}
169echo "<othername role='mi'>${middlename}</othername>" >> ${xmloutput}
[2]170#
171echo "</personname>" >> ${xmloutput}
172#
173email=$(grep "personal_email=" ${mailbodyfile} | awk -F"=" '{print $2}')
[352]174echo "<email>${email}</email>" >> ${xmloutput}
[2]175#
176elements=components
177element=component
[352]178#++ récupérer les users/user[child::userid='template']/components/component/name
[4]179unset jlist
180unset jlist_name
[2]181j=1
182jlist[${j}]="OPA"
[4]183jlist_name[${j}]="OPA"
[2]184j=$((${j} + 1))
185jlist[${j}]="LIM"
[4]186jlist_name[${j}]="LIM"
[2]187j=$((${j} + 1))
188jlist[${j}]="TOP"
[4]189jlist_name[${j}]="TOP"
[2]190j=$((${j} + 1))
191jlist[${j}]="TAM"
[4]192jlist_name[${j}]="TAM"
[2]193j=$((${j} + 1))
194jlist[${j}]="SAXO"
[4]195jlist_name[${j}]="SAXO"
[2]196j=$((${j} + 1))
[4]197jlist[${j}]="offline"
198jlist_name[${j}]="Off-line"
[2]199j=$((${j} + 1))
200jlist[${j}]="AGRIF"
[4]201jlist_name[${j}]="AGRIF"
[2]202echo "<${elements}>" >> ${xmloutput}
203components_date=$(grep "components_date=" ${mailbodyfile} | awk -F"=" '{print $2}')
[352]204echo "<components_date>${components_date}</components_date>" >> ${xmloutput}
[2]205## find the element
206j=1
207jlistsize=${#jlist[@]}
208while [ ${j} -le ${jlistsize} ]
209do
[352]210    jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
211    # recherche de ${jlist[j]}
212    grep -q "${element}_${jlist_min}" ${mailbodyfile}
213    ok=${?}
214    if [ ${ok} -eq 0 ]
215    then
216        echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
217        echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
218        echo "<value>yes</value>" >> ${xmloutput}
219        echo "</${element}>"  >> ${xmloutput}
220    else
221        echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
222        echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
223        echo "<value>no</value>" >> ${xmloutput}
224        echo "</${element}>"  >> ${xmloutput}
225    fi
226    j=$(( ${j} + 1 ))
[2]227done
228echo "</${elements}>" >> ${xmloutput}
229#
230element=platform
231elements=platforms
[352]232#++ récupérer les users/user[child::userid='template']/platforms/platform/name
[4]233unset jlist
234unset jlist_name
[2]235j=1
236jlist[${j}]="CRAY"
[4]237jlist_name[${j}]="CRAY"
[2]238j=$((${j} + 1))
239jlist[${j}]="IBM"
[4]240jlist_name[${j}]="IBM"
[2]241j=$((${j} + 1))
242jlist[${j}]="FUJITSU"
[4]243jlist_name[${j}]="FUJITSU"
[2]244j=$((${j} + 1))
245jlist[${j}]="MAC"
[4]246jlist_name[${j}]="MAC"
[2]247j=$((${j} + 1))
248jlist[${j}]="NEC"
[4]249jlist_name[${j}]="NEC"
[2]250j=$((${j} + 1))
251jlist[${j}]="SGI"
[4]252jlist_name[${j}]="SGI"
[2]253j=$((${j} + 1))
254jlist[${j}]="SUN"
[4]255jlist_name[${j}]="SUN"
[2]256j=$((${j} + 1))
[4]257jlist[${j}]='pccluster'
258jlist_name[${j}]="PC Cluster"
[2]259echo "<${elements}>" >> ${xmloutput}
260## find the element
261j=1
262jlistsize=${#jlist[@]}
263while [ ${j} -le ${jlistsize} ]
264do
[352]265    # recherche de ${jlist[j]}
266    jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
267    grep -q "${element}_${jlist_min}" ${mailbodyfile}
268    ok=${?}
269    if [ ${ok} -eq 0 ]
270    then
271        echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
272        echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
273        echo "<value>yes</value>" >> ${xmloutput}
274        echo "</${element}>"  >> ${xmloutput}
275    else
276        echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
277        echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
278        echo "<value>no</value>" >> ${xmloutput}
279        echo "</${element}>"  >> ${xmloutput}
280    fi
281    j=$(( ${j} + 1 ))
[2]282done
283#
284# gestion des "others"
285j=1
286jlistsize=${#jlist[@]}
287grep_cmd="grep ${element}_zzz_other ${mailbodyfile} "
288while [ ${j} -le ${jlistsize} ]
289do
[352]290    grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
291    j=$(( ${j} + 1 ))
[2]292done
293other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
294echo "<${element} code='zzz_other'>" >> ${xmloutput}
295echo "<name>Other</name>" >> ${xmloutput}
296echo "<value>${other}</value>" >> ${xmloutput}
297echo "</${element}>"  >> ${xmloutput}
298echo "</${elements}>" >> ${xmloutput}
299#
300processors=$(grep "processors=" ${mailbodyfile} | awk -F"=" '{print $2}')
[352]301echo "<processors>${processors}</processors>" >> ${xmloutput}
[2]302#
303element=compiler
304elements=compilers
305unset jlist
[4]306unset jlist_name
[2]307j=1
308jlist[${j}]="g95"
[4]309jlist_name[${j}]="g95"
[2]310j=$((${j} + 1))
311jlist[${j}]="ifort"
[4]312jlist_name[${j}]="ifort"
[2]313j=$((${j} + 1))
314jlist[${j}]="pgf"
[4]315jlist_name[${j}]="pgf"
[2]316j=$((${j} + 1))
317jlist[${j}]="sxf90"
[4]318jlist_name[${j}]="sxf90"
[2]319j=$((${j} + 1))
320jlist[${j}]="xlf"
[4]321jlist_name[${j}]="xlf"
[2]322echo "<${elements}>" >> ${xmloutput}
323## find the element
324j=1
325jlistsize=${#jlist[@]}
326while [ ${j} -le ${jlistsize} ]
327do
[352]328    # recherche de ${jlist[j]}
329    jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
330    grep -q "${element}_${jlist_min}" ${mailbodyfile}
331    ok=${?}
332    if [ ${ok} -eq 0 ]
333    then
334        echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
335        echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
336        echo "<value>yes</value>" >> ${xmloutput}
337        echo "</${element}>"  >> ${xmloutput}
338    else
339        echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
340        echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
341        echo "<value>no</value>" >> ${xmloutput}
342        echo "</${element}>"  >> ${xmloutput}
343    fi
344    j=$(( ${j} + 1 ))
[2]345done
346#
347# gestion des "others"
348j=1
349jlistsize=${#jlist[@]}
350grep_cmd="grep ${element}_zzz_other= ${mailbodyfile} "
351while [ ${j} -le ${jlistsize} ]
352do
[352]353    grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
354    j=$(( ${j} + 1 ))
[2]355done
[352]356other=$(eval ${grep_cmd} | awk -F "=" '{print $2}')
[2]357echo "<${element} code='zzz_other'>" >> ${xmloutput}
358echo "<name>Other</name>" >> ${xmloutput}
359echo "<value>${other}</value>" >> ${xmloutput}
360echo "</${element}>"  >> ${xmloutput}
361echo "</${elements}>" >> ${xmloutput}
362#
[31]363echo "</user>" >> ${xmloutput}
[2]364#
365xmloutputfull=/tmp/${xmloutput} # ++
366echo '<?xml version="1.0" encoding="iso-8859-1"?>' > ${xmloutputfull}
[31]367echo '<!DOCTYPE users SYSTEM "user.dtd">' >> ${xmloutputfull}
368echo '<users>' >> ${xmloutputfull}
[2]369echo '<date>bidon</date>' >> ${xmloutputfull}
370cat ${xmloutput} >> ${xmloutputfull}
[31]371echo '</users>' >> ${xmloutputfull}
[2]372#
[352]373# ++ parce que je ne sais pas dire où est la dtd dans la commande xmllint
[31]374cp user.dtd /tmp/
[2]375xmllint --noout --valid ${xmloutputfull} 1>> ${log} 2>> ${log}
376status=${?}
377if [ ${status} -ne 0 ]
378then
[352]379    echo " eee : pb DTD conformance of ${xmloutputfull}"
380    echo " eee : see ${log}"
381    exit 1
[2]382else
[352]383    echo " iii : you can include ${xmloutput} in user.xml" #++ filename path
384    echo " iii : modify date in user.xml" #++ filename path
[2]385fi
386#
387exit 0
Note: See TracBrowser for help on using the repository browser.