#!/bin/bash . /etc/sysconfig/autoport . /usr/share/autodist/webbuild-functions NUM=`echo "$QUERY_STRING" | sed -n 's/^.*NUM=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` HOST=`echo "$QUERY_STRING" | sed -n 's/^.*HOST=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` AS_HOST=`echo "$QUERY_STRING" | sed -n 's/^.*AS_HOST=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` SHOWLOG=`echo "$QUERY_STRING" | sed -n 's/^.*SHOWLOG=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` SHOWINDEX=`echo "$QUERY_STRING" | sed -n 's/^.*SHOWINDEX=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` LINES=`echo "$QUERY_STRING" | sed -n 's/^.*LINES=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` FORMAT=`echo "$QUERY_STRING" | sed -n 's/^.*FORMAT=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` [ ! "$FORMAT" ] && FORMAT=html [ "$LINES" ] || LINES=5 [ "$HOST" ] || HOST=0 [ "$AS_HOST" ] || AS_HOST=0 [ "$AS_HOST" -a "$HOST" != "0" ] && HOST_ADD="&HOST=$HOST" if [ "$AS_HOST" = "0" -a "$FORMAT" = "xml" ]; then echo -e "Content-type: text/xml\nPragma: no-cache\n" echo -n "$r(${AUTOPORT_ARCH[$i]}) " elif [ "${AUTOPORT_CHROOT[$i]}" ]; then echo "$r(${AUTOPORT_ARCH[$i]}) " elif [ "${AUTOPORT_NATIVE[$i]}" ]; then echo "$r(${AUTOPORT_ARCH[$i]}) " elif [ "${AUTOPORT_CROSS[$i]}" ]; then echo "$r(${AUTOPORT_CROSS[$i]};${AUTOPORT_ARCH[$i]}) " fi done done echo "
" exit 0 elif [ "$AS_HOST" = "0" ]; then echo "Show: [All hosts] [Build hosts monitor]
" for h in `seq 0 ${#AUTOPORT_CGI_HOST[*]}`; do curl "${AUTOPORT_CGI_HOST[$h]}?AS_HOST=$h&SHOWINDEX=1" 2>/dev/null done echo "
" fi [ ! "$SHOWLOG" -a "$HOST" = "$AS_HOST" ] && echo "

Host: `hostname -s` (`uname -m`, kernel `uname -r`)

" if [ "$SHOWLOG" -a "$HOST" != "$AS_HOST" ]; then curl "${AUTOPORT_CGI_HOST[$HOST]}?AS_HOST=$HOST&SHOWLOG=$SHOWLOG&NUM=$NUM&LOG=$LOG" 2>/dev/null else for i in `seq 0 ${#AUTOPORT_ARCH[*]}`; do if [ "$SHOWLOG" = "monitor" ]; then echo "

Build hosts monitor

" icecream-monitor localhost listcs | \ while read line; do [ "${line:0:8}" = "200 done" ] && printon= if [ "$printon" ]; then set -- $line case $2 in \(*) echo "$line
" ;; *) echo "$line
" ;; esac fi [ "${line:0:6}" = "listcs" ] && printon=1 done echo "
" RELOADTIME=15000 break fi for r in ${AUTOPORT_REPOSITORIES[$i]}; do [ "${AUTOPORT_ARCH[$i]}" ] || continue [ "${AUTOPORT_DISABLE[$i]}" -a "${AUTOPORT_DISABLE[$i]}" != "0" ] && continue if [ "${AUTOPORT_UPDATE[$i]}" ]; then LOGFILE="/var/autodist/log/autodist.log" LASTLOGFILE="/var/autodist/log/autodist-last.log" STATEFILE="/var/autodist/log/autoupdate-current" LASTSTATEFILE="/var/autodist/log/autoupdate-last" elif [ "${AUTOPORT_CHROOT[$i]}" ]; then LOGFILE="/var/autodist/log/autoport-chroot-$r-${AUTOPORT_CHROOT[$i]}.log" LASTLOGFILE="/var/autodist/log/autoport-chroot-$r-${AUTOPORT_CHROOT[$i]}-last.log" AUTODISTLOGFILE="/var/autoport/${AUTOPORT_CHROOT[$i]}/home/${AUTOPORT_CHROOT_USER[$i]}/.autoport/${AUTOPORT_ARCH[$i]}/$r-current.log" AUTODISTSTATEFILE="/var/autoport/${AUTOPORT_CHROOT[$i]}/var/autodist/autoport-$r-current" elif [ "${AUTOPORT_NATIVE[$i]}" ]; then LOGFILE="/var/autodist/log/autoport-native-$r-${AUTOPORT_ARCH[$i]}.log" LASTLOGFILE="/var/autodist/log/autoport-native-$r-${AUTOPORT_ARCH[$i]}-last.log" AUTODISTLOGFILE="/var/autodist/.autoport/${AUTOPORT_ARCH[$i]}/$r-current.log" AUTODISTSTATEFILE="/var/autodist/log/autoport-$r-current" elif [ "${AUTOPORT_CROSS[$i]}" ]; then LOGFILE="/var/autodist/log/autoport-cross-$r-${AUTOPORT_CROSS[$i]}.log" LASTLOGFILE="/var/autodist/log/autoport-cross-$r-${AUTOPORT_CROSS[$i]}-last.log" else continue fi if [ "$SHOWLOG" ]; then if [ "$HOST" = "$AS_HOST" -a "$NUM" = "$i" ]; then echo -n "

$SHOWLOG log in " if [ "${AUTOPORT_UPDATE[$i]}" ]; then echo -n "update" elif [ "${AUTOPORT_CHROOT[$i]}" ]; then echo -n "${AUTOPORT_CHROOT[i]} chroot" elif [ "${AUTOPORT_NATIVE[$i]}" ]; then echo -n "native" elif [ "${AUTOPORT_CROSS[$i]}" ]; then echo -n "cross" fi echo " environment for ${AUTOPORT_ARCH[$i]}" [ "${SHOWLOG}" = "current" -o "${SHOWLOG}" = "last" -a ! "${AUTOPORT_UPDATE[$i]}" ] && echo -n " ($r)" echo -n ":

" cat << _EOF
_EOF echo -n "
"
         if [ "$SHOWLOG" = "current" ]; then
            RELOADTIME=3600000
            cat $LOGFILE | parse_build_output
#            sed "s|<|\<|g;s|[[:cntrl:]]\[[0-9;]*m||g;
#                       s|^\([\+#] .*\)|\1|;
#                       s|\(.*error[[:space:]]*:.*\)|\1|i;
#                       s|^\(== =.*\)|\1|;
#                       s|^\([%?=][!=>] .*\)|\1|;"
         elif [ "$SHOWLOG" = "last" ]; then
            cat $LASTLOGFILE | parse_build_output
#            sed "s|<|\<|g;s|[[:cntrl:]]\[[0-9;]*m||g;
#                       s|^\([\+#] .*\)|\1|;
#                       s|\(.*error[[:space:]]*:.*\)|\1|i;
#                       s|^\(== =.*\)|\1|;
#                       s|^\([%?=][!=>] .*\)|\1|;"
         else
            # Security check
            [ "${SHOWLOG/\/\.}" != "${SHOWLOG}" ] && continue
            if [ "${AUTOPORT_CHROOT[$i]}" ]; then
               BUILDLOGDIR="/var/autoport/${AUTOPORT_CHROOT[$i]}/home/${AUTOPORT_CHROOT_USER[$i]}/.autodist/log/"
            elif [ "${AUTOPORT_NATIVE[$i]}" -o "${AUTOPORT_UPDATE[$i]}" ]; then
               BUILDLOGDIR="/var/autodist/log/"
            fi
            if [ "${SHOWLOG/\/ok\/}" != "${SHOWLOG}" -o "${SHOWLOG/\failed\/}" != "${SHOWLOG}" ]; then
               SHOWLOGPKG=${SHOWLOG/*\/}
               [ "${SHOWLOGPKG}" ] || continue
               echo ""
               for t in prepare update build install send; do
                  echo -n "" || echo ""
                  [ -e ${BUILDLOGDIR}${t}/failed/${SHOWLOGPKG} ] && echo -n "" || echo ""
                  echo ""
               done
               echo "
Last ${SHOWLOGPKG} logs:
$t:" [ -e ${BUILDLOGDIR}${t}/ok/${SHOWLOGPKG} ] && echo -n "OKFAILED
" fi [ -e ${BUILDLOGDIR}${SHOWLOG} ] && \ cat ${BUILDLOGDIR}${SHOWLOG} | parse_build_output # sed "s|<|\<|g;s|[[:cntrl:]]\[[0-9;]*m||g; # s|^\([\+#] .*\)|\1|; # s|\(.*error:.*\)|\1|i; # s|^\(== =.*\)|\1|; # s|^\([%?=][!=>] .*\)|\1|;" fi echo -n "
" echo -n "
" break fi [ "${AUTOPORT_UPDATE[$i]}" ] && break elif [ ! "$SHOWLOG" ]; then RELOADTIME=60000 [[ "$NUM" && "$NUM" != "$i" ]] && continue [[ "$HOST" = "$AS_HOST" ]] || continue if [ "${AUTOPORT_UPDATE[$i]}" ]; then echo "* $r(${AUTOPORT_ARCH[$i]}) (type:autodist update)" echo " [ log last ]" fi if [ "${AUTOPORT_CHROOT[$i]}" ]; then echo "* $r(${AUTOPORT_ARCH[$i]}) (type:chroot autoport chroot:${AUTOPORT_CHROOT[$i]})" echo " [ log last ]" fi if [ "${AUTOPORT_NATIVE[$i]}" ]; then echo "* $r(${AUTOPORT_ARCH[$i]}) (type:native autoport)" echo " [ log last ]" fi if [ "${AUTOPORT_CROSS[$i]}" ]; then echo "* cross-platform autoport (arch:${AUTOPORT_CROSS[$i]})" echo " [ last ]" fi cat << _EOF
_EOF echo "
"
      if [ "${AUTOPORT_UPDATE[$i]}" ]; then
         BUILDNOWIDX=0
         STARTTIME=`head $LOGFILE | grep "%% Autodist started" | sed "s|.* @ ||"`
         AUTODIST_PID=`head $LOGFILE | grep "%% Autodist started" | sed "s|.*PID \([0-9]*\) .*|\1|"`
         SCHEDULED=`head $LOGFILE | grep "%% autoupdate jobs:" | sed "s|.*autoupdate jobs: ||"`
         ENDTIME=`tail $LOGFILE | grep "%% All jobs done @" | sed "s|.*@ ||"`
         while read line; do
            set -- $line
            for c in `seq 0 ${#BUILDNOW[*]}`; do
               if [ "${BUILDNOW[c]}" = "$1" ]; then
                  BUILDNOWIDX=$c
                  break
               else
                  BUILDNOWIDX=$c
               fi
            done
            BUILDNOW[$BUILDNOWIDX]="$1"
            BUILDLOG[$BUILDNOWIDX]="${BUILDLOG[$BUILDNOWIDX]} `echo $4 | sed "s|.*autodist/log/||"`"
#            BUILDLOG[$BUILDNOWIDX]="${BUILDLOG[$BUILDNOWIDX]} $2/$3/$1.i586"
            BUILDNOWSTATUS[$BUILDNOWIDX]=
            BUILDNOWIDX=`expr $BUILDNOWIDX + 1`
         done < $STATEFILE
      elif [ -e $AUTODISTSTATEFILE ]; then
         BUILDNOWIDX=0
         STARTTIME=`head $LOGFILE | grep "^+ .*start at " | sed "s|.*start at ||"`
#         AUTODIST_PID=`head $LOGFILE | grep "%% Autodist started" | sed "s|.*PID \([0-9]*\) .*|\1|"`
         SCHEDULED=`head -n 40 $LOGFILE | grep -m 1 "^> .*Scheduled jobs: " | sed "s|.*Scheduled jobs: ||"`
         ENDTIME=`tail $LOGFILE | grep "^- .*end at " | sed "s|.*end at ||"`
         while read line; do
            set -- $line
            for c in `seq 0 ${#BUILDNOW[*]}`; do
               if [ "${BUILDNOW[c]}" = "$1" ]; then
                  BUILDNOWIDX=$c
                  break
               else
                  BUILDNOWIDX=$c
               fi
            done
            BUILDNOW[$BUILDNOWIDX]="$1"
            if [ "$2" = "port" ]; then
               CURRLOGFILE=build/$3/$1.${AUTOPORT_ARCH[$i]}
            else
               CURRLOGFILE=$2/$3/$1.${AUTOPORT_ARCH[$i]}
            fi
            BUILDLOG[$BUILDNOWIDX]="${BUILDLOG[$BUILDNOWIDX]} $CURRLOGFILE"
#            BUILDLOG[$BUILDNOWIDX]="${BUILDLOG[$BUILDNOWIDX]} $2/$3/$1.i586"
            BUILDNOWSTATUS[$BUILDNOWIDX]=
            BUILDNOWIDX=`expr $BUILDNOWIDX + 1`
         done < $AUTODISTSTATEFILE
      else
         unset STARTTIME ENDTIME BUILDNOW BUILDLOG AUTODISTON LASTLINE SCHEDULED
         while read line; do
            line=`echo $line | sed "s|.*\r||"`
            set -- $line
            case $1 in
               "%%" ) AUTODISTON=1 ;;
               "^"|"="*|""|"!"|"|"|"#"|"->") ;; #comment
               "+") [ "$STARTTIME" ] || STARTTIME=`echo $line | sed "s|.*start at ||"` ;;
               "-") ENDTIME=`echo $line | sed "s|.*end at ||"` ;;
               [A-Za-z0-9]*) ;;
               ">") [ "$SCHEDULED" ] || SCHEDULED=`echo $line | sed "s|.*Scheduled jobs: ||"` ;;
               *) [ ! "$AUTODISTON" ] && echo $line ;;
            esac
         done < $LOGFILE
         BUILDNOWIDX=1
         while read line; do
            line=`echo $line | sed "s|.*\r||"`
            set -- $line
            case $1 in
               "%%" ) if [ "$2" == "Doing" ]; then
                         if [ "$3" != "${BUILDNOW[$BUILDNOWIDX-1]}" ]; then
                            BUILDNOW[$BUILDNOWIDX]="$3"
                            BUILDLOG[$BUILDNOWIDX]=
                            BUILDNOWSTATUS[$BUILDNOWIDX]=
                            BUILDNOWIDX=`expr $BUILDNOWIDX + 1`
                         fi
                         JOBON=1
                      fi ;;
               "?=") if [ "$2" == "See" ]; then
                        BUILDLOG[$BUILDNOWIDX-1]="${BUILDLOG[$BUILDNOWIDX-1]} `echo $line | sed 's|.*autodist/log/||'`"
#                        BUILDLOG[$BUILDNOWIDX-1]=`echo $line | sed "s|.*autodist/log/||"`
                     fi ;;
               "=>") JOBON=1 ;;
               "%!"|"!!") BUILDNOWSTATUS[$BUILDNOWIDX-1]="$line"; JOBON= ;;
               "==") [ "${2:0:2}" == "==" ] && JOBON= ;;
               "Hunk"|"") ;;
               *) [ "$JOBON" ] || echo $line ;;
            esac
         done < $AUTODISTLOGFILE
         for p in `dirname $LOGFILE`/current.*; do
            CURRENT_FILE=`basename $p`
            AUTODIST_PID=${p/*.}
            [ -e /proc/$AUTODIST_PID ] && break
            AUTODIST_PID=
         done
         LASTLINE=$line
      fi
      echo "Start: $STARTTIME"
      echo "Scheduled jobs: $SCHEDULED"
      LASTJOBNAME=
      for b in `seq 0 ${#BUILDNOW[*]}`; do
#         set -- ${BUILDNOW[$b]}
         JOBNAME=${BUILDNOW[$b]}
         [ "$JOBNAME" ] || continue
         if [ "$JOBNAME" != "$LASTJOBNAME" ]; then
            [ "$LASTJOBNAME" -a "$JOBNAME" ] && echo ""
            echo -n "$JOBNAME: "
         fi
         rowcnt=0
         if [ "${BUILDLOG[$b]}" ]; then
            for l in ${BUILDLOG[$b]}; do
               SUBJOBNAME=`echo $l | sed "s|.*/${JOBNAME}_\(.*\)\..*|\1|"`
               [ "${SUBJOBNAME:0:1}" = "_" ] && SUBJOBNAME=$l
               [ "$SUBJOBNAME" = "$l" ] && SUBJOBNAME=`echo $l | sed "s|.*/\(.*\)\..*|\1|"`
               SUBJOBNAME=${SUBJOBNAME/__*}
               [ "${BUILDOPERATION[$b]}" ] && \
                  OPERATIONNAME=${BUILDOPERATION[$b]} || OPERATIONNAME=`echo $l | sed "s|\(.*\)/.*/.*|\1|"`
               [ "${BUILDOPERATIONSTATUS[$b]}" ] && \
                  OPERATIONSTATUS=${BUILDOPERATIONSTATUS[$b]} || OPERATIONSTATUS=`echo $l | sed "s|.*/\(.*\)/.*|\1|"`
#               if [ $rowcnt -ge 4 ]; then
#                  echo
#                  rowcnt=0
#               fi
               if [ "$OPERATIONNAME" = "send" -a "$OPERATIONSTATUS" = "ok" ]; then
                  echo -n "$OPERATIONNAME:$OPERATIONSTATUS"
               elif [ "$OPERATIONNAME" = "install" -a "$OPERATIONSTATUS" = "ok" ]; then
                  echo -n "$OPERATIONNAME:$OPERATIONSTATUS"
               elif [ "$OPERATIONSTATUS" = "ok" ]; then
                  echo -n "$OPERATIONNAME:$OPERATIONSTATUS"
               else
                  echo -n "$OPERATIONNAME:$OPERATIONSTATUS"
               fi
               [ "$SUBJOBNAME" != "$JOBNAME" ] && echo -en "($SUBJOBNAME)"
               echo -n " "
               rowcnt=`expr $rowcnt + 1`
            done
         fi
         [ "${BUILDNOWSTATUS[$b]}" ] && echo -n "(${BUILDNOWSTATUS[$b]})"
         LASTJOBNAME=$JOBNAME
      done
      [ "$LASTJOBNAME" ] && echo
      if [ "$LASTLINE" ]; then
         set -- $LASTLINE
         [ "$1" = "^" ] && echo "${2} ${3} ${4} ${5} ${6} ${7}"
      fi
      [ "$ENDTIME" ] && \
         echo "End: $ENDTIME" || \
         echo "End: in progress"
      echo
#      grep -v "^=" $LOGFILE | tail -n "$LINES" | sed "s|.*\r||"
#      echo
      echo "
" fi done done # only root host (0) calls other hosts if [ "$AS_HOST" = "0" -a ! "$SHOWLOG" ]; then for h in `seq 1 ${#AUTOPORT_CGI_HOST[*]}`; do if [ "$NUM" -a "$HOST" = "$h" ]; then curl "${AUTOPORT_CGI_HOST[$h]}?AS_HOST=$h&LINES=$LINES&NUM=$NUM&HOST=$HOST" 2>/dev/null elif [ ! "$NUM" ]; then curl "${AUTOPORT_CGI_HOST[$h]}?AS_HOST=$h&LINES=$LINES" 2>/dev/null fi done fi fi if [ "$AS_HOST" = "0" ]; then echo "

Generated by autodist CGI interface. Last update: `date`" if [ "$FORMAT" = "xml" ]; then echo -n "]]>" [ "$RELOADTIME" ] && echo -n "$RELOADTIME" echo "" fi fi