#!/bin/sh # Copyright © 2011-2013 Andreas Beckmann (anbe@debian.org) # Copyright © 2018-2019 Holger Levsen (holger@layer-acht.org) # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . @sharedir@/piuparts/lib/read_config.sh . @sharedir@/piuparts/lib/write_log.sh get_config_value MASTER global master-directory get_config_value SECTIONS global sections get_config_value HTDOCS global output-directory get_config_value URLBASE global urlbase https://piuparts.debian.org get_config_value PYTHONPATH global PYTHONPATH '' get_config_value TESTING global testing-suite export PYTHONPATH LOCKFILE=$HTDOCS/daily.lock if [ -e $LOCKFILE ]; then echo "daily.lock exists:" ls -l $LOCKFILE exit 1 fi date > $LOCKFILE R_STARTDATE=$(date -u +%s) R_LOGDATEDIR="$HTDOCS/logs/$(date -u '+%Y/%m/%d')" # # various scripts to detect issues and cleanup to be run right before we generate the daily report # (this code block contains cruft and could be refactored) # OUTPUT=$(mktemp) LOG_OUTPUT=$(mktemp) for SCRIPT in archive_old_logs ; do STARTDATE=$(date -u +%s) @sharedir@/piuparts/master/$SCRIPT 2>&1 > $OUTPUT FINALDATE=$(date -u +%s) if [ -s $OUTPUT ] ; then if grep -q "Runtime: " $OUTPUT ; then cat $OUTPUT > $LOG_OUTPUT else RUNTIME=$(date -u -d "0 $FINALDATE seconds - $STARTDATE seconds" +%T) ( echo "Runtime: $RUNTIME" ; echo ; cat $OUTPUT ) > $LOG_OUTPUT fi publish_logs $LOG_OUTPUT "" $HTDOCS $SCRIPT fi done rm $OUTPUT # # piuparts-report starts here # DAILYREPORT=$HTDOCS/dailyreport.txt >$DAILYREPORT # Failures of the day it should be, the rest is boring. FAILURESTAMP=$HTDOCS/last-failure-report.stamp test -f $FAILURESTAMP || touch -d @0 $FAILURESTAMP # start at the epoch touch $FAILURESTAMP.new # for the next report DAILYTMP=$(mktemp) for SECTION in $SECTIONS ; do test -d $MASTER/$SECTION || continue for DIRECTORY in fail bugged affected untestable ; do mkdir -p $MASTER/$SECTION/$DIRECTORY done find $MASTER/$SECTION/fail $MASTER/$SECTION/bugged $MASTER/$SECTION/affected $MASTER/$SECTION/untestable \ -type f -name '*.log' -newer $FAILURESTAMP -exec ls -1 {} + 2>/dev/null done | sed s#^$MASTER#$URLBASE# >> $DAILYTMP new_release_failures=$(cat $DAILYTMP | (egrep "/(sid|$TESTING|testing2sid)/" 2>/dev/null || echo) | wc -l) new_failures=$(cat $DAILYTMP | wc -l) new_failure_diff=$(( $new_failures - $new_release_failures )) echo -n "$new_failures new failures in total, " >> $DAILYREPORT echo "$new_release_failures new failures sid, $TESTING and testing2sid:" >> $DAILYREPORT # show failures (and show failures in sid, $TESTING and testing2sid first cat $DAILYTMP | (egrep "/(sid|$TESTING|testing2sid)/" 2>/dev/null || true) >> $DAILYREPORT echo >> $DAILYREPORT echo "$new_failure_diff other new failures:" >> $DAILYREPORT cat $DAILYTMP | (egrep -v "/(sid|$TESTING|testing2sid)/" 2>/dev/null || true) >> $DAILYREPORT rm $DAILYTMP echo "" >> $DAILYREPORT date >> $DAILYREPORT echo "Expiring old .html files:" >> $DAILYREPORT find $HTDOCS -name '* *.html' -mtime +30 -ls -delete >> $DAILYREPORT expire=$(mktemp) find $HTDOCS -name '*.html' -mtime +30 | head -n 500 > $expire if [ -s $expire ]; then ls -ld $(cat $expire) >> $DAILYREPORT rm -f $(cat $expire) >> $DAILYREPORT fi rm $expire FINALDATE=$(date -u +%s) RUNTIME=$(date -u -d "0 $FINALDATE seconds - $R_STARTDATE seconds" +%T) ( echo "Runtime: $RUNTIME" echo echo $R_LOGDATEDIR ls -lt $R_LOGDATEDIR echo cat $DAILYREPORT ) | mail -s generate_daily_report $LOGNAME mv $DAILYREPORT $R_LOGDATEDIR mv $FAILURESTAMP.new $FAILURESTAMP rm -f $LOCKFILE