Index: /branches/amp_4_0/platform/config/init_db.sql
===================================================================
--- /branches/amp_4_0/platform/config/init_db.sql	(revision 2623)
+++ /branches/amp_4_0/platform/config/init_db.sql	(working copy)
@@ -364,4 +364,20 @@
     time        TIMESTAMP   NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 
+CREATE TABLE IF NOT EXISTS SETTINGS
+(
+    id SERIAL PRIMARY KEY,
+    attribute_name varchar(64) NOT NULL,
+    attribute_value TEXT          DEFAULT NULL,
+    time TIMESTAMP   NOT NULL DEFAULT CURRENT_TIMESTAMP
+);
+
+CREATE TABLE IF NOT EXISTS NOTIFICATION
+(
+    id serial  PRIMARY KEY,
+    name varchar(64) NOT NULL,
+    type varchar(64) NOT NULL,
+    setting varchar(64)          DEFAULT NULL,
+    time        TIMESTAMP   NOT NULL DEFAULT CURRENT_TIMESTAMP
+);
 -- psql -U amp_admin -d cm -f /path/to/your/init_db.sql
Index: /branches/amp_4_0/platform/scripts/send_alert_cpu_memory_stats.sh
===================================================================
--- /branches/amp_4_0/platform/scripts/send_alert_cpu_memory_stats.sh	(revision 0)
+++ /branches/amp_4_0/platform/scripts/send_alert_cpu_memory_stats.sh	(working copy)
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+# === SETUP LOGGING ===
+LOG_FILE="/var/log/send_cpu_memory_stats.log"
+mkdir -p "$(dirname "$LOG_FILE")"
+exec >> "$LOG_FILE" 2>&1
+
+EMAIL_SUBJECT="System Report: $(hostname) - $(date '+%Y-%m-%d %H:%M')"
+
+
+# === DATABASE CONNECTION CONFIG ===
+DB_NAME="cm"
+DB_USER="amp_admin"
+DB_HOST="localhost"  # change if remote
+DB_PORT="5432"
+
+# === Extract SMTP settings from SETTINGS table ===
+SMTP_JSON=$(psql -qtA -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -p "$DB_PORT" \
+  -c "SELECT attribute_value FROM SETTINGS WHERE attribute_name = 'smtp'" | tr -d '[:space:]')
+
+# === Extract EMAIL_TO from NOTIFICATION table ===
+EMAIL_TO_JSON=$(psql -qtA -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -p "$DB_PORT" \
+  -c "SELECT setting FROM NOTIFICATION WHERE type = 'email' LIMIT 1" | tr -d '[:space:]')
+
+# === Parse using jq ===
+SMTP_SERVER=$(echo "$SMTP_JSON" | jq -r '.Host')
+SMTP_PORT=$(echo "$SMTP_JSON" | jq -r '.Port')
+EMAIL_FROM=$(echo "$SMTP_JSON" | jq -r '.from_address')
+EMAIL_USER=$(echo "$SMTP_JSON" | jq -r '.User')
+EMAIL_PASS=$(echo "$SMTP_JSON" | jq -r '.Password')
+
+EMAIL_TO=$(echo "$EMAIL_TO_JSON" | jq -r '.addresses | join(",")')
+
+# === CONFIGURABLE VARIABLES ===
+echo "SMTP_SERVER=\"$SMTP_SERVER\""
+echo "SMTP_PORT=\"$SMTP_PORT\""
+echo "EMAIL_FROM=\"$EMAIL_FROM\""
+echo "EMAIL_TO=\"$EMAIL_TO\""
+echo "EMAIL_USER=\"$EMAIL_USER\""
+echo "EMAIL_PASS=\"$EMAIL_PASS\""
+
+# === THRESHOLDS ===
+CPU_THRESHOLD=80      # in percent
+MEM_THRESHOLD=70      # in percent
+
+# === GET CURRENT USAGE ===
+
+# Get average CPU usage over all cores (idle % from mpstat)
+CPU_IDLE=$(mpstat 1 1 | awk '/Average:/ && $3 ~ /all/ {print 100 - $NF}')
+CPU_USAGE=$(printf "%.0f" "$CPU_IDLE")
+
+# Get memory usage percent
+MEM_TOTAL=$(free | awk '/Mem:/ {print $2}')
+MEM_USED=$(free | awk '/Mem:/ {print $3}')
+MEM_USAGE=$(( MEM_USED * 100 / MEM_TOTAL ))
+
+# === TEMP FILE FOR REPORT ===
+REPORT_FILE="/tmp/sys_report_$(date '+%Y%m%d_%H%M%S').txt"
+
+# === GATHER SYSTEM INFO ===
+{
+    echo "=== SYSTEM ALERT REPORT ==="
+    echo "Hostname: $(hostname)"
+    echo "Date: $(date)"
+    echo "" 
+    echo "CPU Usage: ${CPU_USAGE}% (Threshold: ${CPU_THRESHOLD}%)"
+    echo "Memory Usage: ${MEM_USAGE}% (Threshold: ${MEM_THRESHOLD}%)"
+    echo ""
+
+    echo "==== CPU INFO ===="
+    lscpu
+    echo ""
+
+    echo "==== CPU USAGE (per core) ===="
+    mpstat -P ALL 1 1
+    echo ""
+
+    echo "==== MEMORY USAGE ===="
+    free -h
+    echo ""
+
+    echo "==== TOP PROCESSES ===="
+    top -b -n1 | head -n 15
+} > "$REPORT_FILE"
+
+# === SEND EMAIL ===
+if [ "$CPU_USAGE" -ge "$CPU_THRESHOLD" ] || [ "$MEM_USAGE" -ge "$MEM_THRESHOLD" ]; then
+    mail -s "$EMAIL_SUBJECT" "$EMAIL_TO" < "$REPORT_FILE"
+    echo "Alert sent to $EMAIL_TO: CPU=${CPU_USAGE}%, MEM=${MEM_USAGE}%"
+else
+    echo "No alert sent. CPU=${CPU_USAGE}%, MEM=${MEM_USAGE}%"
+fi
+
+# === CLEANUP ===
+rm -f "$REPORT_FILE"
Index: /branches/amp_4_0/platform/tools/install_postfix.sh
===================================================================
--- /branches/amp_4_0/platform/tools/install_postfix.sh	(revision 0)
+++ /branches/amp_4_0/platform/tools/install_postfix.sh	(working copy)
@@ -0,0 +1,87 @@
+#!/bin/bash
+
+# === SETUP LOGGING ===
+LOG_FILE="/var/log/install_postfix.log"
+mkdir -p "$(dirname "$LOG_FILE")"
+exec >> "$LOG_FILE" 2>&1
+
+# === DATABASE CONNECTION CONFIG ===
+DB_NAME="cm"
+DB_USER="amp_admin"
+DB_HOST="localhost"
+DB_PORT="5432"
+
+# === Extract SMTP settings from SETTINGS table ===
+SMTP_JSON=$(psql -qtA -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -p "$DB_PORT" \
+  -c "SELECT attribute_value FROM SETTINGS WHERE attribute_name = 'smtp'" | tr -d '[:space:]')
+
+# === Extract EMAIL_TO from NOTIFICATION table ===
+EMAIL_TO_JSON=$(psql -qtA -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -p "$DB_PORT" \
+  -c "SELECT setting FROM NOTIFICATION WHERE type = 'email' LIMIT 1" | tr -d '[:space:]')
+
+# === Parse using jq ===
+SMTP_SERVER=$(echo "$SMTP_JSON" | jq -r '.Host')
+SMTP_PORT=$(echo "$SMTP_JSON" | jq -r '.Port')
+EMAIL_FROM=$(echo "$SMTP_JSON" | jq -r '.from_address')
+EMAIL_USER=$(echo "$SMTP_JSON" | jq -r '.User')
+EMAIL_PASS=$(echo "$SMTP_JSON" | jq -r '.Password')
+
+
+# === Function: Install if missing ===
+install_if_missing() {
+    local pkg="$1"
+    if ! rpm -q "$pkg" &>/dev/null; then
+        echo "Installing missing package: $pkg"
+        dnf install -y "$pkg"
+    else
+        echo "Package already installed: $pkg"
+    fi
+}
+
+# === Install Required Packages ===
+echo "Checking and installing required packages..."
+install_if_missing postfix
+install_if_missing s-nail
+install_if_missing cyrus-sasl
+install_if_missing cyrus-sasl-plain
+install_if_missing sysstat
+
+# === Enable and Start Postfix ===
+echo "Enabling and starting Postfix..."
+systemctl enable --now postfix
+
+# Generate mapping database
+postmap /etc/postfix/generic
+
+# === Configure Postfix ===
+echo "Configuring Postfix for SMTP relay..."
+postconf -e "relayhost = [$SMTP_SERVER]:$SMTP_PORT"
+postconf -e "smtp_use_tls = yes"
+postconf -e "smtp_sasl_auth_enable = yes"
+postconf -e "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd"
+postconf -e "smtp_sasl_security_options = noanonymous"
+postconf -e "smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt"
+postconf -e "myhostname = $(hostname)"
+postconf -e "inet_interfaces = loopback-only"
+postconf -e "mydestination ="
+postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"
+
+# === Create SASL Password File ===
+echo "Creating /etc/postfix/sasl_passwd..."
+mkdir -p /etc/postfix
+cat <<EOF > /etc/postfix/sasl_passwd
+[$SMTP_SERVER]:$SMTP_PORT $EMAIL_USER:$EMAIL_PASS
+EOF
+
+chmod 600 /etc/postfix/sasl_passwd
+postmap /etc/postfix/sasl_passwd
+
+# === Restart Postfix ===
+echo "Restarting Postfix..."
+systemctl restart postfix
+
+chmod +x send_cpu_memory_stats.sh
+
+# === Add Cron Job ===
+echo "Adding cron job to check every 30 minute..."
+(crontab -l 2>/dev/null; echo "*/30 * * * * ../scripts/send_cpu_memory_stats.sh >> /var/log/send_stats_cron.log 2>&1") | sort -u | crontab -
