#!/bin/sh
#
# errors.sh [run_number]
#
# Script to display information on errors encountered on the most
# recent run or a previous run of the analysis.

# Shourov K. Chatterji
# shourov@ligo.caltech.edu

# $Id: errors.sh,v 1.6 2007/02/25 13:57:39 shourov Exp $

# change to analysis directory
cd `dirname $0`

# if analysis was run previously
if [ -f start.log ]; then
  echo "ERROR: Run the clean up script first." 1>&2
  exit 1
fi

# name of dag file
dagFile=`/bin/ls -1 *.dag [0-9]*/*.dag 2>/dev/null | \
         sed -e 's|^.*/||' | tail -1`

# test for dag file
if [ -z "${dagFile}" ]; then
  echo "ERROR: There is no dag file." 1>&2
  exit 1
fi

# determine previous run number
if [ $# -gt 0 ]; then
  previousRunNumber=$1
else
  previousRunNumber=`/bin/ls -1d [0-9]* 2>/dev/null | sort -g | tail -1`
fi

# name of rescue dag file
rescueDagFile="${previousRunNumber}/analysis.dag.rescue"

# test for rescue dag file
if [ ! -f "${rescueDagFile}" ]; then
  echo "The analysis completed without error." 1>&2
  exit 0
fi

# get list of failed segments
segments=`cat ${rescueDagFile} | grep JOB | grep -v DONE | awk ' { print $2 } '`

# begin loop over failed segments
for segment in ${segments}; do

  # report segment name
  echo "********************************************************************************"
  echo "                                ${segment}"
  echo "********************************************************************************"

  # report location of analysis
  echo "--------------------------------------------------------------------------------"
  echo "                                      locate"
  echo "--------------------------------------------------------------------------------"


  if [ -f ${previousRunNumber}/log/locate/locate_${segment}.txt ]; then
    cat ${previousRunNumber}/log/locate/locate_${segment}.txt
  else
    echo "ERROR: locate file does not exist"
  fi

  # report any standard output
  echo "--------------------------------------------------------------------------------"
  echo "                                      stdout"
  echo "--------------------------------------------------------------------------------"

  if [ -f ${previousRunNumber}/log/stdout/stdout_${segment}.txt ]; then
    cat ${previousRunNumber}/log/stdout/stdout_${segment}.txt
  else
    echo "ERROR: stdout file does not exist"
  fi

  # report any standard error
  echo "--------------------------------------------------------------------------------"
  echo "                                      stderr"
  echo "--------------------------------------------------------------------------------"

  if [ -f ${previousRunNumber}/log/stderr/stderr_${segment}.txt ]; then
    cat ${previousRunNumber}/log/stderr/stderr_${segment}.txt
  else
    echo "ERROR: stderr file doe not exist"
  fi

  # report any warnings or errors from status output
  echo "--------------------------------------------------------------------------------"
  echo "                                      status"
  echo "--------------------------------------------------------------------------------"

  if [ -f ${previousRunNumber}/log/status/status_${segment}.txt ]; then
    grep -i 'warning\|error' ${previousRunNumber}/log/status/status_${segment}.txt
  else
    echo "ERROR: status file does not exist"
  fi

# end loop over failed segments
done

