Subversion Repositories DevTools

Rev

Rev 3410 | Rev 3423 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3410 dpurdie 1
#!/bin/bash
2
#set -x
3
#
4
#   Config
5
#
6
MAILTO=David.Purdie@vixtechnology.com,John.Rowling@vixtechnology.com
3413 dpurdie 7
FROM=buildadm@vixtechnology.com
3410 dpurdie 8
CCTO=
9
PATH=$HOME/bin:$PATH
10
DPKG=/export/devl/dpkg_archive
11
RELEASES=/export/devl/releases
12
BASEDIR=$DPKG
13
METADIR=.dpkg_archive/pkg_cron
14
OUTDIR=$BASEDIR/$METADIR
15
GFIND=/usr/bin/find
16
GDF=/bin/df
17
MOUNTS="$DPKG $RELEASES"
18
 
19
 
20
# Enable null globbing
21
#
22
shopt -s nullglob
23
#
24
#   Debug Control
25
#
26
DO_VERBOSE=
27
DO_FIND=1
28
DO_MAIL=1
29
DO_NEW=1
30
DO_REMOVED=1
31
DO_FILES=1
32
DO_SCAN=1
33
DATE=
34
YDATE=
35
 
36
#
37
#   Parse user (debug) options
38
#
39
for arg in $* ; do
40
    case $arg in
41
        nomail) DO_MAIL= ;;
42
        nofind) DO_FIND= ;;
43
        nofiles) DO_FILES= ;;
44
        noremoved) DO_REMOVED= ;;
45
        nonew)  DO_NEW= ;;
46
        noscan)  DO_SCAN= ;;
47
        today=*) DATE=${arg##*=} ;;
48
        yesterday=*) YDATE=${arg##*=} ;;
49
        mail=*) MAILTO=${arg##*=} ;;
50
        verbose) DO_VERBOSE=1 ;;
51
        *help)  echo "Options: nomail, nofind, nofiles, nonew, noremoved, noscan, today=xxx, yesterday=yyy, mail=zzz verbose"; exit 0 ;;
52
        * ) echo "Unknown option $arg"; exit 1 ;;
53
    esac
54
done
55
 
56
if [ $DO_VERBOSE ] ; then
57
    echo "DATE        : $DATE";
58
    echo "YDATE       : $YDATE";
59
    echo "MAILTO      : $MAILTO";
60
    echo "DO_FIND     : $DO_FIND";
61
    echo "DO_FILES    : $DO_FILES";
62
    echo "DO_NEW      : $DO_NEW";
63
    echo "DO_REMOVED  : $DO_REMOVED";
64
    echo "DO_SCAN     : $DO_SCAN";
65
    echo "DO_MAIL     : $DO_MAIL";
66
fi
67
 
68
if [ ! "$DATE" ] ; then
69
    DATE=$(date +%Y-%m-%d)
70
fi
71
 
72
#
73
# Determine Yesterdays date to locate yesterdays logfile
74
#
75
if [ ! "$YDATE" ] ; then
76
    DAYS=( Sat Sun Mon Tue Wed Thu Fri Sat)
77
    MONTHS=( Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
78
 
79
    YESTERDAY=$((`date +%e` -1))
80
    MONTH=`date +%m`
81
    YEAR=`date +%Y`
82
    NDAY=`date +%u`
83
    WEEKDAY=${DAYS[`date +%u`]}
84
    MONTH=${MONTH#0}
85
    if [ $YESTERDAY -eq "0" ]
86
    then
87
        MONTH=$((MONTH-1))
88
 
89
        if [ $MONTH -eq "0" ]
90
        then
91
            MONTH=12
92
            YEAR=$((YEAR-1))
93
        fi
94
 
95
        set `cal $MONTH $YEAR`
96
        shift $(($# - 1))
97
        YESTERDAY=$1
98
    fi
99
 
100
    TMONTH=${MONTHS[MONTH]}
101
    # echo $WEEKDAY $YESTERDAY $MONTH $TMONTH $YEAR
102
    #echo $YESTERDAY
103
 
104
    YDATE=$( printf "%4.4d-%2.2d-%2.2d" $YEAR $MONTH $YESTERDAY )
105
fi
106
 
107
 
108
LFILE=$OUTDIR/dpkg_archive_list.$DATE.txt
109
LLFILE=$METADIR/dpkg_archive_list.$DATE.txt
3413 dpurdie 110
L2FILE=dpkg_archive_list.$DATE.txt
3410 dpurdie 111
CFILE=$BASEDIR/dpkg_archive_list.txt
112
C2FILE=$OUTDIR/dpkg_archive_list.txt
113
 
114
PFILE=$OUTDIR/dpkg_archive_pkg.$DATE.txt
115
YFILE=$OUTDIR/dpkg_archive_pkg.$YDATE.txt
116
 
117
if [ "$DO_VERBOSE" ] ; then
118
	echo "PFILE: $PFILE"
119
	echo "YFILE: $YFILE"
120
	echo "LFILE: $LFILE"
121
fi
122
mkdir -p $OUTDIR
123
 
124
#
125
#   Find files
126
#   Find packages
127
#
128
if [ "$DO_FIND" ] ; then
129
    [ $DO_VERBOSE ] && echo "Finding all packages in the archive"
130
    #
131
    # Determine packages in archive
132
    #
3413 dpurdie 133
    $GFIND -L $BASEDIR -maxdepth 2 -type d  > $PFILE
3410 dpurdie 134
 
135
    #
136
    #   Determine files in the archive
137
    #   Keep a link to simplify user access to the list
138
    #
139
    if [ $DO_FILES ] ; then
140
        [ $DO_VERBOSE ] && echo "Finding all Files in the archive"
141
        $GFIND -L $BASEDIR | sort > $LFILE
142
 
143
        #
144
        #   Create a link to the current list of all files
145
        #
146
        rm -f $CFILE
147
        ln -s $LLFILE $CFILE
148
 
149
	    rm -f $C2FILE
150
        ln -s $L2FILE $C2FILE
151
    fi
152
 
153
fi
154
 
155
f1=/tmp/$$.file1
156
f2=/tmp/$$.file2
157
f3=/tmp/$$.file3
158
 
3413 dpurdie 159
echo >> $f3 '<pre style="font-size: medium">'
3410 dpurdie 160
echo >> $f3 "dpkg_archive Report"
161
echo >> $f3 "Yesterday:  $YFILE"
162
echo >> $f3 "Today    :  $PFILE"
163
echo >> $f3 ""
164
$GDF -h $MOUNTS >> $f3
165
 
166
#
167
#   Determine new packages
168
#
169
#echo "Yesterday:  $YFILE"
170
#echo "Today    :  $PFILE"
171
if [ -f $YFILE ] ; then
172
 
173
    if [ "$DO_NEW" ] ; then
174
        [ $DO_VERBOSE ] && echo "Finding new packages in the archive"
175
 
176
        echo >> $f3 ""
177
        echo >> $f3 "New packages added to dpkg_archive"
178
        sort $YFILE > $f1
179
        sort $PFILE > $f2
180
        newp=$( comm -13 $f1 $f2)
181
        for file in $newp ; do
182
 
183
            pname="${file##$BASEDIR/}"
184
            pver="${pname##*/}"
185
            pname="${pname%%/*}"
186
 
3413 dpurdie 187
            if [ "$pname" = ".dpkg_archive" ] ; then
188
                continue
189
            fi
190
 
3410 dpurdie 191
            if [ "$pname" = "$pver" ] ; then
192
                printf " D%10s %8s %10s %s\n" "-" "NewDir" "-" $file
193
                continue
194
            fi
195
 
196
            built='-'
197
            if [ -f $file/descpkg ] ; then
198
               built=$( sed -n '-e/^Released By:/s~.*: *\([-_.0-9a-zA-Z]*\).*~\1~p' '-e/^Built By:/s~.*: *\([-_.0-9a-zA-Z]*\).*~\1~p' < $file/descpkg)
199
            fi
200
 
201
            flag='*'
202
            [ "$built" = "buildadm" ] && flag=' '
203
 
204
            tag='ManCpy'
205
            for ii in $file/built.* ; do
206
                tag='Auto'
207
            done
208
 
209
            note='-'
210
            ls 1>/dev/null 2>&1 $file/doc/RELEASE_NOTES_* || note='N'
211
 
212
            result=$(du -ks $file)
213
            printf "%c%c%10s %8s %10s %s\n" "$note" "$flag" "$built" "$tag" $result
214
        done >> $f3
215
    fi
216
 
217
    if [ "$DO_REMOVED" ] ; then
218
        [ $DO_VERBOSE ] && echo "Finding removed packages in the archive"
219
 
220
        echo >> $f3 ""
221
        echo >> $f3 "Removed Package Versions"
222
        sort $YFILE > $f1
223
        sort $PFILE > $f2
224
        remp=$( comm -23 $f1 $f2 )
225
        for file in $remp ; do
226
 
227
            pname="${file##$BASEDIR/}"
228
            pver="${pname##*/}"
229
            pname="${pname%%/*}"
230
 
231
            if [ "$pname" != "$pver" ] ; then
232
                printf "  %10s %8s %10s %s\n" "-" "Deleted" "-" $file
233
                continue
234
            fi
235
        done >> $f3
236
    fi
237
 
238
 
239
    #
240
    #   Broken link report
241
    #
242
    if [ "$DO_SCAN" ] ; then
243
        [ $DO_VERBOSE ] && echo "Broken Link Scan"
244
        echo "" >> $f3
245
        echo "Dpkg Broken Link Report" >> $f3
246
        $GFIND -L $BASEDIR  -maxdepth 1 -type l -ls >> $f3
247
 
248
#        #
249
#        #   Scan deploy mount for oddities
250
#        #
251
#        [ $DO_VERBOSE ] && echo "Deploy Mount Point Scan"
252
#        echo "" >> $f3
253
#        echo "Deploy Mount Point Scan" >> $f3
254
#        for pkg in $( $GFIND -L $DEPLOY -maxdepth 1 ) ; do
255
#            name=${pkg#$DEPLOY/}
256
#
257
#            # Skip root of the search
258
#            if [ "$name" = "$pkg" ] ; then
259
#                continue
260
#            fi
261
#
262
#            # Don't expect files in the deploy mount
263
#            if [ -f $pkg ] ; then
264
#                echo Suspect file: $pkg
265
#                continue
266
#            fi
267
#
268
#            # Don't expect links in the deploy mount
269
#            if [ -L $pkg ] ; then
270
#                echo Suspect Link: $pkg
271
#            fi
272
#    
273
#            if [ ! -d $DPKG/$name ] ; then
274
#                echo Missing Link: $pkg
275
#            fi
276
#        done | sort >> $f3
277
 
278
        #
279
        #   Scan releases area for broken and funny links
280
        #
281
        echo "" >> $f3
282
        echo "Releases Link Report" >> $f3
283
        scan_release.pl $RELEASES >> $f3
284
 
285
    fi
3413 dpurdie 286
echo >> $f3 "</pre>"
3410 dpurdie 287
 
288
 
289
 
290
    #
291
    #   Mail results
292
    #
293
    if [ "$DO_MAIL" ] ; then
294
        [ $DO_VERBOSE ] && echo "Mailing Results"
295
        echo "Mailing results"
3413 dpurdie 296
        sendEmail.pl -q -f ${FROM} -t ${MAILTO} ${CCTO} -u "[dpkg_archive] $DATE Archive Report from $HOSTNAME" '-o' 'message-content-type=html' -o "message-file=$f3"
297
#        (
298
#            cat $f3
299
#        ) | mail_files.ksh -t ${MAILTO} ${CCTO} -s "[dpkg_archive] $DATE Archive Report from $HOSTNAME" #-b $f3
3410 dpurdie 300
    else
301
        cat $f3
302
    fi
303
 
304
else
305
    echo "Yesterdays package file not found"
306
    echo "Yesterday:  $YFILE"
307
    echo "Today    :  $PFILE"
308
fi
309
 
310
#
311
#   Clean up
312
#
313
rm -f /tmp/$$.file*
314
 
315
#
316
#   Remove old copies of files
317
#
318
$GFIND $OUTDIR -type f -mtime +100 -exec rm -f  {} \;
319
 
320