source: trunk/MagicSoft/Mars/datacenter/scripts/dbchk@ 9046

Last change on this file since 9046 was 8858, checked in by snruegam, 17 years ago
*** empty log message ***
  • Property svn:executable set to *
File size: 6.7 KB
Line 
1#!/bin/sh
2#
3# ========================================================================
4#
5# *
6# * This file is part of MARS, the MAGIC Analysis and Reconstruction
7# * Software. It is distributed to you in the hope that it can be a useful
8# * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
9# * It is distributed WITHOUT ANY WARRANTY.
10# *
11# * Permission to use, copy, modify and distribute this software and its
12# * documentation for any purpose is hereby granted without fee,
13# * provided that the above copyright notice appear in all copies and
14# * that both that copyright notice and this permission notice appear
15# * in supporting documentation. It is provided "as is" without express
16# * or implied warranty.
17# *
18#
19#
20# Author(s): Thomas Bretz 03/2007 <mailto:tbretz@astro.uni-wuerzburg.de>
21# Author(s): Daniela Dorner 02/2008 <mailto:dorner@astro.uni-wuerzburg.de>
22# Author(s): Stefan Ruegamer 02/2008 <mailto:snruegam@astro.uni-wuerzburg.de>
23#
24# Copyright: MAGIC Software Development, 2000-2008
25#
26#
27# ========================================================================
28#
29# This script searches for crashed runs, sequences or datasets in the db
30# as well as obsolete or missing sequence files and corresponding callisto
31# and star folders. In the third and fourth check the consistency between
32# the Run and Sequence DB is checked.
33#
34#
35# TODO
36#
37# Spped up with SQL: FIELD(25123, 1, 2, 3, 4, 5, ..., 1000200);
38# Cross check sequences in Sequence and other databases
39# added switch which allows to correct for the problems immediatly
40# unify the checks (especially 1b and 1c)
41# for the sequences better use 0* instead of 0+ ?
42
43
44source `dirname $0`/sourcefile
45printprocesslog "INFO starting $0"
46program=dbchk
47
48scriptlog=$runlogpath/$program-$datetime.log
49date >> $scriptlog 2>&1
50
51getdbsetup
52alias mymysql='mysql -s -u $us --password=$pw --host=vela $db'
53
54# check for crashed runs, sequences and datasets
55echo "Checking if something is crashed on run basis" >> $scriptlog 2>&1
56cruns=`echo "SELECT fRunNumber FROM RunProcessStatus WHERE isnull(fFailedTime) and not isnull(fStartTime) and adddate(fStartTime, Interval 12 HOUR) < Now()" | mymysql`
57if [ ! "$cruns" = "" ]
58then
59 printprocesslog "WARN The following runs seem to be crashed. Please check manually: $cruns"
60 echo "WARN The following runs seem to be crashed. Please check manually: $cruns" >> $scriptlog 2>&1
61else
62 echo " Nothing found." >> $scriptlog 2>&1
63fi
64
65echo "Checking if something is crashed on sequence basis" >> $scriptlog 2>&1
66csequences=`echo "SELECT fSequenceFirst FROM SequenceProcessStatus WHERE isnull(fFailedTime) and not isnull(fStartTime) and adddate(fStartTime, Interval 12 HOUR) < Now()" | mymysql`
67if [ ! "$csequences" = "" ]
68then
69 printprocesslog "WARN The following sequences seem to be crashed. Please check manually: $csequences"
70 echo "WARN The following sequences seem to be crashed. Please check manually: $csequences" >> $scriptlog 2>&1
71else
72 echo " Nothing found." >> $scriptlog 2>&1
73fi
74
75echo "Checking if something is crashed on dataset basis" >> $scriptlog 2>&1
76cdatasets=`echo "SELECT fDataSetNumber FROM DataSetProcessStatus WHERE isnull(fFailedTime) and not isnull(fStartTime) and adddate(fStartTime, Interval 12 HOUR) < Now()" | mymysql`
77if [ ! "$cdatasets" = "" ]
78then
79 printprocesslog "WARN The following datasets seem to be crashed. Please check manually: $cdatasets"
80 echo "WARN The following datasets seem to be crashed. Please check manually: $cdatasets" >> $scriptlog 2>&1
81else
82 echo " Nothing found." >> $scriptlog 2>&1
83fi
84
85# CHECK 1
86echo "Checking if all sequence files have a corresponding entry in Sequences" >> $scriptlog 2>&1
87files=`find $sequpath -type f`
88for file in $files
89do
90 sequence=`echo $file | sed -e "s/^.*\/sequence0\+\([0-9]\+\)\.txt$/\1/"`
91 if [ "$sequence" = "" ]
92 then
93 echo "No sequence file: $file" >> $scriptlog 2>&1
94 continue
95 fi
96
97 var=`echo SELECT fSequenceFirst FROM Sequences WHERE fSequenceFirst=$sequence | mymysql`
98 if ! [ "$sequence" = "$var" ]
99 then
100 echo "Sequence-File $sequence exist but it is not in Sequences." >> $scriptlog 2>&1
101 continue
102 fi
103done
104
105# CHECK 1b (callisto)
106echo "Checking if all sequences in ${datapath}/callisto have a corresponding sequence in Sequence" >> $scriptlog 2>&1
107dirs=`find ${datapath}/callisto -mindepth 2 -maxdepth 2 -type d`
108for dir in $dirs
109do
110 sequence=`echo $dir | sed -e "s/^.*\/0\+\([0-9]\+\)$/\1/"`
111 if [ "$sequence" = "" ]
112 then
113 echo "Invalid directory: $dir" >> $scriptlog 2>&1
114 continue
115 fi
116
117 var=`echo SELECT fSequenceFirst FROM Sequences WHERE fSequenceFirst=$sequence | mymysql`
118 if ! [ "$sequence" = "$var" ]
119 then
120 echo "$dir exists but no corresponding sequence in Sequences." >> $scriptlog 2>&1
121 continue
122 fi
123done
124
125# CHECK 1c (star)
126echo "Checking if all sequences in ${datapath}/star have a corresponding sequence in Sequence" >> $scriptlog 2>&1
127dirs=`find ${datapath}/star -mindepth 2 -type d`
128for dir in $dirs
129do
130 sequence=`echo $dir | sed -e "s/^.*\/0\+\([0-9]\+\)$/\1/"`
131 if [ "$sequence" = "" ]
132 then
133 echo "Invalid directory: $dir" >> $scriptlog 2>&1
134 continue
135 fi
136
137 var=`echo SELECT fSequenceFirst FROM Sequences WHERE fSequenceFirst=$sequence | mymysql`
138 if ! [ "$sequence" = "$var" ]
139 then
140 echo "$dir exists but no corresponding sequence in Sequences." >> $scriptlog 2>&1
141 continue
142 fi
143done
144
145# CHECK 2
146echo "Checking if all sequences in Sequences have a corresponding sequence files" >> $scriptlog 2>&1
147sequences=`echo SELECT fSequenceFirst FROM Sequences | mymysql`
148for sequence in $sequences
149do
150 var=`find $sequpath -type f -regex .*/sequence0+${sequence}\.txt$`
151 if [ "$var" = "" ]
152 then
153 echo "Sequence-File for $sequence not found but in db." >> $scriptlog 2>&1
154 fi
155done
156
157# CHECK 3
158echo "Checking if all sequences from Sequences exists RunData" >> $scriptlog 2>&1
159sequences=`echo SELECT fSequenceFirst FROM Sequences GROUP BY fSequenceFirst | mymysql`
160for sequence in $sequences
161do
162 res=`echo SELECT fSequenceFirst FROM RunData WHERE fSequenceFirst=$sequence GROUP BY fSequenceFirst | mymysql`
163 if ! [ "$sequence" = "$res" ]
164 then
165 echo "Sequence $sequence exists in Sequences but not in RunData." >> $scriptlog 2>&1
166 continue
167 fi
168done
169
170# CHECK 4
171echo "Checking if all sequences from RunData exists in Sequences" >> $scriptlog 2>&1
172sequences=`echo SELECT fSequenceFirst FROM RunData WHERE not fSequenceFirst=0 GROUP BY fSequenceFirst | mymysql`
173for sequence in $sequences
174do
175 var=`echo SELECT fSequenceFirst FROM Sequences WHERE fSequenceFirst=$sequence | mymysql`
176 if ! [ "$sequence" = "$var" ]
177 then
178 echo "Sequence $sequence exists in RunData but not in Sequences." >> $scriptlog 2>&1
179 continue
180 fi
181done
182
183finish >> $scriptlog 2>&1
Note: See TracBrowser for help on using the repository browser.