#!/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/&/\&/g; s/</\</g; s/>/\>/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