#!/bin/ksh # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/diag/cld_logfiles.sh 1.8 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 1990,2007 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/diag/cld_logfiles.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # COMPONENT_NAME: DIAG # # FUNCTIONS: none # # Name: cld_logfiles # # Description: Parses either the hacmp.out or cluster.log file # according to user input. Optionally saves output to file. # Returns: # 0 - Success # 1 - Failure # 2 - Wrong number of args # # Arguments: -t type ( of log input: hacmp.out, cluster.log ) # -h hostname ( of host to use ) # -s ( view event start/comletion) # -e ( view errors ) # -w ( view warnings ) # -f ( view failures/erros ) # -d ( # corresponding to how many days' worth of data to view ) # -r filename (to save output) # event ... ( list of event names for which to view ) # process ... ( list of processes for which to view ) # # # Environment: PATH # ############################################################################### intr_handler() { echo "Exiting." exit 1 } ############################################################################### # # Set trap statement to catch hangup, interrupt, and quit signals # ############################################################################### [ "$VERBOSE_LOGGING" = "high" ] && set -x PROGNAME=$(basename ${0}) PATH="$($(dirname ${0})/../utilities/cl_get_path all)" HA_DIR="$(cl_get_path)" trap intr_handler 1 2 3 STATUS=0 ############################################################################### # # Name: usage # # This routine displays the usage message and exits # # Arguments: none # Usage: usage # Returns: 1 - exit with error # Environment: # ############################################################################### usage1() { dspmsg scripts.cat 465 "usage: $PROGNAME scripts [-h host] [-s] [-f] [-d days] [-R file] [event ...]\n" $PROGNAME dspmsg scripts.cat 580 "Where: -h host is the name of a remote host from which to gather log data\n" dspmsg scripts.cat 581 " -s filters start/complete events\n" dspmsg scripts.cat 582 " -f filters failure events\n" dspmsg scripts.cat 583 " -d days defines the number of previous days from which to retrieve log\n" dspmsg scripts.cat 584 " -R file is file to which output is saved\n" dspmsg scripts.cat 585 " event is a list of cluster events\n" exit 1 } usage2() { dspmsg scripts.cat 466 "usage: $PROGNAME syslog [-h host] [-e] [-w] [-d days] [-R file] [process ...]\n" $PROGNAME dspmsg scripts.cat 586 "Where: -h host is the name of a remote host from which to gather log data\n" dspmsg scripts.cat 587 " -e filters error events\n" dspmsg scripts.cat 588 " -w filters warning events\n" dspmsg scripts.cat 589 " -d days defines the number of previous days from which to retrieve log\n" dspmsg scripts.cat 590 " -R file is file to which output is saved\n" dspmsg scripts.cat 591 " process is a list of cluster daemon processes\n" exit 1 } usage3() { dspmsg scripts.cat 575 "Invalid arguments\n" exit 1 } if [ "$#" -lt "2" ] then usage3 fi # Get command line options set -- `getopt "d:efh:R:st:T:w" $*` if [ $? -ne 0 ] then if [ "$2" = "scripts" ] then usage1 else usage2 fi fi # Parse command line. while [ $1 != -- ] do case $1 in -d) DAYS="$2" shift ; shift ;; -e) ERRORS="TRUE" shift ;; -f) FAILURES="TRUE" shift ;; -h) HOSTNAME="$2" shift ; shift ;; -R) FILE="$2" shift ; shift ;; -s) START="TRUE" shift ;; -t) TYPE="$2" shift ; shift ;; -w) WARNINGS="TRUE" shift ;; *) usage3 ;; esac done shift # lose the -- if [ "$TYPE" = "" ] then usage3 fi # Set defaults LOCALHOST=$(hostname) DAYS=${DAYS:-""} # default to "" ERRORS=${ERRORS:-"FALSE"} # default to FALSE FAILURES=${FAILURES:-"FALSE"} # default to FALSE HOSTNAME=${HOSTNAME:-"$LOCALHOST"} # default to localhost FILE=${FILE:-"/var/hacmp/log/cld_log.out"} # default logfile START=${START:-"FALSE"} # default to FALSE WARNINGS=${WARNINGS:-"FALSE"} # default to FALSE # Get syslog configuration file typeset SYSLOG_CONF="" SYSLOG_CONF=$(clgetsyslog) # Use default configuration file for any kind of failures if (( $? != 0 )) then SYSLOG_CONF="/etc/syslog.conf" fi # set log file pathnames SCRIPTS_HDR=`odmget -q"name=hacmp.out" HACMPlogs | grep value | cut -d'"' -f2` SCRIPTS_TAIL="hacmp.out" SCRIPTS="$SCRIPTS_HDR/$SCRIPTS_TAIL" SYSLOG=`awk '/user.notice/ { print $2 }' ${SYSLOG_CONF}` SYSLOG_TAIL="cluster.log" SYSLOG_HDR=${SYSLOG%/cluster.log} STRINGS="" DATE_STRINGS="" TEMPFILE="/tmp/cld_logfiles$$" # Create temporary file touch $TEMPFILE case $TYPE in "scripts") # Check for proper command line args if [ "$ERRORS" = "TRUE" -o "$WARNINGS" = "TRUE" ] then usage1 fi # Set up string keyword for which to search if [ "$FAILURES" = "TRUE" ] then if [ "$STRINGS" = "" ] then STRINGS="Fail|fail|FAIL" else STRINGS="$STRINGS|Fail|fail|FAIL" fi fi if [ "$START" = "TRUE" ] then if [ "$STRINGS" = "" ] then STRINGS="START|COMPLET" else STRINGS="$STRINGS|START|COMPLET" fi fi for event in $* do if [ "$STRINGS" = "" ] then STRINGS="$event" else STRINGS="$STRINGS|$event" fi done # Set up counter for hacmp.out.xxx if [ "$DAYS" = "" ] then DAYS=0 fi COUNT=`expr $DAYS` if [ $COUNT -gt 7 ] then dspmsg scripts.cat 467 "Limited to 7 days maximum with -d option.\n" COUNT=7 else if [ $COUNT -lt 0 ] then usage1 fi fi if [ "$LOCALHOST" = "$HOSTNAME" ] then while [ $COUNT -gt 0 ] do if [ -f $SCRIPTS.$COUNT ] then if [ "$STRINGS" = "" ] then echo $SCRIPTS.$COUNT >> $TEMPFILE cat $SCRIPTS.$COUNT >> $TEMPFILE else echo $SCRIPTS.$COUNT >> $TEMPFILE cat $SCRIPTS.$COUNT | egrep "$STRINGS" >> $TEMPFILE fi else dspmsg scripts.cat 468 "$PROGNAME: $SCRIPTS.$COUNT not found. Skipping.\n" $PROGNAME $SCRIPTS $COUNT fi COUNT=`expr $COUNT - 1` done if [ -f $SCRIPTS ] then if [ "$STRINGS" = "" ] then echo $SCRIPTS >> $TEMPFILE cat $SCRIPTS >> $TEMPFILE else echo $SCRIPTS >> $TEMPFILE cat $SCRIPTS | egrep "$STRINGS" >> $TEMPFILE fi else dspmsg scripts.cat 469 "$PROGNAME: $SCRIPTS not found. Skipping.\n" $PROGNAME $SCRIPTS fi cat $TEMPFILE | more else while [ $COUNT -gt 0 ] do FOUND="" FOUND=`cl_rsh $HOSTNAME find $SCRIPTS_HDR -name $SCRIPTS_TAIL.$COUNT -print` if [ "$FOUND" != "" ] then if [ "$STRINGS" = "" ] then echo $SCRIPTS.$COUNT >> $TEMPFILE cl_rsh $HOSTNAME cat $SCRIPTS.$COUNT >> $TEMPFILE else echo $SCRIPTS.$COUNT >> $TEMPFILE cl_rsh $HOSTNAME cat $SCRIPTS.$COUNT | egrep "$STRINGS" >> $TEMPFILE fi else dspmsg scripts.cat 468 "$PROGNAME: $SCRIPTS.$COUNT not found. Skipping.\n" $PROGNAME $SCRIPTS $COUNT fi COUNT=`expr $COUNT - 1` done FOUND="" FOUND=`cl_rsh $HOSTNAME find $SCRIPTS_HDR -name $SCRIPTS_TAIL -print` if [ "$FOUND" != "" ] then if [ "$STRINGS" = "" ] then echo $SCRIPTS >> $TEMPFILE cl_rsh $HOSTNAME cat $SCRIPTS >> $TEMPFILE else echo $SCRIPTS >> $TEMPFILE cl_rsh $HOSTNAME cat $SCRIPTS | egrep "$STRINGS" >> $TEMPFILE fi else dspmsg scripts.cat 469 "$PROGNAME: $SCRIPTS not found. Skipping.\n" $PROGNAME $SCRIPTS fi cat $TEMPFILE | more fi cp $TEMPFILE $FILE rm $TEMPFILE ;; "syslog") # Check for proper command line args if [ "$START" = "TRUE" -o "$FAILURES" = "TRUE" ] then usage2 fi # Set up string keyword for which to search if [ "$ERRORS" = "TRUE" ] then if [ "$STRINGS" = "" ] then STRINGS="Error|error|ERROR" else STRINGS="$STRINGS|Error|error|ERROR" fi fi if [ "$WARNINGS" = "TRUE" ] then if [ "$STRINGS" = "" ] then STRINGS="Warn|warn|WARN" else STRINGS="$STRINGS|Warn|warn|WARN" fi fi for process in $* do if [ "$STRINGS" = "" ] then STRINGS="$process" else STRINGS="$STRINGS|$process" fi done if [ "$DAYS" != "" ] then COUNT=`expr $DAYS` if [ $COUNT -gt 7 ] then dspmsg scripts.cat 467 "Limited to 7 days maximum with -d option.\n" COUNT=7 else if [ $COUNT -lt 0 ] then usage2 fi fi # # if user entered -d 0, we don't want to go thru the until loop once and # generate the current date in the DATE_STRINGS. Otherwise, -d 0 will # only get data from the current date and not using ALL data in the file # as documented. # if [ $COUNT -gt 0 ] then until [ $COUNT -lt 0 ] do WHOLE_DATE=$(cld_getdate -d$COUNT) DATE=$(echo "$WHOLE_DATE" | cut -c 5-10) if [ "$DATE_STRINGS" = "" ] then DATE_STRINGS="($DATE)" else DATE_STRINGS="$DATE_STRINGS|($DATE)" fi COUNT=`expr $COUNT - 1` done fi fi if [ "$LOCALHOST" = "$HOSTNAME" ] then if [ -f $SYSLOG ] then if [ "$STRINGS" = "" ] then if [ "$DATE_STRINGS" = "" ] then cat $SYSLOG >> $TEMPFILE cat $TEMPFILE | more else cat $SYSLOG | egrep "$DATE_STRINGS" >> $TEMPFILE cat $TEMPFILE | more fi else if [ "$DATE_STRINGS" = "" ] then cat $SYSLOG | egrep "$STRINGS" >> $TEMPFILE cat $TEMPFILE | more else cat $SYSLOG | egrep "$STRINGS" | egrep "$DATE_STRINGS" >> $TEMPFILE cat $TEMPFILE | more fi fi else dspmsg scripts.cat 470 "$PROGNAME: $SYSLOG not found.\n" $PROGNAME $SYSLOG fi else FOUND="" FOUND=`cl_rsh $HOSTNAME find $SYSLOG_HDR -name $SYSLOG_TAIL -print` if [ "$FOUND" != "" ] then if [ "$STRINGS" = "" ] then if [ "$DATE_STRINGS" = "" ] then cl_rsh $HOSTNAME cat $SYSLOG >> $TEMPFILE cat $TEMPFILE | more else cl_rsh $HOSTNAME cat $SYSLOG | egrep "$DATE_STRINGS" >> $TEMPFILE cat $TEMPFILE | more fi else if [ "$DATE_STRINGS" = "" ] then cl_rsh $HOSTNAME cat $SYSLOG | egrep "$STRINGS" >> $TEMPFILE cat $TEMPFILE | more else cl_rsh $HOSTNAME cat $SYSLOG | egrep "$STRINGS" | egrep "$DATE_STRINGS" >> $TEMPFILE cat $TEMPFILE | more fi fi else dspmsg scripts.cat 470 "$PROGNAME: $SYSLOG not found.\n" $PROGNAME $SYSLOG fi fi cp $TEMPFILE $FILE rm $TEMPFILE ;; *) usage3 ;; esac exit $STATUS