source: trunk/libIGCM/libIGCM_check/libIGCM_check.ksh @ 1029

Last change on this file since 1029 was 1024, checked in by sdipsl, 10 years ago

Cosmetics

  • Property svn:keywords set to Date Author Rev
File size: 14.3 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sonia Labetoulle, Sébastien Denvil
5# Contact: Sonia.Labetoulle__at__ipsl.jussieu.fr Sebastien.Denvil_at__ipsl.jussieu.fr
6# $Revision::                                          $ Revision of last commit
7# $Author::                                            $ Author of last commit
8# $Date::                                              $ Date of last commit
9# IPSL (2006)
10#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
11#
12#**************************************************************
13
14#D-#==================================================
15#D-function IGCM_check_CommonDef
16#D-* Purpose:
17#D-* Examples:
18#D-
19function IGCM_check_CommonDef
20{
21  IGCM_debug_PushStack "IGCM_check_CommonDef" $@
22
23  # Define colors
24  # -------------
25  ColEsc="\033["
26  ColNon="${ColEsc}0m"       # Return to normal
27  ColExp="${ColEsc}1m"       # Blanc - gras
28  ColFat="${ColEsc}1;31m"    # Fatal
29  ColCpl="${ColEsc}1;32m"    # Completed
30  ColAtt="${ColEsc}1;30m"    # Waiting
31  ColDef="${ColEsc}1;34m"    # Default
32  ColRbl="${ColEsc}31m"      # Rebuild
33
34  # Define date format
35  # ------------------
36  DateFormat="%d/%m/%y %R:%S"
37
38
39  # What kind of rebuild ?
40  # ----------------------
41  if [ X${config_Post_RebuildFromArchive} = Xtrue ] ; then
42    RebuildJob="rebuild_fromArchive"
43    IGCM_sys_TestDirArchive ${REBUILD_DIR}
44    RebuildExists=$?
45  else
46    RebuildJob="rebuild_fromWorkdir"
47    IGCM_sys_TestDir ${REBUILD_DIR}
48    RebuildExists=$?
49  fi
50
51  # Are packs activated or not ?
52  # ----------------------------
53  if ( [ ! X${config_Post_PackFrequency} = X${NULL_STR} ] && \
54       [ ! X${config_Post_PackFrequency} = XNONE ] ) ; then
55    Pack=true
56  else
57    Pack=false
58  fi
59
60
61  # Define input parameters
62  # -----------------------
63  set -A JobType_list "${RebuildJob}" "pack_output" "pack_restart" "pack_debug"
64
65  for JobType in ${JobType_list[*]} ; do
66    typeset    name1="${JobType}_String"
67    typeset    name2="${JobType}_Field"
68    typeset    name3="${JobType}_Activ"
69    if [ X${JobType} == X${RebuildJob} ] ; then
70      if ( ${Pack} ) ; then
71        eval ${name1}=IGCM_sys_PutBuffer_Out
72      else
73        eval ${name1}=IGCM_sys_Put_Out
74      fi
75      eval ${name2}=4
76      eval ${name3}=true
77    else
78      eval ${name1}=IGCM_sys_Put_Out
79      eval ${name2}=3
80      if ( ${Pack} ) ; then
81        eval ${name3}=true
82      else
83        eval ${name3}=false
84      fi
85    fi
86  done
87
88  IGCM_debug_PopStack "IGCM_check_CommonDef"
89}
90
91#D-#==================================================
92#D-function IGCM_check_ChangeUsr
93#D-* Purpose:
94#D-* Examples:
95#D-
96function IGCM_check_ChangeUsr
97{
98  IGCM_debug_PushStack "IGCM_check_ChangeUsr" $@
99
100  CurrentGrp=$( groups $CurrentUsr | gawk '{print $3}' )
101  TargetGrp=$( groups $TargetUsr | gawk '{print $3}' )
102
103  echo $1 | sed -e "s/${CurrentUsr}/${TargetUsr}/" \
104                -e "s/${CurrentGrp}/${TargetGrp}/"
105
106  IGCM_debug_PopStack "IGCM_check_ChangeUsr"
107}
108
109#D-#==================================================
110#D-function IGCM_check_SearchCatalog
111#D-* Purpose:
112#D-* Examples:
113#D-
114function IGCM_check_SearchCatalog
115{
116  IGCM_debug_PushStack "IGCM_check_SearchCatalog" $@
117
118  typeset num
119  unset SUBMIT_DIR
120
121  fg_new=false
122
123  if [ ! X${JobName} == X ] ; then
124    NbOcc=$( gawk -v JobName=${JobName} \
125             'BEGIN {x=0}  $1 ~ JobName {++x} END {print x}' ${SimuCatalog} )
126  else
127    NbOcc=0
128  fi
129
130  if ( [ ${NbOcc} -eq 0 ] && ( ${fg_path} ) ) ; then
131
132    if [ ! "$( echo ${ConfigPath} | cut -c 1 )" == "/" ] ; then
133      ConfigPath="${PWD}/${ConfigPath}"
134    fi
135
136    set -A FileList $( ls ${ConfigPath}/Job_* )
137    if [ X$FileList == X ] ; then
138      NbOcc=0
139    else
140      NbOcc=${#FileList[@]}
141      fg_new=true
142    fi
143  fi
144
145  if ( [ ${NbOcc} -eq 0 ] && ( ${fg_search} ) ) ; then
146    SEARCH_DIR=${WORKDIR}
147    if [ ${TargetUsr} != ${CurrentUsr} ] ; then
148      SEARCH_DIR=$( IGCM_check_ChangeUsr ${SEARCH_DIR} )
149    fi
150    echo "${JobName} not in Catalog, we'll try to find it in ${SEARCH_DIR}"
151
152    set -A FileList $( find ${SEARCH_DIR}/ \
153                            -path ${SEARCH_DIR}/IGCM_OUT -prune -o \
154                            -name Job_${JobName} -print )
155    if [ X$FileList == X ] ; then
156      NbOcc=0
157    else
158      NbOcc=${#FileList[@]}
159      fg_new=true
160    fi
161  fi
162
163  if [ ${NbOcc} -gt 1 ] ; then
164    echo "More than one job"
165    ind=0
166    while [ ${ind} -lt ${NbOcc} ] ; do
167      printf '%2i) %-30s\n' ${ind} ${FileList[${ind}]}
168      (( ind = ind + 1 ))
169    done
170    echo "Give your choice number or 'q' to quit : "
171    read Choice
172    if [ X${Choice} == Xq ] ; then
173      return 1
174    else
175      fg_new=true
176      FileList=${FileList[${Choice}]}
177      NbOcc=1
178    fi
179  fi
180
181  case ${NbOcc} in
182    0)
183      if ( ${fg_search} ) ; then
184        echo "${JobName} not found, neither in catalog nor in \$WORKDIR."
185      else
186        echo "${JobName} not found in catalog."
187      fi
188      echo "You can try : *) '-s' option to automatically search your \$WORKDIR ; "
189      echo "              *) '-p' option to provide the directory (absolute path) "
190      echo "                      containing the config.card ; "
191      echo "              *)  manually editing your ${SimuCatalog}."
192      return 1 ;;
193    1)
194      if ( ${fg_new} ) ; then
195#        JobName=${JobName:=$( basename ${FileList} | gawk -F"_" '{ print $2 }' )}
196        JobName=$( basename ${FileList} | gawk -F"_" '{ print $2 }' )
197        SUBMIT_DIR=$( dirname ${FileList} )
198        echo "${JobName} ${TargetUsr} ${HostName} ${SUBMIT_DIR}"
199        echo "${JobName} ${TargetUsr} ${HostName} ${SUBMIT_DIR}" >> ${SimuCatalog}
200        sort -u ${SimuCatalog} > ${SimuCatalog}.tmp
201        mv ${SimuCatalog}.tmp ${SimuCatalog}
202      elif ( [ ${TargetUsr} == $( gawk -v JobName=${JobName} \
203                                      '$1 ~ JobName {print $2}' \
204                                      ${SimuCatalog} ) ] \
205          && [ ${HostName}  == $( gawk -v JobName=${JobName} \
206                                      '$1 ~ JobName {print $3}' \
207                                      ${SimuCatalog} ) ] ) ; then
208        JobName=$( gawk -v JobName=${JobName} '$1 ~ JobName {print $1}' ${SimuCatalog} )
209        SUBMIT_DIR=$( gawk -v JobName=${JobName} '$1 ~ JobName {print $4}' ${SimuCatalog} )
210      else
211        echo "${JobName} not in Catalog."
212        return 1
213      fi
214      ;;
215    *)
216      break ;;
217  esac
218
219  IGCM_debug_PopStack "IGCM_check_SearchCatalog"
220}
221
222#D-#==================================================
223#D-function IGCM_check_PrintHeader
224#D-* Purpose:
225#D-* Examples:
226#D-
227function IGCM_check_PrintHeader
228{
229  IGCM_debug_PushStack "IGCM_check_PrintHeader" $@
230
231  echo "|===========================================================================================================|"
232  printf "| JobName = ${ColExp}%-26.26s${ColNon} JobID = ${ColExp}%-36.36s${ColNon}date : ${ColExp}%-18s${ColNon}|\n" \
233         ${JobName} ${JobID} "$( date +"${DateFormat}" )"
234
235  printf "| User    = ${ColExp}%-56.56s${ColNon}last run.card write : ${ColExp}%-18s${ColNon}|\n" \
236         ${TargetUsr} "${LastWrite}"
237
238  printf "|-----------------------------------------------------------------------------------------------------------|\n"
239
240  printf "| Submit  | ${ColExp}%-95.95s${ColNon} |\n" ${SUBMIT_DIR}
241  printf "| Data    | ${ColExp}%-95.95s${ColNon} |\n" ${DATA_DIR}
242  printf "| Rebuild | ${ColExp}%-95.95s${ColNon} |\n" ${REBUILD_DIR}
243  printf "| Post    | ${ColExp}%-95.95s${ColNon} |\n" ${POST_DIR}
244  printf "| Work    | ${ColExp}%-95.95s${ColNon} |\n" ${CWORK_DIR}
245
246  echo "|-------------------------|-------------|-------------------------|-------------|-----:----------:----------|"
247  echo "|                         |             |                         |             |     Pending Rebuilds      |"
248  echo "| Date Begin - DateEnd    | PeriodState | Current Period          | CumulPeriod | Nb  : from     : to       |"
249  echo "|-------------------------|-------------|-------------------------|-------------|-----:----------:----------|"
250
251  printf "| %-10s - %-10s | " \
252         $DateBegin $DateEnd
253
254  case $PeriodState in
255    Fatal)
256      Color=${ColFat}
257      ;;
258    Completed)
259      Color=${ColCpl}
260      ;;
261    Waiting|OnQueue)
262      Color=${ColAtt}
263      ;;
264    *)
265      Color=${ColDef}
266      ;;
267  esac
268  printf "${Color}%-11s${ColNon} | " $PeriodState
269
270  printf "%-10s - %-10s | %11s | " \
271         $PeriodDateBegin $PeriodDateEnd $CumulPeriod
272
273  if ( [ X${NbRebuild} != X. ] && [ X${NbRebuild} != X0 ] ) ; then
274    printf "${ColRbl}%3s : %-8s : %-8s${ColNon} |\n" \
275           $NbRebuild $FirstRebuild $LastRebuild
276  else
277    printf "%3s : %-8s : %-8s |\n" \
278           $NbRebuild $FirstRebuild $LastRebuild
279  fi
280
281  if [ ${NbLines} -gt 0 ] ; then
282    printf "|-----------------------------------------------------------------------------------------------------------|\n"
283    printf "|                                                      Last                                                 |\n"
284    printf "|     Rebuild      |   Pack_Output    |   Pack_Restart   |    Pack_Debug    |  Monitoring  |     Atlas      |\n"
285    printf "|------------------|------------------|------------------|------------------|--------------|----------------|\n"
286  fi
287
288  IGCM_debug_PopStack "IGCM_check_PrintHeader"
289}
290
291#D-#==================================================
292#D-function IGCM_check_PrintJob
293#D-* Purpose:
294#D-* Examples:
295#D-
296function IGCM_check_PrintJob
297{
298  IGCM_debug_PushStack "IGCM_check_PrintJob" $@
299
300  printf "|"
301
302  # Print rebuild and pack jobs
303  # ---------------------------
304  for JobType in ${JobType_list[*]} ; do
305    eval Date=\${${JobType}_Date[${ind}]}
306    eval Status=\${${JobType}_Status[${ind}]}
307    eval Nb=\${${JobType}_Nb[${ind}]}
308
309    if [ X${Status} == XOK  ] ; then
310      Color=${ColCpl}
311    else
312      Color=${ColFat}
313    fi
314    printf "  ${Color}%-8s${ColNon} : %3s  |" ${Date} ${Nb}
315  done
316
317  Color=${ColExp}
318
319  # Print monitoring jobs
320  # ---------------------
321  JobType=monitoring
322  if [ $ind -eq 0 ] ; then
323    eval Date=\${${JobType}_Date}
324  else
325    Date=""
326  fi
327  printf "     ${Color}%-4s${ColNon}     |" ${Date}
328
329  # Print atlas jobs
330  # ----------------
331  JobType=atlas
332  eval Date=\${${JobType}_Date[${ind}]}
333  printf "  ${Color}%-12s${ColNon}  |" ${Date}
334
335  printf "\n"
336
337  IGCM_debug_PopStack "IGCM_check_PrintJob"
338}
339
340#D-#==================================================
341#D-function IGCM_check_PrintFooter
342#D-* Purpose:
343#D-* Examples:
344#D-
345function IGCM_check_PrintFooter
346{
347  IGCM_debug_PushStack "IGCM_check_PrintFooter" $@
348
349  printf "|===========================================================================================================|\n"
350  #date +"${DateFormat}"
351
352  IGCM_debug_PopStack "IGCM_check_PrintFooter"
353}
354
355#D-#==================================================
356#D-function IGCM_check_CheckPendingRebuild
357#D-* Purpose:
358#D-* Examples:
359#D-
360function IGCM_check_CheckPendingRebuild
361{
362  IGCM_debug_PushStack "IGCM_check_PendingRebuild" $@
363
364  NbRebuild="."
365  FirstRebuild="."
366  LastRebuild="."
367
368  if [ ${RebuildExists} == 0 ] ; then
369    set -A RebuildList $( find ${REBUILD_DIR}/ -name "REBUILD_*" | sort )
370    if [ ${#RebuildList[*]} -gt 0 ] ; then
371      NbRebuild=$( IGCM_sys_CountFileArchive ${REBUILD_DIR} )
372
373      FirstRebuild=$( basename ${RebuildList[0]} | cut -f2 -d\_ )
374      LastRebuild=$( basename ${RebuildList[ (( NbRebuild=${NbRebuild}-1 )) ]} | cut -f2 -d\_ )
375    fi
376  fi
377
378  IGCM_debug_PopStack "IGCM_check_PendingRebuild"
379}
380
381#D-#==================================================
382#D-function IGCM_check_CheckRebPackJobs
383#D-* Purpose:
384#D-* Examples:
385#D-
386function IGCM_check_CheckRebPackJobs
387{
388  IGCM_debug_PushStack "IGCM_check_CheckRebPackJobs" $@
389
390  NbLines=0
391  for JobType in ${JobType_list[*]} ; do
392    eval String=\${${JobType}_String}
393    eval Field=\${${JobType}_Field}
394    eval Activ=\${${JobType}_Activ}
395
396    if ( ${Activ} ) ; then
397
398      set -A FileList $( ls ${POST_DIR}/${JobType}.*.out | tail -n ${NbHisto} )
399
400      if [ ${#FileList[*]} -gt ${NbLines} ] ; then
401        NbLines=${#FileList[*]}
402      fi
403
404      (( ind = 0 ))
405      for FileName in ${FileList[*]} ; do
406        LastDate=""
407        LastDate=$( basename ${FileName} | gawk -F"." '{ print $(NF-1) }' )
408
409        set -- $( gawk -v String=${String} \
410                       'BEGIN { nb_ok = 0 ; nb_ko = 0 } \
411                       ($1 ~ String) { \
412                         if ($3 !~ /error./) { \
413                           nb_ok = nb_ok + 1 \
414                         } else { \
415                           nb_ko = nb_ko + 1 \
416                         } \
417                       } \
418                       END { print nb_ok " " nb_ko }' \
419                       ${POST_DIR}/${JobType}.${LastDate}.out )
420        Match=$1
421        Error=$2
422
423        (( Nb = ${Match} - ${Error} ))
424
425        if ( [ ${Error} -eq 0 ] && [ ${Nb} -gt 0 ] ) ; then
426          Status=OK
427        else
428          Status=KO
429        fi
430
431        eval ${JobType}_Date[$ind]=${LastDate}
432        eval ${JobType}_Status[$ind]=${Status}
433        eval ${JobType}_Nb[$ind]=${Nb}
434
435        (( ind = ind + 1 ))
436      done
437
438    else
439
440        eval ${JobType}_Date[0]=""
441        eval ${JobType}_Status[0]=""
442        eval ${JobType}_Nb[0]=""
443
444    fi
445
446  done
447
448  IGCM_debug_PopStack "IGCM_check_CheckRebPackJobs"
449}
450
451#D-#==================================================
452#D-function IGCM_check_CheckMonitoring
453#D-* Purpose:
454#D-* Examples:
455#D-
456function IGCM_check_CheckMonitoring
457{
458  IGCM_debug_PushStack "IGCM_check_CheckMonitoring" $@
459
460    LastDate=""
461    JobType=monitoring
462    IGCM_sys_TestDirArchive ${CWORK_DIR}/MONITORING
463    RC=$?
464    if [ $RC == 0 ] ; then
465      FileTmp=$( IGCM_sys_RshArchive "ls ${CWORK_DIR}/MONITORING/files/*.nc | head -n 1" )
466      IGCM_sys_GetDate_Monitoring ${FileTmp} LastDate
467      eval ${JobType}_Date=${LastDate}
468    fi
469
470  IGCM_debug_PopStack "IGCM_check_CheckMonitoring"
471}
472
473#D-#==================================================
474#D-function IGCM_check_CheckAtlas
475#D-* Purpose:
476#D-* Examples:
477#D-
478function IGCM_check_CheckAtlas
479{
480  IGCM_debug_PushStack "IGCM_check_CheckAtlas" $@
481
482  JobType=atlas
483  IGCM_sys_TestDirArchive ${CWORK_DIR}/ATLAS
484  RC=$?
485  if [ $RC == 0 ] ; then
486    set -A FileList $( IGCM_sys_RshArchive "ls ${CWORK_DIR}/ATLAS | tail -n ${NbHisto}" )
487
488    if [ ${#FileList[*]} -gt ${NbLines} ] ; then
489      NbLines=${#FileList[*]}
490    fi
491
492    (( ind = 0 ))
493    for FileName in ${FileList[*]} ; do
494      eval ${JobType}_Date[$ind]=${FileName}
495      (( ind = ind + 1 ))
496    done
497  fi
498
499  IGCM_debug_PopStack "IGCM_check_CheckAtlas"
500}
Note: See TracBrowser for help on using the repository browser.