Your IP : 216.73.217.79


Current Path : /home/otto/python/app/services/__pycache__/
Upload File :
Current File : //home/otto/python/app/services/__pycache__/server_checks.cpython-310.pyc

o

�ױh�N�@s�dZddlZddlZddlmZmZmZmZddlmZddl	m
Z
ddlZddlZej
�dee
e�jjj��ddlmZddlmZGd	d
�d
�Zddeedeeeffd
d�ZdS)z�
Server Monitoring Service for IGA Core

This module provides server health monitoring including:
- Memory usage monitoring
- Disk space monitoring  
- CPU load monitoring
- Email alerts when thresholds are exceeded
�N)�Dict�Any�Optional�Tuple)�datetime)�Path)�get_server_monitor_config�)�SymfonyMailServicec@s�eZdZdZddeefdd�Zdeeeffdd�Z	deeeffd	d
�Z
deeeffdd�Zdeeeffd
d�Zde
deeeffdd�Zdeeeffdd�Zdeeeffdd�ZdS)�
ServerMonitorzP
    Server monitoring class that checks system resources and sends alerts.
    N�alert_emailcCsRt�}|p|d|_t�|_|d|_|d|_|d|_t��|_t	�
�|_dS)z�
        Initialize the server monitor.
        
        Args:
            alert_email: Email address to send alerts to (optional, uses config default if not provided)
        r�disk_threshold�memory_threshold�
cpu_thresholdN)rrr
�mail_servicer
rr�psutil�	cpu_count�platform�node�hostname)�selfr�config�r�^/home/otto/wwwroots/BitBucket/iga-core-symfony/iga-core-5/python/app/services/server_checks.py�__init__s



zServerMonitor.__init__�returnc
CsLz�g}g}t��D]r}z_t�|j�}|j|jd}d|}|j|j|jt|jdd�t|jdd�t|j	dd�t|d�t|d�d�}|�
|�||jkrid|j�d|d�d|d	d�d
�}|�
dd||d
��Wq	tysYq	t
y{Yq	wd||t����d�WSt
y�}	zdt|	�t����d�WYd}	~	Sd}	~	ww)z�
        Check disk usage for all mounted filesystems.
        
        Returns:
            Dict containing disk usage information and alerts
        �d�@�)�device�
mountpoint�
filesystem�total_gb�used_gb�free_gb�percent_used�percent_freezDISK ALERT: z is �.1fz% full (r$�GB free)�disk�high��type�severity�message�data�success)�status�	disk_info�alerts�	timestamp�error�r1r5r4N)r�disk_partitions�
disk_usager �used�totalr�fstype�round�free�appendr
�PermissionError�	Exceptionr�now�	isoformat�str)
rr2r3�	partition�usager%r&�	disk_data�	alert_msg�errr�check_disk_usage5s^�

�����
�
���zServerMonitor.check_disk_usagec
Cs�zVt��}t|jdd�t|jdd�t|jdd�t|jd�td|jd�d�}g}|d|jkrKd|dd�d|d	d�d
�}|�dd||d
��d||t	�
���d�WStyt}zdt
|�t	�
���d�WYd}~Sd}~ww)z
        Check memory usage.
        
        Returns:
            Dict containing memory usage information and alerts
        rrr)r"�available_gbr#r%�percent_availablerKzMEMORY ALERT: Only r'z% memory available (rJr(�memoryr*r+r0)r1�memory_infor3r4r5r6N)r�virtual_memoryr<r:�	availabler9�percentrr>rrArBr@rC)rrL�memory_datar3rGrHrrr�check_memory_usagess@
����
�
���z ServerMonitor.check_memory_usagec

Cs6z|tjdd�}t��}|d|j}|d|j}|d|j}t|d�t|dd�t|dd�t|dd�t|d�t|d�t|d�|jd�}g}||jkrqd|d�d|dd�d	|dd�d
|dd�d�	}|�dd
||d��d||t�	��
�d�WSty�}	zdt|	�t�	��
�d�WYd}	~	Sd}	~	ww)z�
        Check CPU usage and load average.
        
        Returns:
            Dict containing CPU usage information and alerts
        r	)�intervalrr)�cpu_percent�	load_1min�	load_5min�
load_15min�load_per_core_1min�load_per_core_5min�load_per_core_15minrzCPU ALERT: Load average is z.2fz per core (1min: z, 5min: z	, 15min: �)�cpu�mediumr+r0)r1�cpu_infor3r4r5r6N)
rrT�os�
getloadavgrr<rr>rrArBr@rC)
rrT�load_avgrXrYrZ�cpu_datar3rGrHrrr�check_cpu_usage�sV�

�����
�
���zServerMonitor.check_cpu_usagecCs�|jt����id�}|��|dd<|��|dd<|��|dd<g}g}|d��D]#\}}|�d�dkrDd|vrD|�	|d�q-|�d�d	krP|�
|�q-t|�|d
<||d<||d<|sc|rh|�|�|S)z{
        Run all system checks.
        
        Returns:
            Dict containing all check results and alerts
        )rr4�checksrdr)rLr\r1r0r3r5�total_alerts�
failed_checks)
rrrArBrIrRrc�items�get�extendr>�len�_send_comprehensive_report)r�results�
all_alertsrf�
check_name�check_resultrrr�run_all_checks�s*
�
�
zServerMonitor.run_all_checksr3rlc	Cs4�z
i}|D]}|d}||vrg||<||�|�qd|j�dt|��d�}d|j�dt���d��dt|��d	�}d
|j�dt���d��dt|��d
�}|��D]f\}}	|d|���d�7}|d|���d�7}|	D]K}|d|d�d�7}|d|d�d|d�d�7}d|vr�|d��D]!\}
}t|t	t
f�r�|d|
�d|�d�7}|d|
�d|�d�7}q�|d7}qnqT|d7}|d7}|d��D]1\}}
|
�d �d!kr�||�d"�7}|d#|�d$�7}q�||�d%|
�d&d'��d�7}|d#|�d(�7}q�|d)7}|jj
|j||��|d*�Wd+St�yYd+Sw),z�
        Send email alerts for all detected issues.
        
        Args:
            alerts: List of alert dictionaries
            results: Complete check results
        r,�SERVER ALERT: � - z issues detected�
Server Health Alert - �
Generated: �%Y-%m-%d %H:%M:%Sz
Total Issues: �

u�
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .header { background-color: #f0f0f0; padding: 15px; border-radius: 5px; }
        .alert { margin: 10px 0; padding: 10px; border-left: 4px solid #ff4444; background-color: #fff5f5; }
        .alert.high { border-left-color: #ff4444; }
        .alert.medium { border-left-color: #ffaa00; }
        .summary { background-color: #e8f5e8; padding: 15px; border-radius: 5px; margin: 20px 0; }
        .metric { margin: 5px 0; }
    </style>
</head>
<body>
    <div class="header">
        <h2>🚨 Server Health Alert</h2>
        <p><strong>Server:</strong> �,</p>
        <p><strong>Generated:</strong> z/</p>
        <p><strong>Total Issues:</strong> �</p>
    </div>
�
�	 ALERTS:
z<h3>z Alerts</h3>�- r.�
    <div class="alert r-�">
        <strong>�
</strong>
r/�  �: �<div class='metric'>�</div>z
SYSTEM SUMMARY:
z,<div class='summary'><h3>System Summary</h3>rdr1r0�: OK
�<div class='metric'><strong>z:</strong> OK</div>z
: ERROR - r5�
Unknown errorz:</strong> ERROR</div>z</div></body></html>��to_email�subject�body�	html_bodyN)r>rrjrrA�strftimerg�upper�
isinstance�int�floatrhr�
send_emailr�stripr@)rr3rl�alert_groups�alert�
alert_typer��	text_bodyr��type_alerts�key�valuernrorrr�_send_alertsst�������
��
���zServerMonitor._send_alertsc	Csb�z�|�dd�}|�dg�}|dkrt|�dkrWdSd|j�d|�dt|��d�}d	|j�d
t���d��d|�d
t|��d�	}d|j�dt���d��d|�dt|��d�	}|r�|d7}|D]&}|d�|i�}|�dd�}	|d|�d|	�d�7}|d|�d|	�d�7}q`|d7}|dk�r%|d7}|d7}i}
|�dg�D]}|d }||
vr�g|
|<|
|�|�q�|
��D]j\}}
|d!|���d"�7}|d|���d#�7}|
D]O}|d$|d%�d�7}|d&|�d'd(��d)|d%�d*�7}d+|v�r|d+��D]"\}}t	|t
tf��r|d,|�d-|�d�7}|d.|�d-|�d�7}q�|d7}q�q�|d/7}|d07}|d��D]Q\}}|�d1�d2k�rt|�dg�}|�rc|d|�d3t|��d4�7}||�d5t|��d6�7}�q3|d|�d7�7}||�d8�7}�q3|d|�d9�7}||�d:�7}�q3|d7}|d;7}|jj
|j||��|d<�WdSt�y�td=t��d>�YdSw)?z�
        Send a comprehensive email report of failed checks and alerts only.
        
        Args:
            results: Complete check results
        rerrfNrqrrz	 alerts, z failed checksrsrtruz
Total Alerts: z
Failed Checks: rvu
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .header { background-color: #f0f0f0; padding: 15px; border-radius: 5px; }
        .alert { margin: 10px 0; padding: 10px; border-left: 4px solid #ff4444; background-color: #fff5f5; }
        .alert.high { border-left-color: #ff4444; }
        .alert.medium { border-left-color: #ffaa00; }
        .summary { background-color: #e8f5e8; padding: 15px; border-radius: 5px; margin: 20px 0; }
        .metric { margin: 5px 0; }
        .check-section { margin: 20px 0; padding: 15px; border: 1px solid #ddd; border-radius: 5px; }
        .check-header { font-weight: bold; margin-bottom: 10px; }
        .failed { border-left-color: #ff4444; background-color: #fff5f5; }
    </style>
</head>
<body>
    <div class="header">
        <h2>🚨 Server Health Alert</h2>
        <p><strong>Server:</strong> rwz/</p>
        <p><strong>Total Alerts:</strong> z0</p>
        <p><strong>Failed Checks:</strong> rxu/<div class='summary'><h3>❌ Failed Checks</h3>rdr5r�r�z:</strong> ERROR - r�zFailed Check: ryu<h3>⚠️ Detected Alerts</h3>z
ALERTS DETECTED:
r3r,z<h4>z Alerts</h4>rzr{r.r|r-r]r}r~r/rr�r�u8<div class='summary'><h3>📊 System Status Summary</h3>z
SYSTEM STATUS:
r1r0z:</strong> OK (with z alerts)</div>z: OK (with z	 alerts)
u:</strong> ✅ OK</div>r�u:</strong> ❌ ERROR</div>z: ERROR
z</body></html>r�zError: r	)rhrjrrrAr�r>rgr�r�r�r�rr�rr�r@�print�sys�exc_info)rrlrerfr�r�r�rnro�	error_msgr�r�r�r�r�r�r3rrrrkds���������

�
�
�
���z(ServerMonitor._send_comprehensive_reportcCs�z+|jt��t��|jt��rt����ndt�t�	���
�t��t�t�	��d�WStyC}zdt
|�iWYd}~Sd}~ww)zz
        Get general system information.
        
        Returns:
            Dict containing system information
        N)rr�python_versionr�cpu_freq�	boot_time�uptimer5)rrr�rrr��_asdictr�
fromtimestampr�rBrAr@rC)rrHrrr�get_system_info�s�	��zServerMonitor.get_system_info�N)�__name__�
__module__�__qualname__�__doc__rrCrrrrIrRrcrp�listr�rkr�rrrrrs>/;&arrrcCst|�}|��S)z�
    Quick function to run all server checks.
    
    Args:
        alert_email: Email address to send alerts to (optional, uses config default if not provided)
    
    Returns:
        Dict containing all check results
    )rrp)r�monitorrrr�quick_server_check�s
r�r�)r�r_r�typingrrrrr�pathlibrrr��path�insertrC�__file__�parentrr�mailr
rr�rrrr�<module>s 
$h