| Server IP : 3.111.61.48 / Your IP : 216.73.216.67 Web Server : Apache System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.2.31 Disable Function : exec,passthru,shell_exec,system MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /etc/script/ServerMonitor/monitor/ |
Upload File : |
import psutil
import smtplib
import time
import os
import logging
import socket
import platform
from email.mime.text import MIMEText
from dotenv import load_dotenv
# ================= LOAD ENV =================
load_dotenv()
# ================= CONFIG =================
CPU_THRESHOLD = int(os.getenv("CPU_THRESHOLD", 80))
RAM_THRESHOLD = int(os.getenv("RAM_THRESHOLD", 80))
DISK_THRESHOLD = int(os.getenv("DISK_THRESHOLD", 90))
CHECK_INTERVAL = int(os.getenv("CHECK_INTERVAL", 10))
COOLDOWN = int(os.getenv("COOLDOWN", 300))
DISK_PATHS = os.getenv("DISK_PATHS", "/").split(",")
SMTP_HOST = os.getenv("MAIL_HOST")
SMTP_PORT = int(os.getenv("MAIL_PORT", 587))
SMTP_USER = os.getenv("MAIL_USERNAME")
SMTP_PASS = os.getenv("MAIL_PASSWORD")
FROM_EMAIL = os.getenv("MAIL_FROM_ADDRESS")
FROM_NAME = os.getenv("MAIL_FROM_NAME")
TO_EMAIL = os.getenv("MAIL_TO")
# ================= LOGGING =================
os.makedirs("logs", exist_ok=True)
logging.basicConfig(
filename="logs/monitor.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
last_sent = 0
# ================= SYSTEM INFO =================
def get_system_info():
hostname = socket.gethostname()
ip_address = "Unknown"
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip_address = s.getsockname()[0]
s.close()
except:
pass
os_info = f"{platform.system()} {platform.release()}"
return hostname, ip_address, os_info
# ================= EMAIL =================
def send_email(subject, body):
try:
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = f"{FROM_NAME} <{FROM_EMAIL}>"
msg['To'] = TO_EMAIL
server = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
server.starttls()
server.login(SMTP_USER, SMTP_PASS)
server.send_message(msg)
server.quit()
print("📧 Email sent")
logging.info("Email sent")
except Exception as e:
print("❌ Email error:", e)
logging.error(f"Email error: {e}")
# ================= MONITOR =================
def check_system():
global last_sent
cpu = psutil.cpu_percent(interval=1)
ram = psutil.virtual_memory().percent
print(f"\nCPU={cpu}% RAM={ram}%")
alerts = []
if cpu > CPU_THRESHOLD:
alerts.append(f"CPU high: {cpu}%")
if ram > RAM_THRESHOLD:
alerts.append(f"RAM high: {ram}%")
# ================= DISK CHECK =================
for path in DISK_PATHS:
path = path.strip()
try:
disk = psutil.disk_usage(path).percent
print(f"DISK {path} = {disk}%")
if disk > DISK_THRESHOLD:
alerts.append(f"Disk high ({path}): {disk}%")
except Exception as e:
print(f"Invalid disk path: {path}")
# ================= ALERT =================
if alerts:
now = time.time()
if now - last_sent > COOLDOWN:
hostname, ip, os_info = get_system_info()
message = f"""
🚨 SYSTEM ALERT 🚨
Host: {hostname}
IP: {ip}
OS: {os_info}
-------------------------
""" + "\n".join(alerts)
print("🚨 ALERT TRIGGERED")
send_email("🚨 System Alert", message)
last_sent = now
else:
print("⏳ Cooldown active, skipping alert")
logging.info(f"CPU={cpu}% RAM={ram}%")
# ================= MAIN =================
def main():
print("🚀 Monitor started...")
while True:
check_system()
print("⏳ Sleeping...\n")
time.sleep(CHECK_INTERVAL)
if __name__ == "__main__":
main()