ADSM-L

Re: Search Activity Log

1999-11-24 13:38:43
Subject: Re: Search Activity Log
From: Bart Colbert <Bart.Colbert AT RAYONIER DOT COM>
Date: Wed, 24 Nov 1999 13:38:43 -0500
Not sure how much this will help but here is some things I have done for
reading the actlog on AIX.

     Thanks,

     Bart Colbert
     UNIX Sys Admin
     Rayonier, Inc.
     Bart.Colbert AT rayonier DOT com

     --------------8<----SNIP----->8---------------

#!/bin/ksh
# Korn Shell Script
# SortADSMActlog: Sort the output file from ADSM QUERY ACTLOG
# dsmadmc -id=xxxxx -passwd=xxxxx q actlog begdate= enddate= begintime=
endtime=
#
# Written By: Bart G. Colbert 06/1999
#
VERSION="1.1"
#
# Revisions:
#
# 11/18/1999 Bart G. Colbert V1.1
# *) -Added menu option for NO ADMIN/ADSM_OPER/DEV
#
#
# INIT VARS
#
ANSWER=""
BEGINDATE=`date +"%m/%d/%Y"`
BEGINTIME=00:00
ENDTIME=`date +"%H:%M"`
FLBEGDATE=""
FLBEGTIME=""
FLENDDATE=""
FLENDTIME=""
SEARCHBEGDATE=""
SEARCHENDDATE=""
SEARCHBEGTIME=""
SEARCHENDTIME=""

#
# FUNCTION LAYOUT
#
# *) display_menu_title()
# *) display_menu_text()
# *) display_current_settings()
# *) change_beginning_date()
# *) change_beginning_time()
# *) change_ending_date()
# *) change_ending_time()
# *) view_current_query_data_raw()
# *) view_current_query_data_clean()
# *) process_the_query()
# *) remove_current_query_file()
# *) format_date_time_for_filename()
#

# MUST BE 40 CHARACTERS WHEN SET
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="           Sort ADSM Actlog             "
#
# DISPLAY MENU TITLE
#
display_menu_title()
        {
        echo
"..........................................................................
..."
        echo ". - RAYONIER -      $MENUTITLENAME V $VERSION          ."
        echo
"..........................................................................
..."
        }

#
# DISPLAY THE MENU TEXT
#
display_menu_text()
        {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="           Sort ADSM Actlog             "
        display_menu_title
     display_current_settings
        echo ". Options    :
."
        echo ".         1) : Change the beginning date
."
     echo ".         2) : Change the beginning time
."
     echo ".         3) : Change the ending date
."
     echo ".         4) : Change the ending time
."
     echo ".         9) : Process the query using current settings
."
     echo ".            :
."
     echo ".        10) : View latest Query RAW File
."
     echo ".        11) : View Query CLEAN File  (Use current settings)
."
     echo ".        12) : View Query CLEAN excluding ADMIN/ADSM_OPER
."
     echo ".        13) : View Query CLEAN excluding ADMIN/ADSM_OPER/dev
."
     echo ".        15) : View Query CLEAN include only /dev info
."
     echo ".            :
."
     echo ".        30) : List all the existing CLEANED files
."
     echo ".        31) : Remove the current query file
."
     echo ".            :
."
        echo ".        99) : Exit
."
     echo
"..........................................................................
..."
     }


#
#  DISPLAY CURRENT SETTINGS FUNCTION
#
display_current_settings()
{
     echo ". Current    : begdate=$BEGINDATE     enddate=$ENDDATE
."
     echo ". Settings   : begintime=$BEGINTIME        endtime=$ENDTIME
."
     echo
"..........................................................................
..."
}

#
# CHANGE BEGINNING DATE
#
change_beginning_date()
        {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="     Change Current Beginning Date      "
        display_menu_title
     display_current_settings
     echo ". FORMAT     : USE MM/DD/YYYY OR THIS COMMAND WILL FAIL.
."
     echo
"..........................................................................
..."
        echo "."
        echo "."
        echo "[ENTER THE DATE BELOW]"
        read ANSWER?"-> "
     BEGINDATE=$ANSWER
        }


#
# CHANGE BEGINNING TIME
#
change_beginning_time()
        {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="     Change Current Beginning Time      "
        display_menu_title
     display_current_settings
     echo ". FORMAT     : USE HH:MM OR THIS COMMAND WILL FAIL.
."
     echo
"..........................................................................
..."
        echo "."
        echo "."
        echo "[ENTER THE TIME BELOW]"
        read ANSWER?"-> "
     BEGINTIME=$ANSWER
        }


#
# CHANGE ENDING DATE
#
change_ending_date()
        {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="      Change Current ending Date        "
        display_menu_title
     display_current_settings
     echo ". FORMAT     : USE MM/DD/YYYY OR THIS COMMAND WILL FAIL.
."
     echo
"..........................................................................
..."
        echo "."
        echo "."
        echo "[ENTER THE DATE BELOW]"
        read ANSWER?"-> "
     ENDDATE=$ANSWER
        }


#
# CHANGE ENDING TIME
#
change_ending_time()
        {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="      Change Current ending Time        "
        display_menu_title
     display_current_settings
     echo ". FORMAT     : USE HH:MM OR THIS COMMAND WILL FAIL.
."
     echo
"..........................................................................
..."
        echo "."
        echo "."
        echo "[ENTER THE TIME BELOW]"
        read ANSWER?"-> "
     ENDTIME=$ANSWER
        }

#
# VIEW THE CURRENT QUERY DATA FILE IN RAW MODE
#
view_current_query_data_raw()
        {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="    View the Current Query Data RAW     "
        display_menu_title
     display_current_settings
     pg CurrentADSMActlog.Query.Data
        }

#
# VIEW THE CURRENT QUERY DATA FILE IN CLEAN MODE
#
view_current_query_data_clean()
        {
     format_date_time_for_filename
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="   View the Current Query Data CLEAN    "
        display_menu_title
     display_current_settings
     if [ -f ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME ];
then
          {
     pg ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME
     else
          {
          echo "."
          echo "."
          echo ". ERROR:"
          echo ". There is not a CLEAN file for the current settings."
          echo ". If you would like to create one select process query."
          pause
          }
     fi
        }


#
# VIEW THE CURRENT QUERY DATA FILE IN CLEAN MODE ADMIN/ADSM_OPER
#
view_current_query_data_clean_NO_ADMIN_OPER()
        {
     format_date_time_for_filename
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="  View the Current CLEAN NO ADMIN/OPER  "
        display_menu_title
     display_current_settings
     if [ -f ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME ];
then
          {
     grep -v ADMIN ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME \
| grep -v ADSM_OPER | grep -v "Unknown command" | pg
          }
     else
          {
          echo "."
          echo "."
          echo ". ERROR:"
          echo ". There is not a CLEAN file for the current settings."
          echo ". If you would like to create one select process query."
          pause
          }
     fi
        }


#
# VIEW THE CURRENT QUERY DATA FILE IN CLEAN MODE ADMIN/ADSM_OPER
#
view_current_query_data_clean_NO_ADMIN_OPER_DEV()
        {
     format_date_time_for_filename
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="View the Current CLEAN NO ADMIN/OPER/DEV"
        display_menu_title
     display_current_settings
     if [ -f ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME ];
then
          {
     grep -v ADMIN ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME \
| egrep -v "ADSM_OPER|/dev" | grep -v "Unknown command" | pg
          }
     else
          {
          echo "."
          echo "."
          echo ". ERROR:"
          echo ". There is not a CLEAN file for the current settings."
          echo ". If you would like to create one select process query."
          pause
          }
     fi
        }


#
# VIEW THE CURRENT QUERY DATA FILE IN CLEAN MODE /dev ONLY
#
view_current_query_data_clean_dev_ONLY()
        {
     format_date_time_for_filename
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="    View the Current CLEAN /dev ONLY    "
        display_menu_title
     display_current_settings
     if [ -f ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME ];
then
          {
          grep  '/dev'
ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME
          }
     else
          {
          echo "."
          echo "."
          echo ". ERROR:"
          echo ". There is not a CLEAN file for the current settings."
          echo ". If you would like to create one select process query."
          pause
          }
     fi
        }

#
# LIST CLEANED FILES
#
list_existing_cleaned_files()
     {
        clear
#              123456789-123456789-123456789-1234567890
MENUTITLENAME="       List existing CLEAN files        "
        display_menu_title
     display_current_settings
     echo "."
     echo "."
     echo "FILE FORMAT"
     echo "ADSMActlog.FromDate.ToDate"
     echo "ADSMActlog.MODDYYYYHHMI.MODDYYYYHHMI"
     echo "."
     echo "."
     ls ADSMActlog.????????????.???????????? | pg
     }




#
# PROCESS THE QUERY
#
process_the_query()
     {
     format_date_time_for_filename
     echo "."
     echo "."
     echo "PLEASE WAIT WHILE ADSM IS SENDING QUERY DATA"
     dsmadmc -id=xxxx -password=xxxx "q actlog begindate=$BEGINDATE enddate
=$ENDDATE \
     begintime=$BEGINTIME endtime=$ENDTIME" >./CurrentADSMActlog.Query.Data
     echo "."
     echo "."
     echo "CURRENT QUERY DATA RECEIVED"
     echo "."
     echo "."
     echo "PLEASE WAIT WHILE REFORMATTING QUERY DATA"
     CleanADSMActlog ./CurrentADSMActlog.Query.Data
>ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME

#
# REMOVE THE CURRENT QUERY FILE
#
remove_current_query_file()
     {
     echo "."
     echo "."
     read ANSWER?"Would you like to delete the current query file? (Y/N)"
     echo $ANSWER
     case ${ANSWER} in
          y|Y)
          format_date_time_for_filename
          rm ADSMActlog.$FLBEGDATE$FLBEGTIME.$FLENDDATE$FLENDTIME
;;
          n|N) echo "CONTINUE"
          ;;
     esac
     }


#
# PAUSE SCREEN
#
pause()
        {
        echo "."
        echo "."
        read ANSWER?"<ENTER TO CONTINUE>"
        }

#
# FORMAT DATE TIME FOR FILENAME
#
format_date_time_for_filename()
     {
     FLBEGDATE=`echo $BEGINDATE | tr -d '/'`
     FLENDDATE=`echo $ENDDATE | tr -d '/'`
     FLBEGTIME=`echo $BEGINTIME | tr -d ':'`
     FLENDTIME=`echo $ENDTIME | tr -d ':'`
     }


#
# DO WHILE FOR MENU OPTIONS
#
while [[ $MENUOPTION != 99 ]]; do
        display_menu_text
        read MENUOPTION?"[SELECT OPTION] -> "
        case ${MENUOPTION} in
          1) change_beginning_date
                ;;
          2) change_beginning_time
                ;;
          3) change_ending_date
                ;;
          4) change_ending_time
                ;;
          9) process_the_query
          ;;
          10) view_current_query_data_raw
          ;;
          11) view_current_query_data_clean
          ;;
          12) view_current_query_data_clean_NO_ADMIN_OPER
          ;;
          13) view_current_query_data_clean_NO_ADMIN_OPER_DEV
          ;;
          15) view_current_query_data_clean_dev_ONLY
          ;;
          30) list_existing_cleaned_files
          ;;
          31) remove_current_query_file
          ;;
                99) exit
                ;;
        esac
done

read ANSWER?"Would you like to delete the current query file? (Y/N)"
if [ $ANSWER -eq "Y" ];
     then
     echo "YES"
fi


     -----------8<----SNIP---->8-------------

/*************************************************************
** CleanADSMActlog.c: CleanThe ADSM Actlog output file      **
** Written By: Bart G. Colbert ANSI C 06/1999 V1.0          **
** Revisions:                                               **
** 11/18/1999 Bart G. Colbert V1.1                          **
** *) -Update to comments                                   **
*************************************************************/

/*
 * RESOURCE CONTROL SYSTEM INFO
 */
static char _rcs_id[] = "@ 06/1999 CleanADSMActlog, Bart G. Colbert\n";
static char _rcs_version[] = "1.1";

/*
 * INCLUDE STANDARD PREPROCESSOR HEADER FILES
 */
#include <stdio.h>

/*
 * DEFINE ANY GLOBAL CONSTANTS
 */
#define MAXLN 1024

/*
 * DEFINE ANY GLOBAL STRUCTS
 */

/*
 * INIT ANY GLOBAL VARS
 */
char *AppendString;
char *CleanString;
char lnbuff1[MAXLN];
*infp, *outfp;
int ch, loop, StringLength;
unsigned TRUEFALSE = 0;

/*
 * DECLARE ANSI STANDARD FUNCTION DEFINITIONS
 */
int main ( int argc, char *argv[] );
void command_line_help( char * );
unsigned strNstr ( char *SearchString, char *SearchSubString );
char *ShiftLeftString ( int ShiftVal, char *ShiftString );
char *RemoveTrailingSpaces ( int SpacesToLeave, char *CleanUpString );

/*********************************
 * BEGIN MAIN FUNCTION
 *********************************/
int main ( int argc, char *argv[] )
{

/*
 * BEGIN IF argc LT OR EQ ONE
 */
if ( argc <= 1 ) {

     /*
      * DO COMMAND HELP
      */
     command_line_help( argv[0] );

     /*
      * EXIT PROGRAM
      */
     exit ( 0 );

/*
 * END IF argc LT OR EQ  ONE
 */
}


/*
 * BEGIN FILE OPEN CHECK
 */
if ( (infp = fopen ( argv[1], "r" )) == NULL ) {
     perror ( "ERROR" );
     exit (1);
/*
 * END FILE OPEN CHECK
 */
}


/*
 * DO WHILE LOOP THROUGH FILE UNTIL FIRST CH EQ DASH
 */
do
{
     /*
      * GET A LINE FROM A FILE
      */
     fgets ( lnbuff1, MAXLN, infp );
}while ( lnbuff1[0] != '-' );


/*
 * GIVE OutputString SOME VAL
 */
strcpy ( OutputString, "\n" );


/*
 * BEGIN DO WHILE LOOP THROUGH FILE AND FORMAT DATA
 */
do
{
     /*
      * GET A LINE
      */
     fgets ( lnbuff1, MAXLN, infp );

     /*
      * BEGIN CHECK FOR DATE SLASH TRUE
      */
     if ( lnbuff1[2] == '/' ) {

          /*
           * PRINT THE STRING TO STDIO
           */

          printf ( "%s", OutputString );

          /*
           * BEGIN STRING WITH LF
           */
          strcpy ( OutputString, "\n" );

          /*
           * GET RID OF SPACES
           */
          AppendString = RemoveTrailingSpaces ( 1, lnbuff1 );

          /*
           * CONCATENATE TO OutputString
           */
          strcat ( OutputString, AppendString );

          /*
           * GET STRING LENGTH
           */
          StringLength = strlen ( OutputString );

     /*
      * END CHECK FOR DATE SLASH TRUE
      */
     }

     /*
      * BEGIN CHECK FOR DATE SLASH FALSE
      */
     if ( lnbuff1[2] != '/' ) {

          /*
           * GET STRING LENGTH
           */
          StringLength = strlen ( lnbuff1 );

          /*
           * BEGIN LOOP UNTIL NO SPACE
           */
          for ( loop=0; loop<StringLength; loop++ ) {

               /*
                * BEGIN IF NOT SPACE BREAK
                */
               if ( lnbuff1[loop] != 32 ) {

                    break;

               /*
                * END IF NOT SPACE BREAK
                */
               }

          /*
           * END LOOP UNTIL NO SPACE
           */
          }

     /*
      * CALL FUNC TO REMOVE SPACES
      */
     CleanString = ShiftLeftString ( loop, lnbuff1 );

     /*
      * CONCATENATE CLEANED UP STRING TO OutputString
      */
     strcat ( OutputString, CleanString );

     /*
      * REMOVE TRAILING SPACES FROM OutputString
      */
     AppendString = RemoveTrailingSpaces ( 1, OutputString );

     /*
      * OVERWRITE OutputString
      */
     strcpy ( OutputString, AppendString );

     /*
      * END CHECK FOR DATE SLASH FALSE
      */
     }

/*
 * END DO WHILE LOOP THROUGH FILE AND FORMAT DATA
 */
}while ( !(feof( infp )) );


/*
 * CLOSE ANY OPEN FILES
 */
fclose ( infp );

/*******************
 * END MAIN FUNCTION
 ******************/
}


/**********************************
 * BEGIN command_line_help FUNCTION
 *********************************/
void command_line_help( char *appname )
{

printf ( "SYNTAX: %s FILENAME\n", appname );

/********************************
 * END command_line_help FUNCTION
 *******************************/
}


/************************
 * BEGIN strNstr FUNCTION
 ************************/
unsigned strNstr ( char *SearchString, char *SearchSubString )
{

/*
 * INIT LOCAL VARS
 */
int SearchStringLength;
int SearchSubStringLength;
int SSLoopPtr;

/*
 * GET THE LENGTH OF THE STRING TO BE SEARCHED
 */
SearchStringLength = strlen ( SearchString );

/*
 * GET THE LENGTH OF THE SUBSTRING SEARCHING FOR
 */
SearchSubStringLength = strlen ( SearchSubString );

/*
 * BEGIN IF THE SEARCH STRING IS NOT AS BIG AS THE SUBSTRING FALSE
 */
if ( (int) SearchStringLength >= (int) SearchSubStringLength ) {

     /*
      * LOOP THE LENGTH OF SearchString
      */
     for ( SSLoopPtr=0; SSLoopPtr<SearchStringLength; SSLoopPtr++ ) {
     }

/*
 * END IF THE SEARCH STRING IS NOT AS BIG AS THE SUBSTRING FALSE
 */
}


else
{

/*
 * RETURN FALSE SUBSTRING IS BIGGER
 */
return ( 1 );

}

/**********************
 * END strNstr FUNCTION
 *********************/
}



/********************************
 * BEGIN ShiftLeftString FUNCTION
 *******************************/
char *ShiftLeftString ( int ShiftVal, char *ShiftString )
{

/*
 * INIT LOCAL VARS
 */
char WorkingShiftString[MAXLN];

/*
 * GET THE STRING LENGTH
 */
StringLength = strlen ( ShiftString );

/*
 * SHIFT CHARS TO THE LEFT ShiftVal
 */
for ( ShiftLoop=ShiftVal; ShiftLoop<StringLength; ShiftLoop++ ) {
     WorkingShiftString[ShiftLoop-ShiftVal] = ShiftString[ShiftLoop];
}

/*
 * TERMINATE NEW STRING NULL
 */
WorkingShiftString[ShiftLoop] = '\0';

/*
 * RETURN NEW STRING
 */
return ( WorkingShiftString );

/******************************
 * END ShiftLeftString FUNCTION
 *****************************/
}


/**************************************
 * BEGIN  RemoveTrailingSpaces FUNCTION
 *************************************/
char *RemoveTrailingSpaces ( int SpacesToLeave, char *CleanUpString )
{

/*
 * INIT LOCAL VARS
 */
char WorkingCleanupString[MAXLN];

/*
 * GET THE STRING LENGTH
 */
StringLength = strlen ( CleanUpString );

/*
 * IF THE NEXT TO LAST CH IS LF
 * REPLACE IT WITH NULL
 */
if ( CleanUpString[StringLength-1] == '\n' ) {
     CleanUpString[StringLength-1] = '\0';
     }

/*
 * START AT END OF STRING AND DEINCREMENT
 */
for ( CleanLoop=StringLength; CleanLoop!=0; CleanLoop-- ) {{

     /*
      * IF NOT SPACE BREAK
      */
     if ( CleanUpString[CleanLoop] != 32 ) {
          break;
          }
     }

/*
 * TERMINATE NEW STRING WITH NULL
 */
CleanUpString[CleanLoop+SpacesToLeave] = '\0';

/*
 * RETURN NEW STRING
 */
return ( CleanUpString );

/***********************************
 * END RemoveTrailingSpaces FUNCTION
 **********************************/
}



     ____________________Reply Separator____________________
     Subject:  Search Activity Log
     Author:   "ADSM: Dist Stor Manager" <ADSM-L AT VM.MARIST DOT EDU>
     Date:          11/24/99 1:20 PM




   I have an ADSM AIX 3.1.1.3 server.  I have coded scripts to
   perform various searches of the activity log to determine when
   processes complete and whether they are successful or not. The
   scripts I have written have been working quite well.

   I have recently installed another ADSM AIX server running
   level 3.1.2.1.  I have ported my scripts over to this new ADSM
   Server and I am having a problem searching the activity log.
   It seems that every command I issue on this server is logged
   to the ADSM activity log.

   More specifically I am searching the activity log, looping
   every 5 minutes, for a particular text string to determine if
   expire inventory has completed successfully.  The problem I
   have is that the command I issue to search the activity log is
   itself logged to the activity log in the form of an ANR2017I
   message.  The search therefore finds what it is looking for
   before the expire inventory process has completed.


   The command I am issuing for the search is:

   dsmadmc -id=admin -pa=xxxxx q act begintime=09:30
INVENTORY running in
   the BACKGROUND*completion state*SUCCESS\"


   The search of the activity log therefore finds:

   ANR2017I Administrator ADMIN issued command: QUERY ACTLOG
    begintime=09:30 search="ANR098*I Process 200 for EXPIRE
    INVENTORY running in the BACKGROUND *completion
    state*SUCCESS"


   Any ideas on how I can prevent my search string from getting
   logged to the activity log in the form of an ANR2017I message,
   or any other work around would be greatly appreciated.
<Prev in Thread] Current Thread [Next in Thread>