#!/bin/ksh93
#----------------------------------------------------------------------------
#  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
#
#----------------------------------------------------------------------------
# @(#)  7d4c34b 43haes/lib/ksh93/availability/cl_amlib.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM

#----------------------------------------------------------------------------
# Global Definitions:
#----------------------------------------------------------------------------

PATH=$(/usr/es/sbin/cluster/utilities/cl_get_path all)
export PATH

# For Availability metrics tool, log file by default is /var/hacmp/availability/clavailability.log
export CLAM_LOG_FILE_NAME="clavailability.log"

# Fetch the CLAM_LOG_DIR from HACMPlogs ODM
CLAM_LOG_DIR=$(clodmget -q "name = $CLAM_LOG_FILE_NAME" -f value -n HACMPlogs)
[[ -z $CLAM_LOG_DIR ]] && CLAM_LOG_DIR="/var/hacmp/availability"

# Create a log directory, if it does not exists
export CLAM_LOG_DIR
[[ ! -d $CLAM_LOG_DIR ]] &&  mkdir -p $CLAM_LOG_DIR > /dev/null 2>&1

export CLAM_LOG_FILE="$CLAM_LOG_DIR/$CLAM_LOG_FILE_NAME"

#Exporting the tags related to Availability Metrics
# Tags related to ROHA Assesment, acquire and release
export AM_ROHA_ASSESSMENT_BEGIN="<EVENT:ROHA:ASSESSMENT:BEGIN>"
export AM_ROHA_ASSESSMENT_END="<EVENT:ROHA:ASSESSMENT:END>"
export AM_ROHA_ASSESSMENT_FAILURE="<EVENT:ROHA:ASSESSMENT:FAILURE>"
export AM_ROHA_ACQUIRE_BEGIN="<EVENT:ROHA:ACQUIRE:BEGIN>"
export AM_ROHA_ACQUIRE_END="<EVENT:ROHA:ACQUIRE:END>"
export AM_ROHA_RELEASE_BEGIN="<EVENT:ROHA:RELEASE:BEGIN>"
export AM_ROHA_RELEASE_END="<EVENT:ROHA:RELEASE:END>"

#Tags related to application start & stop
export AM_APP_START_BEGIN="<EVENT:APP:START:BEGIN>" 
export AM_APP_START_END="<EVENT:APP:START:END>" 
export AM_APP_START_FAILURE="<EVENT:APP:START:FAILURE>"
export AM_APP_STOP_BEGIN="<EVENT:APP:STOP:BEGIN>" 
export AM_APP_STOP_END="<EVENT:APP:STOP:END>" 
export AM_APP_STOP_FAILURE="<EVENT:APP:STOP:FAILURE>" 

#Tags related to Service IP alias & dealias
export AM_SERVICEIP_ALIAS_BEGIN="<EVENT:SERVICEIP:ALIAS:BEGIN>" 
export AM_SERVICEIP_ALIAS_END="<EVENT:SERVICEIP:ALIAS:END>" 
export AM_SERVICEIP_ALIAS_FAILURE="<EVENT:SERVICEIP:ALIAS:FAILURE>"
export AM_SERVICEIP_DEALIAS_BEGIN="<EVENT:SERVICEIP:DEALIAS:BEGIN>" 
export AM_SERVICEIP_DEALIAS_END="<EVENT:SERVICEIP:DEALIAS:END>" 
export AM_SERVICEIP_DEALIAS_FAILURE="<EVENT:SERVICEIP:DEALIAS:FAILURE>"

#Tags related to Volume Group 
export AM_VG_VARYON_BEGIN="<EVENT:VG:VARYON:BEGIN>" 
export AM_VG_VARYON_END="<EVENT:VG:VARYON:END>" 
export AM_VG_VARYON_FAILURE="<EVENT:VG:VARYON:FAILURE>"
export AM_VG_VARYOFF_BEGIN="<EVENT:VG:VARYOFF:BEGIN>" 
export AM_VG_VARYOFF_END="<EVENT:VG:VARYOFF:END>" 
export AM_VG_VARYOFF_FAILURE="<EVENT:VG:VARYOFF:FAILURE>"
export AM_VG_SYNC_BEGIN_RG_MOVE="<EVENT:VG:SYNC:BEGIN>" 
export AM_VG_SYNC_END_RG_MOVE="<EVENT:VG:SYNC:END>" 
export AM_VG_SYNC_FAILURE_RG_MOVE="<EVENT:VG:SYNC:FAILURE>" 
export AM_VG_SYNC_BEGIN_RG_MOVE_COMPLETE="<EVENT:VG:SYNC_COMPLETE:BEGIN>" 
export AM_VG_SYNC_END_RG_MOVE_COMPLETE="<EVENT:VG:SYNC_COMPLETE:END>" 
export AM_VG_SYNC_FAILURE_RG_MOVE_COMPLETE="<EVENT:VG:SYNC_COMPLETE:FAILURE>" 

#Tags related to Filesystem mount & unmount
export AM_FS_MOUNT_BEGIN="<EVENT:FS:MOUNT:BEGIN>" 
export AM_FS_MOUNT_END="<EVENT:FS:MOUNT:END>" 
export AM_FS_MOUNT_FAILURE="<EVENT:FS:MOUNT:FAILURE>"
export AM_FS_UMOUNT_BEGIN="<EVENT:FS:UMOUNT:BEGIN>" 
export AM_FS_UMOUNT_END="<EVENT:FS:UMOUNT:END>" 
export AM_FS_UMOUNT_FAILURE="<EVENT:FS:UMOUNT:FAILURE>"

#Tags related to Network Filesystem activate & deactivate
export AM_NFS_ACTIVATE_BEGIN="<EVENT:NFS:ACTIVATE:BEGIN>" 
export AM_NFS_ACTIVATE_END="<EVENT:NFS:ACTIVATE:END>" 
export AM_NFS_ACTIVATE_FAILURE="<EVENT:NFS:ACTIVATE:FAILURE>"
export AM_NFS_DEACTIVATE_BEGIN="<EVENT:NFS:DEACTIVATE:BEGIN>" 
export AM_NFS_DEACTIVATE_END="<EVENT:NFS:DEACTIVATE:END>" 
export AM_NFS_DEACTIVATE_FAILURE="<EVENT:NFS:DEACTIVATE:FAILURE>"

#Tags related to WPAR activate & deactivate
export AM_WPAR_START_BEGIN="<EVENT:WPAR:START:BEGIN>" 
export AM_WPAR_START_END="<EVENT:WPAR:START:END>" 
export AM_WPAR_START_FAILURE="<EVENT:WPAR:START:FAILURE>"
export AM_WPAR_STOP_BEGIN="<EVENT:WPAR:STOP:BEGIN>" 
export AM_WPAR_STOP_END="<EVENT:WPAR:STOP:END>" 
export AM_WPAR_STOP_FAILURE="<EVENT:WPAR:STOP:FAILURE>"

#Tags related to site_up start & stop
export AM_SITE_UP_BEGIN="<EVENT:SITE:UP:BEGIN>"
export AM_SITE_UP_END="<EVENT:SITE:UP:END>"
export AM_SITE_UP_FAILURE="<EVENT:SITE:UP:FAILURE>"

#Tags related to site_up_complete start & stop
export AM_SITE_UP_COMPLETE_BEGIN="<EVENT:SITE:UP_COMPLETE:BEGIN>"
export AM_SITE_UP_COMPLETE_END="<EVENT:SITE:UP_COMPLETE:END>"
export AM_SITE_UP_COMPLETE_FAILURE="<EVENT:SITE:UP_COMPLETE:FAILURE>"

#Tags related to site_down start & stop
export AM_SITE_DOWN_BEGIN="<EVENT:SITE:DOWN:BEGIN>" 
export AM_SITE_DOWN_END="<EVENT:SITE:DOWN:END>" 
export AM_SITE_DOWN_FAILURE="<EVENT:SITE:DOWN:FAILURE>"

#Tags related to site_down_complete start & stop
export AM_SITE_DOWN_COMPLETE_BEGIN="<EVENT:SITE:DOWN_COMPLETE:BEGIN>"
export AM_SITE_DOWN_COMPLETE_END="<EVENT:SITE:DOWN_COMPLETE:END>"
export AM_SITE_DOWN_COMPLETE_FAILURE="<EVENT:SITE:DOWN_COMPLETE:FAILURE>"

#Tags related to node_up start & stop
export AM_NODE_UP_BEGIN="<EVENT:NODE:UP:BEGIN>" 
export AM_NODE_UP_END="<EVENT:NODE:UP:END>" 
export AM_NODE_UP_FAILURE="<EVENT:NODE:UP:FAILURE>"

#Tags related to node_up_complete start & stop
export AM_NODE_UP_COMPLETE_BEGIN="<EVENT:NODE:UP_COMPLETE:BEGIN>" 
export AM_NODE_UP_COMPLETE_END="<EVENT:NODE:UP_COMPLETE:END>" 
export AM_NODE_UP_COMPLETE_FAILURE="<EVENT:NODE:UP_COMPLETE:FAILURE>"

#Tags related to node_down start & stop
export AM_NODE_DOWN_BEGIN="<EVENT:NODE:DOWN:BEGIN>" 
export AM_NODE_DOWN_END="<EVENT:NODE:DOWN:END>" 
export AM_NODE_DOWN_FAILURE="<EVENT:NODE:DOWN:FAILURE>"

#Tags related to node_down_complete start & stop
export AM_NODE_DOWN_COMPLETE_BEGIN="<EVENT:NODE:DOWN_COMPLETE:BEGIN>" 
export AM_NODE_DOWN_COMPLETE_END="<EVENT:NODE:DOWN_COMPLETE:END>" 
export AM_NODE_DOWN_COMPLETE_FAILURE="<EVENT:NODE:DOWN_COMPLETE:FAILURE>"

#Tags related to rg_move_acquire start & stop
export AM_RG_MOVE_ACQUIRE_BEGIN="<EVENT:RG:MOVE_ACQUIRE:BEGIN>" 
export AM_RG_MOVE_ACQUIRE_END="<EVENT:RG:MOVE_ACQUIRE:END>" 
export AM_RG_MOVE_ACQUIRE_FAILURE="<EVENT:RG:MOVE_ACQUIRE:FAILURE>"

#Tags related to rg_move_release start & stop
export AM_RG_MOVE_RELEASE_BEGIN="<EVENT:RG:MOVE_RELEASE:BEGIN>" 
export AM_RG_MOVE_RELEASE_END="<EVENT:RG:MOVE_RELEASE:END>" 
export AM_RG_MOVE_RELEASE_FAILURE="<EVENT:RG:MOVE_RELEASE:FAILURE>"

#Tags related to rg_move start & stop
export AM_RG_MOVE_BEGIN="<EVENT:RG:MOVE:BEGIN>" 
export AM_RG_MOVE_END="<EVENT:RG:MOVE:END>" 
export AM_RG_MOVE_FAILURE="<EVENT:RG:MOVE:FAILURE>"

#Tags related to rg_move_complete start & stop
export AM_RG_MOVE_COMPLETE_BEGIN="<EVENT:RG:MOVE_COMPLETE:BEGIN>" 
export AM_RG_MOVE_COMPLETE_END="<EVENT:RG:MOVE_COMPLETE:END>" 
export AM_RG_MOVE_COMPLETE_FAILURE="<EVENT:RG:MOVE_COMPLETE:FAILURE>"

#Tags related to rg_move_fence start & stop
export AM_RG_MOVE_FENCE_BEGIN="<EVENT:RG:MOVE_FENCE:BEGIN>" 
export AM_RG_MOVE_FENCE_END="<EVENT:RG:MOVE_FENCE:END>" 
export AM_RG_MOVE_FENCE_FAILURE="<EVENT:RG:MOVE_FENCE:FAILURE>"

#Tags related to swap_adapter start & stop
export AM_SWAP_ADAPTER_BEGIN="<EVENT:NETWORK:SWAP_ADAPTER:BEGIN>" 
export AM_SWAP_ADAPTER_END="<EVENT:NETWORK:SWAP_ADAPTER:END>" 
export AM_SWAP_ADAPTER_FAILURE="<EVENT:NETWORK:SWAP_ADAPTER:FAILURE>"

#Tags related to reconfig_topology_start start & stop
export AM_RECONFIG_TOPOLOGY_START_BEGIN="<EVENT:RECONFIG:TOPOLOGY_START:BEGIN>" 
export AM_RECONFIG_TOPOLOGY_START_END="<EVENT:RECONFIG:TOPOLOGY_START:END>" 
export AM_RECONFIG_TOPOLOGY_START_FAILURE="<EVENT:RECONFIG:TOPOLOGY_START:FAILURE>"

#Tags related to reconfig_topology_complete start & stop
export AM_RECONFIG_TOPOLOGY_COMPLETE_BEGIN="<EVENT:RECONFIG:TOPOLOGY_COMPLETE:BEGIN>" 
export AM_RECONFIG_TOPOLOGY_COMPLETE_END="<EVENT:RECONFIG:TOPOLOGY_COMPLETE:END>" 
export AM_RECONFIG_TOPOLOGY_COMPLETE_FAILURE="<EVENT:RECONFIG:TOPOLOGY_COMPLETE:FAILURE>"

#Tags related to reconfig_resource_acquire start & stop
export AM_RECONFIG_RESOURCE_ACQUIRE_BEGIN="<EVENT:RECONFIG:RESOURCE_ACQUIRE:BEGIN>" 
export AM_RECONFIG_RESOURCE_ACQUIRE_END="<EVENT:RECONFIG:RESOURCE_ACQUIRE:END>" 
export AM_RECONFIG_RESOURCE_ACQUIRE_FAILURE="<EVENT:RECONFIG:RESOURCE_ACQUIRE:FAILURE>"

#Tags related to reconfig_resource_release start & stop
export AM_RECONFIG_RESOURCE_RELEASE_BEGIN="<EVENT:RECONFIG:RESOURCE_RELEASE:BEGIN>" 
export AM_RECONFIG_RESOURCE_RELEASE_END="<EVENT:RECONFIG:RESOURCE_RELEASE:END>" 
export AM_RECONFIG_RESOURCE_RELEASE_FAILURE="<EVENT:RECONFIG:RESOURCE_RELEASE:FAILURE>"

#Tags related to reconfig_configuration_complete start & stop
export AM_RECONFIG_CONFIG_COMPLETE_BEGIN="<EVENT:RECONFIG:CONFIG_COMPLETE:BEGIN>" 
export AM_RECONFIG_CONFIG_COMPLETE_END="<EVENT:RECONFIG:CONFIG_COMPLETE:END>" 
export AM_RECONFIG_CONFIG_COMPLETE_FAILURE="<EVENT:RECONFIG:CONFIG_COMPLETE:FAILURE>"

#Tags related to configuration changes in a cluster
export AM_CONFIG_CHANGES_NODES="<STATISTICS:CONFIG:NODES>"
export AM_CONFIG_CHANGES_RG="<STATISTICS:CONFIG:RG>"
export AM_CONFIG_CHANGES_VG="<STATISTICS:CONFIG:VG>"
export AM_CONFIG_CHANGES_FS="<STATISTICS:CONFIG:FS>"
export AM_CONFIG_CHANGES_APP="<STATISTICS:CONFIG:APP>"
export AM_CONFIG_CHANGES_SERVICEIP="<STATISTICS:CONFIG:SERVICEIP>"

#Tags related to split-merge events
export AM_SPLIT_BEGIN="<EVENT:SPLIT:BEGIN>"
export AM_SPLIT_END="<EVENT:SPLIT:END>"
export AM_MERGE_BEGIN="<EVENT:MERGE:BEGIN>"
export AM_MERGE_END="<EVENT:MERGE:END>"
export AM_QUORUM_BEGIN="<EVENT:QUORUM:BEGIN>"
export AM_QUORUM_END="<EVENT:QUORUM:END>"

#Tags related to FFDC events
export AM_FFDC_BEGIN="<EVENT:FFDC:BEGIN>"
export AM_FFDC_END="<EVENT:FFDC:END>"
export AM_FFDC_FAILURE="<EVENT:FFDC:FAILURE>"

#Tag for process monitoring
export AM_AIX_MON="<AIX:METRICS:PROCESS>"

#Tags related to SAP Smart Assist
export AM_SA_SAP_START_BEGIN="<EVENT:SA:SAP_START:BEGIN>"
export AM_SA_SAP_START_END="<EVENT:SA:SAP_START:END>"
export AM_SA_SAP_START_FAILURE="<EVENT:SA:SAP_START:FAILURE>"
export AM_SA_SAP_STOP_BEGIN="<EVENT:SA:SAP_STOP:BEGIN>"
export AM_SA_SAP_STOP_END="<EVENT:SA:SAP_STOP:END>"
export AM_SA_SAP_STOP_FAILURE="<EVENT:SA:SAP_STOP:FAILURE>"

#Tags related to ORACLE Smart Assist
export AM_SA_ORACLE_START_BEGIN="<EVENT:SA:ORACLE_START:BEGIN>"
export AM_SA_ORACLE_START_END="<EVENT:SA:ORACLE_START:END>"
export AM_SA_ORACLE_START_FAILURE="<EVENT:SA:ORACLE_START:FAILURE>"
export AM_SA_ORACLE_STOP_BEGIN="<EVENT:SA:ORACLE_STOP:BEGIN>"
export AM_SA_ORACLE_STOP_END="<EVENT:SA:ORACLE_STOP:END>"
export AM_SA_ORACLE_STOP_FAILURE="<EVENT:SA:ORACLE_STOP:FAILURE>"

#Tags related to DB2 Smart Assist
export AM_SA_DB2_START_BEGIN="<EVENT:SA:DB2_START:BEGIN>"
export AM_SA_DB2_START_END="<EVENT:SA:DB2_START:END>"
export AM_SA_DB2_START_FAILURE="<EVENT:SA:DB2_START:FAILURE>"
export AM_SA_DB2_STOP_BEGIN="<EVENT:SA:DB2_STOP:BEGIN>"
export AM_SA_DB2_STOP_END="<EVENT:SA:DB2_STOP:END>"
export AM_SA_DB2_STOP_FAILURE="<EVENT:SA:DB2_STOP:FAILURE>"

#Tags related to Verification Assist
export AM_VERIFICATION_BEGIN="<EVENT:VERIFICATION:BEGIN>"
export AM_VERIFICATION_END="<EVENT:VERIFICATION:END>"
export AM_VERIFICATION_FAILURE="<EVENT:VERIFICATION:FAILURE>"

#Tags related to network up/down events
export AM_NETWORK_DOWN_BEGIN="<EVENT:NETWORK:DOWN:BEGIN>" 
export AM_NETWORK_DOWN_END="<EVENT:NETWORK:DOWN:END>" 
export AM_NETWORK_DOWN_COMPLETE_BEGIN="<EVENT:NETWORK:DOWN_COMPLETE:BEGIN>" 
export AM_NETWORK_DOWN_COMPLETE_END="<EVENT:NETWORK:DOWN_COMPLETE:END>" 
export AM_NETWORK_UP_BEGIN="<EVENT:NETWORK:UP:BEGIN>" 
export AM_NETWORK_UP_END="<EVENT:NETWORK:UP:END>" 
export AM_NETWORK_UP_COMPLETE_BEGIN="<EVENT:NETWORK:UP_COMPLETE:BEGIN>" 
export AM_NETWORK_UP_COMPLETE_END="<EVENT:NETWORK:UP_COMPLETE:END>" 
export AM_NETWORK_UP_FAILURE="<EVENT:NETWORK:UP:FAILURE>" 
export AM_NETWORK_DOWN_FAILURE="<EVENT:NETWORK:DOWN:FAILURE>" 

#Tags related to Synchronization Assist
export AM_SYNC_BEGIN="<EVENT:SYNCHRONIZATION:BEGIN>"
export AM_SYNC_END="<EVENT:SYNCHRONIZATION:END>"
export AM_SYNC_FAILURE="<EVENT:SYNCHRONIZATION:FAILURE>"

#Tags related to RG Failover
export RG_FAILOVER_BEGIN="<RG:FAILOVER:BEGIN>"
export RG_FAILOVER_END="<RG:FAILOVER:END>"
export RG_FAILOVER_FAILURE="<RG:FAILOVER:FAILURE>"

#Tags related to RG ACQUIRE
export RG_ACQUIRE_BEGIN="<EVENT:RG:ACQUIRE:BEGIN>"
export RG_ACQUIRE_END="<EVENT:RG:ACQUIRE:END>"
export RG_ACQUIRE_FAILURE="<EVENT:RG:ACQUIRE:FAILURE>"

#Tags related to RG RELEASE
export RG_RELEASE_BEGIN="<EVENT:RG:RELEASE:BEGIN>"
export RG_RELEASE_END="<EVENT:RG:RELEASE:END>"
export RG_RELEASE_FAILURE="<EVENT:RG:RELEASE:FAILURE>"

#Tags related to application monitoring
export AM_APPMON_BEGIN="<EVENT:APPMON:BEGIN>"
export AM_APPMON_END="<EVENT:APPMON:END>"
export AM_APPMON_FAILURE="<EVENT:APPMON:FAILURE>"

#Tags related to config too long
export AM_CONFIGTL_BEGIN="<EVENT:CONFIGTL:BEGIN>"
export AM_CONFIGTL_END="<EVENT:CONFIGTL:END>"
export AM_CONFIGTL_FAILURE="<EVENT:CONFIGTL:FAILURE>"

#Tags related to AIX shutdown and reboot
export AM_AIX_DOWN_BEGIN="<EVENT:AIX_DOWN:BEGIN>"
export AM_AIX_DOWN_END="<EVENT:AIX_DOWN:END>"
#----------------------------------------------------------------------------
# Functions:
#
#   amlog_trace
#   amlog_warn
#   amlog_err
#
#----------------------------------------------------------------------------

##############################################################
#
# NAME: amlog_trace
#
# FUNCTION:  Writes INFO message to CLAM_LOG_FILE
#
# PARAMETERS:
#         Trace Tag used to generate AM report
#         Trace information
#
# RETURNS: NA
###############################################################
function amlog_trace {
    [[ "$VERBOSE_LOGGING" == "high" ]] && set -x

    #
    # call clcycle to cycle the log file when its size reaches
    # maximum size limit before logging the trace
    #
    clcycle $CLAM_LOG_FILE_NAME >/dev/null 2>&1
    DATE=$(cltime)
    echo "$1|$DATE|INFO: $2" >> $CLAM_LOG_FILE
}

##############################################################
#
# NAME: amlog_warn
#
# FUNCTION:  Writes warning message to CLAM_LOG_FILE
#
# PARAMETERS:
#         Trace Tag used to generate AM report
#         Trace information
#
# RETURNS: NA
###############################################################
function amlog_warn {
    [[ "$VERBOSE_LOGGING" == "high" ]] && set -x

    #
    # call clcycle to cycle the log file when its size reaches
    # maximum size limit before logging Warning 
    #
    clcycle $CLAM_LOG_FILE_NAME >/dev/null 2>&1
    DATE=$(cltime)
    echo "$1|$DATE|WARN: $2" >> $CLAM_LOG_FILE
}

##############################################################
#
# NAME: amlog_err
#
# FUNCTION:  Writes ERROR message to CLAM_LOG_FILE
#
# PARAMETERS:
#         Trace Tag used to generate AM report
#         Trace information
#
# RETURNS: NA
###############################################################
function amlog_err {
    [[ "$VERBOSE_LOGGING" == "high" ]] && set -x

    #
    # call clcycle to cycle the log file when its size reaches
    # maximum size limit before logging ERROR
    #
    clcycle $CLAM_LOG_FILE_NAME >/dev/null 2>&1
    DATE=$(cltime)
    echo "$1|$DATE|ERROR: $2" >> $CLAM_LOG_FILE
}
