#!/bin/sh # $FreeBSD: ports/Tools/portbuild/scripts/dopackagestats,v 1.33 2010/08/16 23:59:32 linimon Exp $ # # create HTML showing numbers of packages vs errors. Run this in a directory # accessible to the web server. # pbc=${PORTBUILD_CHECKOUT:-/a/portbuild} pbd=${PORTBUILD_DATA:-/a/portbuild} . ${pbc}/admin/conf/admin.conf . ${pbc}/conf/server.conf here=`pwd` tmp=`basename $0 | sed -e "s/^do//"`".html" OUTFILE="${here}/${tmp}" TMPFILE="${here}/.${tmp}" #journalname="make" journalname="journal" # stylesheet seems like overkill for something this simple TABLEBGCOLOR="#F0F0F0" THCOLOR="#E0E0FF" TDCOLOR_DONE="lightgreen" TDCOLOR_NOT_DONE="lightyellow" # subroutines write_header () { echo "" > ${TMPFILE} echo "" >> ${TMPFILE} echo "FreeBSD package building statistics" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "

FreeBSD package building statistics

" >> ${TMPFILE} echo "

as of `date`

" >> ${TMPFILE} } write_table_begin () { echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} # MCL removed 20090808 -- this takes way too long # echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} } write_row () { # first, gather data arch=$1 build=$2 directory=${pbd}/${arch}/${build}/builds/latest journal=${directory}/${journalname} branch=`echo $build | awk -F '-' '{print $1}'` if [ "$branch" = "4" ]; then indexfile=$directory/ports/INDEX else indexfile=$directory/ports/INDEX-$branch fi # work around the fact that 5-exp is really 6-exp-prime if [ ! -f $indexfile ]; then if [ -d $directory/ports ]; then indexfile=$directory/ports/`cd $directory/ports 2> /dev/null && ls INDEX* 2> /dev/null | head -1` else # work around the fact that 4 is EOL and thus has no ports/ directory indexfile=$directory/logs/`cd $directory/logs 2> /dev/null && ls INDEX* 2> /dev/null | head -1` fi fi # column: date of ports update have_updated="" updated="" if [ -f $directory/ports/.updated ]; then updated="$(cat $directory/ports/.updated | awk '{printf("%s %s\n",$2,$3)}')" if [ ! -z "$updated" ]; then have_updated="yes" fi fi # column: datestamp and URL of latest log have_latest="" latest="" # MCL removed 20090808 -- this takes way too long # if [ -d $directory/logs ]; then # latest_suffix="$(cd $directory/logs 2> /dev/null && ls -rtTl | grep '\.log' | tail -1 | awk '{printf("%s\">%s %s\n",$10,$6,$7)}')" # if [ -z "$latest_suffix" ]; then # latest="" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} # MCL removed 20090808 -- this takes way too long # echo "" >> ${TMPFILE} # note: ports/INDEX-n is copied to a file called errorlogs/INDEX echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} } write_table_end () { echo "
 updatedlatest logINDEXbuild logspackageserrorsskippednot yet builtqueue lengthrunning?completed?
$arch-$build" >> ${TMPFILE} if [ ! -z "$have_updated" ]; then echo "" >> ${TMPFILE} echo "$updated" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} # if [ ! -z "$have_latest" ]; then # echo "$latest" >> ${TMPFILE} # else # echo " " >> ${TMPFILE} # fi # echo "" >> ${TMPFILE} if [ ! -z "$have_index" ]; then echo "" >> ${TMPFILE} echo "$n_index" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} if [ ! -z "$have_logs" ]; then echo "" >> ${TMPFILE} echo "$n_logs" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} if [ ! -z "$have_packages" ]; then echo "" >> ${TMPFILE} echo "$n_packages" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} if [ ! -z "$have_errors" ]; then echo "" >> ${TMPFILE} echo "$n_errors" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} if [ ! -z "$have_duds" ]; then echo "" >> ${TMPFILE} echo "$n_duds" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} if [ ! -z "$m_not_yet_built" ]; then echo "$n_not_yet_built" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "" >> ${TMPFILE} if [ ! -z "$queue_length" ]; then echo "$queue_length" >> ${TMPFILE} else echo " " >> ${TMPFILE} fi echo "$running_flag$completed_flag
" >> ${TMPFILE} echo "
" >> ${TMPFILE} } write_footer () { echo "

explanation of columns:

" >> ${TMPFILE} echo "" >> ${TMPFILE} # no longer true 20080917 # echo "

notes:

" >> ${TMPFILE} # echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} echo "" >> ${TMPFILE} } # main write_header # display all the mainstream builds first # (i.e. where build = branch, e.g. "7", "10") for arch in ${SUPPORTED_ARCHS}; do builds=`cd ${pbd}/${arch} 2> /dev/null && \ ls 2> /dev/null | \ grep "${SRC_BRANCHES_PATTERN}$" | \ sort -n` if [ ! -z "$builds" ]; then write_table_begin for build in ${builds}; do write_row ${arch} ${build} done write_table_end fi done # then display all the non-mainstream builds (probably only of interest # to administrative types; would break up the logical flow of the above) # examples: 8.1; 8-exp; 8-exp-gettext; 8.1R for arch in ${SUPPORTED_ARCHS}; do branches=`cd ${pbd}/${arch} 2> /dev/null && \ ls 2> /dev/null | \ grep "${SRC_BRANCHES_PATTERN}[-\.]" | \ sed -e "s@[-\.].*@@" | \ uniq | \ sort -n` if [ ! -z "$branches" ]; then for branch in $branches; do builds=`cd ${pbd}/${arch} 2> /dev/null && \ ls -d $branch* 2> /dev/null | \ grep -v "${SRC_BRANCHES_PATTERN}$" | \ sort` if [ ! -z "$builds" ]; then write_table_begin for build in ${builds}; do write_row ${arch} ${build} done write_table_end fi done fi done write_footer mv -f ${TMPFILE} ${OUTFILE}