Subversion Repositories DevTools

Rev

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