403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /etc/script/ServerMonitor/monitor/monitor.py
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()

Youez - 2016 - github.com/yon3zu
LinuXploit