Saturday, December 6, 2025

INVALID

 #!/bin/bash

# -------------------------------------------------------------------------

# Script Name : autoconfig_monitor.sh

# Author      : Abdul Muqeet

# Date        : 2025-12-06

# Description : This script loads the EBS 12.2 RUN file system environment,

#               identifies the latest AutoConfig log, scans for critical

#               errors, and sends an HTML formatted email alert.

# -------------------------------------------------------------------------


# =========================================================================

# 1. CONFIGURATION

# =========================================================================

# Email configuration

MAIL_TO="dba_team@yourcompany.com"

MAIL_FROM="oracle_ebs@$(hostname)"

SUBJECT="AutoConfig Status Report - $(hostname)"


# Threshold for error alerting (0 means any error triggers the failure view)

ERROR_THRESHOLD=0


# =========================================================================

# 2. ENVIRONMENT SETUP

# =========================================================================

# Navigate to home and source the Run File System environment

cd $HOME


if [ -f "./EBSapps.env" ]; then

    # Sourcing environment with 'run' argument as requested

    . ./EBSapps.env run

else

    echo "CRITICAL: EBSapps.env file not found in $HOME. Exiting."

    exit 1

fi


# =========================================================================

# 3. IDENTIFY LOG FILE

# =========================================================================

# Locate the AutoConfig log directory

# Usually: $APPL_TOP/admin/$CONTEXT_NAME/log

LOG_DIR="$APPL_TOP/admin/$CONTEXT_NAME/log"


if [ ! -d "$LOG_DIR" ]; then

    echo "Error: Log directory $LOG_DIR does not exist."

    exit 1

fi


# Find the most recent AutoConfig log file (files like MMDDhhmm.log)

LATEST_LOG=$(ls -t "$LOG_DIR"/*.log 2>/dev/null | head -1)


if [ -z "$LATEST_LOG" ]; then

    echo "Error: No AutoConfig log files found in $LOG_DIR"

    exit 1

fi


LOG_FILENAME=$(basename "$LATEST_LOG")


# =========================================================================

# 4. SCAN FOR ERRORS

# =========================================================================

# Create temp files

TMP_ERRORS="/tmp/ac_errors_$$.txt"

TMP_HTML="/tmp/ac_email_$$.html"


# Grep for standard AutoConfig failure patterns

# Case insensitive search for Error, Failure, Fatal, or ORA- messages

grep -iE "Error|Failure|Fatal|ORA-[0-9]+" "$LATEST_LOG" > "$TMP_ERRORS"


# Count errors

ERR_COUNT=$(wc -l < "$TMP_ERRORS")


# =========================================================================

# 5. GENERATE HTML BODY

# =========================================================================


# Start HTML content

echo "<html>" > "$TMP_HTML"

echo "<head>" >> "$TMP_HTML"

echo "<style>" >> "$TMP_HTML"

echo "  body { font-family: Arial, Helvetica, sans-serif; font-size: 12px; }" >> "$TMP_HTML"

echo "  table { border-collapse: collapse; width: 100%; }" >> "$TMP_HTML"

echo "  th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }" >> "$TMP_HTML"

echo "  th { background-color: #f2f2f2; }" >> "$TMP_HTML"

echo "  .status-pass { color: green; font-weight: bold; font-size: 14px; }" >> "$TMP_HTML"

echo "  .status-fail { color: red; font-weight: bold; font-size: 14px; }" >> "$TMP_HTML"

echo "  .meta { color: #555; font-size: 11px; }" >> "$TMP_HTML"

echo "</style>" >> "$TMP_HTML"

echo "</head>" >> "$TMP_HTML"

echo "<body>" >> "$TMP_HTML"


echo "<h3>Oracle EBS 12.2 AutoConfig Report</h3>" >> "$TMP_HTML"

echo "<p><strong>Host:</strong> $(hostname)<br>" >> "$TMP_HTML"

echo "<strong>Context:</strong> $CONTEXT_NAME<br>" >> "$TMP_HTML"

echo "<strong>Log File:</strong> $LATEST_LOG</p>" >> "$TMP_HTML"


if [ "$ERR_COUNT" -gt "$ERROR_THRESHOLD" ]; then

    # -- FAILURE CASE --

    echo "<p class='status-fail'>Status: FAILED</p>" >> "$TMP_HTML"

    echo "<p>AutoConfig completed with <strong>$ERR_COUNT</strong> errors. Please check the details below:</p>" >> "$TMP_HTML"

    

    echo "<table>" >> "$TMP_HTML"

    echo "<tr><th>Error Message (Extracted)</th></tr>" >> "$TMP_HTML"

    

    # Loop through errors and format them into table rows

    while IFS= read -r line; do

        # Sanitize HTML special chars to prevent broken formatting

        clean_line=$(echo "$line" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g')

        echo "<tr><td>$clean_line</td></tr>" >> "$TMP_HTML"

    done < "$TMP_ERRORS"

    

    echo "</table>" >> "$TMP_HTML"

else

    # -- SUCCESS CASE --

    echo "<p class='status-pass'>Status: SUCCESS</p>" >> "$TMP_HTML"

    echo "<p>AutoConfig completed successfully. No critical errors were found in the log.</p>" >> "$TMP_HTML"

fi


echo "<br><hr>" >> "$TMP_HTML"

echo "<p class='meta'>Script Author: Abdul Muqeet | Generated: $(date)</p>" >> "$TMP_HTML"

echo "</body></html>" >> "$TMP_HTML"


# =========================================================================

# 6. SEND EMAIL

# =========================================================================

# Using mailx with content-type set to html

# Note: Syntax for mailx headers (-a) depends on OS version (RHEL 6 vs 7/8).

# The below works for most modern RHEL/Linux distributions.


(

  echo "From: $MAIL_FROM"

  echo "To: $MAIL_TO"

  echo "Subject: $SUBJECT"

  echo "MIME-Version: 1.0"

  echo "Content-Type: text/html"

  cat "$TMP_HTML"

) | /usr/sbin/sendmail -t


# Alternative if using mailx directly:

# mailx -s "$SUBJECT" -S smtp=smtp://your.mail.server -a "Content-Type: text/html" "$MAIL_TO" < "$TMP_HTML"


# =========================================================================

# 7. CLEANUP

# =========================================================================

rm -f "$TMP_ERRORS" "$TMP_HTML"


exit 0

No comments:

Post a Comment