]> git.decadent.org.uk Git - dak.git/blobdiff - config/debian/common
Add a timestamp to the cruft-report
[dak.git] / config / debian / common
old mode 100644 (file)
new mode 100755 (executable)
index 30237da..62ec9a1
@@ -3,35 +3,48 @@
 #
 # Set $PROGRAM to a string to have it added to the output.
 function log () {
-        local prefix=${PROGRAM:-}
-        echo "$(date +"%b %d %H:%M:%S") $(hostname -s) ${prefix}[$$]: $@"
+    local prefix=${PROGRAM:-}
+    echo "$(date +"%b %d %H:%M:%S") ${HOSTNAME} ${prefix}[$$]: $*"
 }
 
 # log the message using log() but then also send a mail
 # to the address configured in MAILTO (if non-empty)
 function log_error () {
-        log "$@"
-        if [ -z "${MAILTO}" ]; then
-                echo "$@" | mail -a "X-Debian: DAK" -e -s "[$PROGRAM@$(hostname -s)] ERROR [$$]" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" ${MAILTO}
-        fi
+    log "$@"
+    if [[ -z ${MAILTO} ]]; then
+        echo "$*" | mail -a "X-Debian: DAK" -e -s "[$PROGRAM@${HOSTNAME}] ERROR [$$]" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" ${MAILTO}
+    fi
 }
 
 # debug log, only output when DEBUG=1
 function debug () {
-    if [ $DEBUG -eq 1 ]; then
+    if [[ $DEBUG -eq 1 ]]; then
         log "$*"
     fi
 }
 
+# Get a tempfile, add it to the right variable to get rid of it,
+# and return it
+function gettempfile() {
+    local MAKEDIR=${1:-false}
+    local TMPARGS=""
+    if [[ ${MAKEDIR} == true ]]; then
+        TMPARGS="--directory"
+    fi
+    local TMPFILE=$( mktemp -p ${TMPDIR} ${TMPARGS} )
+    TMPFILES="${TEMPFILES} ${TMPFILE}"
+    echo "${TMPFILE}"
+}
+
 # Function that only cleans tempfiles, but does not exit or otherwise
 # care about any exit status
 function cleantempfiles() {
     resolvetmpfiles
     for TEMPFILE in $TMPFILES; do
-        if [ -n "${TEMPFILE}" ] && [ -f "${TEMPFILE}" ]; then
+        if [[ -n ${TEMPFILE} ]] && [[ -f ${TEMPFILE} ]]; then
             rm -f "${TEMPFILE}"
-        elif [ -n "${TEMPFILE}" ] && [ -d "${TEMPFILE}" ]; then
-            if [ "${TEMPFILE}" != "/" ] && [ "${TEMPFILE}" != "/*" ]; then
+        elif [[ -n ${TEMPFILE} ]] && [[ -d ${TEMPFILE} ]]; then
+            if [[ ${TEMPFILE} != / ]] && [[ ${TEMPFILE} != /* ]]; then
                 rm -rf "${TEMPFILE}"
             fi
         fi
@@ -59,11 +72,15 @@ function cleanup() {
 
     cleantempfiles
 
-    exit $ERRVAL
+    return $ERRVAL
 }
 TEMPFILES=${TEMPFILES:-""}
 TMPFILES=${TMPFILES:-""}
 
+# Timestamp. Used for dinstall stat graphs
+function ts() {
+    echo "Archive maintenance timestamp ($1): $(date +%H:%M:%S)"
+}
 
 ########################################################################
 ########################################################################
@@ -79,15 +96,17 @@ function wbtrigger() {
 # used by cron.dinstall *and* cron.unchecked.
 function make_buildd_dir () {
     # We generate straight into the static mirror location for incoming
+    log "Preparing buildd area"
     dak manage-build-queues -a
     dak generate-packages-sources2 -a build-queues
     dak generate-releases -a build-queues >/dev/null
 
     # Stick a last modified date in the page footer
-    echo "<p>Last updated: `date -u`</p>" > ${incoming}/web/README.html
+    echo "<p>Last updated: $(date -u)</p>" > ${incoming}/web/README.html
 
     # Tell the mirrors that we've updated
-    chronic /usr/local/bin/static-update-component incoming.debian.org
+    log "Pushing static for incoming.d.o"
+    chronic /usr/local/bin/static-update-component incoming.debian.org < /dev/null
 }
 
 # Process (oldstable)-proposed-updates "NEW" queue
@@ -114,17 +133,13 @@ function punew_do() {
 
 # These versions used in dinstall
 function punew() {
-    if [ "${PROGRAM}" = "dinstall" ]; then
-        log "Doing automated p-u-new processing"
-    fi
+    log "Doing automated p-u-new processing"
     cd "${queuedir}/p-u-new"
     punew_do "$1" "${queuedir}/p-u-new" "debian-release@lists.debian.org"
 }
 
 function opunew() {
-    if [ "${PROGRAM}" = "dinstall" ]; then
-        log "Doing automated o-p-u-new processing"
-    fi
+    log "Doing automated o-p-u-new processing"
     cd "${queuedir}/o-p-u-new"
     punew_do "$1" "${queuedir}/o-p-u-new" "debian-release@lists.debian.org"
 }
@@ -134,9 +149,7 @@ function backports_policy() {
     local qdir="/srv/backports-master.debian.org/queue/policy"
     local to="backports-team@debian.org"
 
-    if [ "${PROGRAM}" = "dinstall" ]; then
-        log "Doing automated ${queue} processing"
-    fi
+    log "Doing automated ${queue} processing"
 
     cd "${qdir}"
     punew_do "${queue}" "${qdir}" "${to}"
@@ -146,35 +159,41 @@ function backports_policy() {
 function do_unchecked () {
     cd $unchecked
 
-    changes=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.changes | sed -e "s,./,," | xargs)
-    report=$queuedir/REPORT
+    changes=$(find . -maxdepth 1 -mindepth 1 -type f \( -name \*.changes -o -name \*.dak-commands \) | sed -e "s,./,," | xargs)
+    report=${queuedir}/REPORT
     timestamp=$(date "+%Y-%m-%d %H:%M")
-    UNCHECKED_WITHOUT_LOCK=${UNCHECKED_WITHOUT_LOCK:-""}
 
-    echo "$timestamp": ${changes:-"Nothing to do"}  >> $report
-    dak process-upload -a ${UNCHECKED_WITHOUT_LOCK} -d "$unchecked" >> $report
-    dak process-commands -d "$unchecked" >> $report
+    if [[ ! -z ${changes} ]]; then
+        log "Processing files ${changes}"
+        {
+            echo "${timestamp}: ${changes}"
+            dak process-upload -a -d "$unchecked"
+            dak process-commands -d "$unchecked"
+        } >> ${report}
 
-    if [ ! -z "$changes" ]; then
         sync_debbugs
         do_buildd
+    else
+        log "Nothing to do"
+        echo "Nothing to do" >> ${report}
     fi
 }
 
 # process NEW policy queue
 function do_new () {
-    if [ "${PROGRAM}" = "dinstall" ]; then
-       log "Doing NEW processing"
-    fi
+    log "Doing NEW processing"
     (dak process-policy new; dak process-policy byhand) | mail -a "X-Debian: DAK" -e -s "NEW and BYHAND processing" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" ftpmaster@ftp-master.debian.org
 
+    log "Processing Backports NEW"
     dak process-policy backports-new | mail -a "X-Debian: DAK" -e -s "NEW processing for backports-new" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" backports-team@debian.org
 
+    log "Cleanup NEW/Backports NEW"
     dak clean-suites -a new,backports-new
 }
 
 function sync_debbugs () {
     # sync with debbugs
+    log "Sync debbugs version tracking information"
     echo "--" >> $report
     timestamp=$(date "+%Y-%m-%d-%H:%M")
     mkdir -p $queuedir/bts_version_track_archive/${timestamp}
@@ -184,12 +203,13 @@ function sync_debbugs () {
     NOW=$(date +%s)
     TSTAMP=$(stat -c %Y $lockdir/synced_bts_version)
     DIFF=$(( NOW - TSTAMP ))
-    if [ $DIFF -ge 259200 ]; then
-        log "Kids, you tried your best and you failed miserably. The lesson is, never try. (Homer Simpson)"
+    if [[ $DIFF -ge 259200 ]]; then
+        log_error "Kids, you tried your best and you failed miserably. The lesson is, never try. (Homer Simpson)"
     fi
 }
 
 function clean_debbugs () {
+    log "Cleanup debbugs"
     # Delete files older than 60 days
     find $queuedir/bts_version_track_archive/ -mtime +60 -type f -delete
     # Delete empty directories
@@ -203,9 +223,11 @@ function reports() {
     dak queue-report -d backports-new,backports-policy | mail -a "X-Debian: DAK" -e -s "NEW and POLICY on $(date +%D)" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" backports-team@debian.org
     # and one on crufty packages
     log "Sending information about crufty packages"
-    dak cruft-report -R > $webdir/cruft-report-daily.txt
-    dak cruft-report -R -s experimental >> $webdir/cruft-report-daily.txt
-    cat $webdir/cruft-report-daily.txt | mail -a "X-Debian: DAK" -e -s "Debian archive cruft report for $(date +%D)" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" ftpmaster@ftp-master.debian.org
+    dak cruft-report -R > $webdir/cruft-report-daily.txt.new
+    dak cruft-report -R -s experimental >> $webdir/cruft-report-daily.txt.new
+    echo "Page generated on $(date -u)" >> $webdir/cruft-report-daily.txt.new
+    mv $webdir/cruft-report-daily.txt.new $webdir/cruft-report-daily.txt
+    mail -a "X-Debian: DAK" -e -s "Debian archive cruft report for $(date +%D)" -a "From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>" ftpmaster@ftp-master.debian.org < $webdir/cruft-report-daily.txt
 }
 
 function pg_timestamp() {
@@ -218,7 +240,7 @@ function get_archiveroot() {
     local archivename="$1"
     local query="SELECT path FROM archive WHERE name='${archivename}'"
     local archiveroot="$(psql -tAc "${query}")"
-    if [ -z "${archiveroot}" ]; then
+    if [[ -z ${archiveroot} ]]; then
         echo "get_archiveroot: couldn't get archiveroot for '${archivename}'" >&2
         return 1
     fi
@@ -227,8 +249,8 @@ function get_archiveroot() {
 
 # Prepare the trees for buildds, then push wanna-build
 function do_buildd() {
-    if lockfile -r3 $NOTICE; then
-        TEMPFILES="${TEMPFILES} ${NOTICE}"
+    if lockfile -r3 ${LOCK_DAILY}; then
+        TMPFILES="${TMPFILES} ${LOCK_DAILY}"
         make_buildd_dir
         wbtrigger
     fi
@@ -246,8 +268,8 @@ function scancontents() {
 }
 
 function ddaccess() {
-    # Tell our dd accessible mirror to sync itself up. Including ftp dir.
-    log "Trigger dd accessible parts sync including ftp dir"
+    # Tell our dd accessible mirror to sync itself up.
+    log "Trigger dd accessible parts sync"
     ${scriptsdir}/sync-dd dd-sync dd-sync1 dd-sync2 sync
 }
 
@@ -283,13 +305,13 @@ function stage() {
     ARGS=${ARGS:-""}
 
     log "########## ${PROGRAM} BEGIN: ${FUNC} ${ARGS} ##########"
-    local STAGEFILE="${stagedir}/${FUNC}_${ARGS}"
+    local STAGEFILE="${stagedir}/${FUNC}${ARGS:+_}${ARGS}"
     STAGEFILE=${STAGEFILE// /_}
-    if [ -f "${STAGEFILE}" ]; then
+    if [[ -f ${STAGEFILE} ]]; then
         local stamptime=$(/usr/bin/stat -c %Z "${STAGEFILE}")
         local unixtime=$(date +%s)
-        local difference=$(( $unixtime - $stamptime ))
-        if [ ${difference} -ge 14400 ]; then
+        local difference=$(( unixtime - stamptime ))
+        if [[ ${difference} -ge 14400 ]]; then
             log_error "Did already run ${FUNC}, stagefile exists, but that was ${difference} seconds ago. Please check."
         else
             log "Did already run ${FUNC}, not calling again..."
@@ -309,13 +331,13 @@ function stage() {
     # Short error mails ftw!
     exec >> "${STAGEFILE}.log" 2>&1
 
-    if [ -f "${LOCK_STOP}" ]; then
+    if [[ -f ${LOCK_STOP} ]]; then
         log "${LOCK_STOP} exists, exiting immediately"
         exit 42
     fi
 
     # Do we care about trouble in the function we call?
-    if [ "${error}" = "false" ]; then
+    if [[ ${error} == false ]]; then
         set +e
     fi
     ${FUNC} ${ARGS}
@@ -333,7 +355,7 @@ function stage() {
 
     touch "${STAGEFILE}"
 
-    if [ -n "${TIME}" ]; then
+    if [[ -n ${TIME} ]]; then
         ts "${TIME}"
     fi
 
@@ -342,12 +364,16 @@ function stage() {
 
     # Now we should make sure that we have a usable ${PROGRAM}.log, so
     # append the $STAGEFILE.log to it.
-    cat "${STAGEFILE}.log" >> "${LOGFILE}"
+    if [[ ${TIMESTAMP} == true ]]; then
+        /usr/bin/ts "%b %d %H:%M:%S ${HOSTNAME} ${PROGRAM}[$$]: ${FUNC} " < "${STAGEFILE}.log"
+    else
+        cat "${STAGEFILE}.log"
+    fi
     rm -f "${STAGEFILE}.log"
 
     log "########## ${PROGRAM} END: ${FUNC} ##########"
 
-    if [ -f "${LOCK_STOP}" ]; then
+    if [[ -f ${LOCK_STOP} ]]; then
         log "${LOCK_STOP} exists, exiting immediately"
         exit 42
     fi