Uname: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

403WebShell
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 :  /var/www/vhost/itmtrsrv.arukustech.com/api/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/vhost/itmtrsrv.arukustech.com/api/__pycache__/main.cpython-310.pyc
o

@q"jod�@sddlmZmZmZmZmZddlmZddlm	Z	m
Z
ddlmZddl
Z
ddlZddlmZmZmZddlZddlmZddlZddlmZdd	lmZdd
lmZddlmZedd
�ZddlmZddlmZddlmZddl m!Z!ddl"m#Z#eed�Z$e$ej%_$e�&e!�e�'e�dedefdd��Z(dddde
j)j*ddd�Z+dd �Z,dd!lmZed�fd"e-fd#d$�Z.d%Z/d&Z0d'Z1ed(gd)d*�Z2ed+d,�Z3d-d.�Z4dvd/e5d0efd1d2�Z6ee3�fd3e-fd4d5�Z7d6Z8d6Z9d7Z:d8Z;e�<d9�d:d;��Z=e�>d+�e$�?d<�ded/e5fd=d>���Z@ee7�fd?e5fd@dA�ZAe�<dB�eeA�fdCdD��ZBe�>dE�eeA�fd/e5fdFdG��ZCe�DdH�eeA�fdIeEfdJdK��ZFe�>dL�e$�?dM�ee.�fdedNe5fdOdP���ZGe�>dQ�ee7�fd/e5dRe5fdSdT��ZHe�DdU�ee7�fdVeEdRe5fdWdX��ZIe�<dY�ee7�fdRe5fdZd[��ZJe�>d\�e$�?d]�ded/e5fd^d_���ZKe�>d`�d/e5fdadb��ZLe�<dc�ee7�fdVeEdde-dRe5fdedf��ZMe�<dg�dhee7�fdVeEdie-dje-dke-dRe5f
dldm��ZNe�<dn�dhee7�fdVeEdie-dje-doe-dRe5f
dpdq��ZOe�<dr�eeA�fdse5fdtdu��ZPdS)w�)�FastAPI�Request�Header�
HTTPException�Depends)�OAuth2PasswordBearer)�JWTError�jwt)�CryptContextN)�datetime�timezone�	timedelta)�send_server_alert)�send_password_reset_email)�
monthrange)r)rzServer Monitor API)�title)�Limiter)�get_remote_address)�RateLimitExceeded)�SlowAPIMiddleware��JSONResponse)�key_func�request�exccCstdddid�S)Ni��detailz*Too many requests. Please try again later.)�status_code�contentr)rr�r�main.py�rate_limit_handler"s�r z5arukus-db-8.ca0xxskptwru.ap-south-1.rds.amazonaws.com�dbusr_itmtrsrvzz<0mF<cbCSwk]-tkJTN{LSZsL(sI_Pg�
itmtrsrv_prod�
T��host�user�password�database�cursorclass�connect_timeout�
autocommitc
Cspztjtdtdtdtdtjjddd�}|WSty7}ztdt|��td	d
t|���d��d}~ww)Nr%r&r'r(r#Tr$zDATABASE CONNECTION ERROR:i�zDatabase connection failed: �rr)	�pymysql�connect�	DB_CONFIG�cursors�
DictCursor�	Exception�print�strr)�conn�errr�get_db5s&�
���r7)r�
authorizationcCsv|r|�d�s
tddd��|�d�d}t�}|�tjj�}|�d|f�|�	�}|�
�|�
�|s9tddd��|S)	NzBearer �zMissing API keyr,� �z4SELECT id, server_name FROM servers WHERE api_key=%szInvalid API key)�
startswithr�splitr7�cursorr-r0r1�execute�fetchone�close)r8�api_keyr5�cur�serverrrr�verify_api_keyRs�rE�CHANGE_THIS_TO_RANDOM_SECRET�HS256�<�bcrypt�auto)�schemes�
deprecatedz	/v1/login)�tokenUrlcCs$t|���}t|���}t�||�S�N)r4�strip�pwd_context�verify)�plain_password�hashed_passwordrrr�verify_passwordss�rT�data�
expires_deltacCs@|��}t�tj�|ptdd�}|�d|i�tj|t	t
d�S)NrH��minutes�exp)�	algorithm)�copyr�nowr�utcr
�updater	�encode�
SECRET_KEY�	ALGORITHM)rUrV�	to_encode�expirerrr�create_access_token}srd�tokencCs�zBtj|ttgd�}|�d�}|durtddd��t�}|�tj	j
�}|�d|f�|��}|�
�|�
�|dur@tddd��|WStyOtddd��w)N)�
algorithms�subr9z
Invalid tokenr,z0SELECT id, email, role FROM users WHERE email=%s�User not found)r	�decoder`ra�getrr7r>r-r0r1r?r@rAr)re�payload�email�
connectionr>r&rrr�get_current_user�s"
�rn�P�Z�z/healthcCsddiS)N�status�okrrrrr�health�srtz5/minutec

Cs td|�t|�dd����}t|�dd����}|r|s#tddd��t�}|�tjj	�}|�
d|f�|��}|��|��|sHtd	d
d��z	t
||d�}Wntyj}z
tdt|��td	d
d��d}~ww|sstd	dd��t|d|dd�ttd�d�}	|	d|d|dd�d�S)NzLOGIN REQUEST:rl�r'�zEmail and password requiredr,z^
        SELECT id,email,password_hash,role
        FROM users
        WHERE email=%s
        r9rh�
password_hashzPASSWORD VERIFY ERROR:zPassword verification failedzInvalid credentials�role)rgrxrW)rUrV�bearer)rlrx)�access_token�
token_typer&)r3r4rjrOrr7r>r-r0r1r?r@rArTr2rdr
�ACCESS_TOKEN_EXPIRE_MINUTES)
rrUrlr'rmr>r&�password_matchr6rzrrr�login�sl
��	�����������r~�current_usercCs|�d�dkr
tddd��|S)Nrx�Admini�zOnly Admins can manage usersr,)rjr)rrrr�check_admin_role�sr�z/v1/admin/userscC�:t�}|�tjj�}|�d�|��}|��|��|S)Nz-SELECT id, email, role, created_at FROM users�r7r>r-r0r1r?�fetchallrA)�adminrmr>�usersrrr�
list_users�s
r�z/v1/admin/add-userc	
Cs�|�d�}|�d�}|�dd�}|r|stddd��t�|�}t�}|�tjj�}z3z|�	d|||f�|�
�WntyO}z
|��tdd	d��d}~wwW|�
�|�
�d
diS|�
�|�
�w)Nrlr'rx�viewerrvzMissing datar,zBINSERT INTO users (email, password_hash, role) VALUES (%s, %s, %s)zUser already exists�messagezUser created successfully)rjrrP�hashr7r>r-r0r1r?�commitr2�rollbackrA)	rUr�rlr'rxrSrmr>r6rrr�add_users2


�����
r�z/v1/admin/delete-user/{user_id}�user_idcC�Bt�}|�tjj�}|�d|f�|��|��|��ddiS)NzDELETE FROM users WHERE id = %sr�zUser deleted�r7r>r-r0r1r?r�rA)r�r�rmr>rrr�delete_user#sr�z/v1/metricsz	60/minuterDc
�s��|��IdH}|d�t�}|�tjj��d}|�d�r/tt|d�	��d�}|r/|�d�}��
d�|�d�|�di��d�|�di��d	�|�di��d�||�d
�t�t
j�f���
dt�t
j��f���
d�tf�����t��tkr�td
d��D��}tdd��D��}tdd��D��}���fdd�}	|r�|	dd�|r�|	dd�|r�|	dd���fdd�}
|
d|�|
d|�|
d|�|�����|��ddiS)zC
    Receives metrics from agent using API key authentication.
    N�id�disk�percentz�
        INSERT INTO metrics
        (server_id, cpu_usage, ram_used_mb, ram_total_mb, ram_percent,
         disk_used_percent, uptime_seconds, created_at)
        VALUES (%s,%s,%s,%s,%s,%s,%s,%s)
    �	cpu_usage�ram�used_mb�total_mb�uptime_secondsz+UPDATE servers SET last_seen=%s WHERE id=%sz�
        SELECT cpu_usage, ram_percent, disk_used_percent
        FROM metrics
        WHERE server_id=%s
        ORDER BY created_at DESC
        LIMIT %s
    cs�(�|]}|dduo|dtkVqdS)r�N)�
CPU_THRESHOLD��.0�mrrr�	<genexpr>q�
��
�z"receive_metrics.<locals>.<genexpr>csr�)�ram_percentN)�
RAM_THRESHOLDr�rrrr�vr�csr�)�disk_used_percentN)�DISK_THRESHOLDr�rrrr�{r�cs"t�|�}�dd}�dd}�dd}��d�|f����}|sK��d�|||||t�tj�f���d�f����d}t|||�dS|d	d
}��d|t�tj�|df�|t	dkr���d
�|||||t�tj�f���d�f����d}t|||�d��dSdS)Nrr�r�r�z�
                SELECT *
                FROM alerts
                WHERE server_id=%s AND alert_type=%s AND is_active=TRUE
                LIMIT 1
            a
                    INSERT INTO alerts
           (
            server_id,
            alert_type,
    message,
    cpu_usage,
    ram_usage,
    disk_usage,
    notification_count,
    last_notified_at,
    is_active
)
VALUES (%s,%s,%s,%s,%s,%s,1,%s,TRUE)
                z+SELECT server_name FROM servers WHERE id=%s�server_name�notification_countr;z�
                    UPDATE alerts
                    SET notification_count=%s,
                        last_notified_at=%s
                    WHERE id=%s
                r�a 
                        INSERT INTO alerts
                        (
                            server_id,
                            alert_type,
                            message,
                            cpu_usage,
                            ram_usage,
                            disk_usage,
                            notification_count,
                            last_notified_at,
                            is_active
                        )
                        VALUES (%s,%s,%s,%s,%s,%s,1,%s,FALSE)
                    z/ usage above threshold for 3 consecutive checks)
�html�escaper?r@rr\rr]r�CONSECUTIVE_CHECKS)�
alert_typer��
latest_cpu�
latest_ram�latest_disk�existingr��	new_count�r>�last_metrics�	server_idrr�create_alert�sl
�
���
��
�����z%receive_metrics.<locals>.create_alert�CPUz,CPU usage above 80% for 3 consecutive checks�RAMz,RAM usage above 80% for 3 consecutive checks�DISKz-Disk usage above 90% for 3 consecutive checkscs&|s��dt�tj��|f�dSdS)Nz�
                    UPDATE alerts
                    SET is_active=FALSE, resolved_at=%s
                    WHERE server_id=%s AND alert_type=%s AND is_active=TRUE
                )r?rr\rr])r��is_alert)r>r�rr�
resolve_alert�s
��z&receive_metrics.<locals>.resolve_alertrr�success)�jsonr7r>r-r0r1rj�next�iter�valuesr?rr\rr]r�r��len�allr�rA)rrDrUrm�disk_percent�
first_disk�	cpu_alert�	ram_alert�
disk_alertr�r�rr�r�receive_metrics0sl�



�������i





r�z/v1/admin/add-serverr&cCs�t�}|�tjj�}|�d�}|�d�}|�d�}|s!tddd��t�d�}|�	d||||f�|�
�|��|��d	||d
�S)Nr��project�environmentrvzServer name requiredr,� zn
        INSERT INTO servers (server_name, api_key, project, environment)
        VALUES (%s, %s, %s, %s)
    r�)rrr�rB)r7r>r-r0r1rjr�secrets�	token_hexr?r�rA)rUr&rmr>r�r�r�rBrrr�
add_servers$




��r�z#/v1/admin/delete-server/{server_id}r�cCr�)NzDELETE FROM servers WHERE id=%srr�deletedr�)r�r&rmr>rrr�
delete_server)sr�z/v1/serverscCr�)Na�
        SELECT
            s.id,
            s.server_name,
            s.project,
            s.environment,
            s.last_seen,

            m.cpu_usage,
            m.ram_percent,
            m.disk_used_percent,
            m.created_at,

            -- Alert info
            COUNT(a.id) AS active_alerts_count,
            MAX(CASE WHEN a.is_active = TRUE THEN 1 ELSE 0 END) AS has_active_alert,
            GROUP_CONCAT(DISTINCT a.alert_type) AS alert_types

        FROM servers s

        LEFT JOIN metrics m ON m.id = (
            SELECT id FROM metrics
            WHERE server_id = s.id
            ORDER BY created_at DESC
            LIMIT 1
        )

        LEFT JOIN alerts a
            ON a.server_id = s.id
           AND a.is_active = TRUE

        GROUP BY s.id

        ORDER BY
            has_active_alert DESC,        -- ?? Problem servers first
            m.created_at DESC             -- Latest activity next
    r�)r&rmr>�serversrrr�get_servers;s
&r�z/v1/forgot-passwordz3/minutec	Cs�|�d�}|s
tddd��t�}|�tjj�}|�d|f�|��}|rNt	t
���}t�
tj�tdd�}|�d|d	||f�|��d
|��}t||�|��|��ddiS)
NrlrvzEmail requiredr,z#SELECT id FROM users WHERE email=%s�rWzw
            INSERT INTO password_resets (user_id, token, expires_at, used)
            VALUES (%s, %s, %s, 0)
        r�z4https://servermonitor.tsdemo.co.in/reset.html?token=rrz If email exists, reset link sent)rjrr7r>r-r0r1r?r@r4�uuid�uuid4rr\rr]r
r�rrA)	rrUrlr5rCr&re�expiry�
reset_linkrrr�forgot_passwordps&
�

r�z/v1/reset-passwordcCs�|�d�}|�d�}|r|stddd��t�}|�tjj�}|�d|t�	t
j�f�|��}|s6tddd��t
�|�}|�d||d	f�|�d
|df�|��|��|��dd
iS)Nrer'rvzInvalid requestr,z�
        SELECT pr.id, pr.user_id
        FROM password_resets pr
        WHERE pr.token=%s
          AND pr.used=0
          AND pr.expires_at > %s
    zInvalid or expired tokenzK
        UPDATE users
        SET password_hash=%s
        WHERE id=%s
    r�zK
        UPDATE password_resets
        SET used=1
        WHERE id=%s
    r�rrzPassword reset successful)rjrr7r>r-r0r1r?rr\rr]r@rPr�r�rA)rUre�new_passwordr5rC�reset�hashedrrr�reset_password�s.

�

��r�z/v1/reports/monthly�monthc
	Cs�ztt|�d��\}}Wn
tytddd��wt||dtjd�}t||�d}t|||dddtjd�}t	�}|�
tjj
�}	|	�d	|||f�|	��}
|	��|��g}|
D]}|�|d
�d�|dphd
|dpmd
|dprd
d��qY|S)zO
    Returns per-day AVG CPU/RAM/DISK usage for a server for a given month
    �-rvzInvalid month formatr,r;)�tzinfo��;ak
        SELECT
            DATE(created_at) AS day,
            ROUND(AVG(cpu_usage), 2) AS cpu,
            ROUND(AVG(ram_percent), 2) AS ram,
            ROUND(AVG(disk_used_percent), 2) AS disk
        FROM metrics
        WHERE server_id = %s
          AND created_at BETWEEN %s AND %s
        GROUP BY DATE(created_at)
        ORDER BY DATE(created_at)
    �dayz%d�cpurr�r�)r�r�r�r�)�map�intr=r2rrrr]rr7r>r-r0r1r?r�rA�append�strftime)
r�r�r&�year�mon�
start_date�end_day�end_dater5rC�rows�result�rrrr�monthly_report�s2
��




�r�z/v1/reports/analytics�AVGr�r��	stat_typecCs�|dvr
tddd��zt�|�}t�|�}Wn	tddd��|}t�}|�tjj�}	|dkrEd|�d|�d	|�d
�}
|	�|
||f�nd|�d|�d	|�d�}
|	�|
|||f�|	�	�}|	�
�|�
�|S)zt
    Advanced analytics for date range
    stat_type: AVG | MAX | MIN
    server_id = 0 => all servers combined
    �r��MAX�MINrvzInvalid stat_typer,zInvalid date formatrzS
            SELECT
                DATE(created_at) AS day,
                ROUND(z.(cpu_usage), 2) AS cpu,
                ROUND(z0(ram_percent), 2) AS ram,
                ROUND(z�(disk_used_percent), 2) AS disk
            FROM metrics
            WHERE created_at BETWEEN %s AND %s
            GROUP BY DATE(created_at)
            ORDER BY day
        z�(disk_used_percent), 2) AS disk
            FROM metrics
            WHERE server_id = %s
              AND created_at BETWEEN %s AND %s
            GROUP BY DATE(created_at)
            ORDER BY day
        )rr�
fromisoformatr7r>r-r0r1r?r�rA)r�r�r�r�r&�start�end�aggr5rC�queryr�rrr�analytics_report�s>
������r�z/api/v1/reports/range�statc	Cs�t�}|�tjj�}dddd��|��d�}d}||g}	|dkr'd}|	�|�d|�d	|�d
|�d|�d�	}
|�|
|	�|�	�}|�
�|�
�|S)
Nr�r�r�r�rurzAND server_id=%szA
        SELECT
            DATE(created_at) AS day,
            z (cpu_usage) AS cpu,
            z"(ram_percent) AS ram,
            zd(disk_used_percent) AS disk
        FROM metrics
        WHERE created_at BETWEEN %s AND %s
        z<
        GROUP BY DATE(created_at)
        ORDER BY day
    )r7r>r-r0r1rj�upperr�r?r�rA)r�r�r�r�r&r5rCr��
server_filter�paramsr�r�rrr�
reports_rangeAs,
����
r�z/v1/admin/alertsr�cCs>t�}|�tjj�}d}|�|�|��}|��|��|S)Na�

        SELECT

            a.id,

            s.server_name,

            a.alert_type,

            a.message,

            a.cpu_usage,

            a.ram_usage,

            a.disk_usage,

            a.notification_count,

            a.is_active,

            a.created_at,

            a.last_notified_at,

            a.resolved_at

        FROM alerts a

        INNER JOIN servers s
            ON s.id = a.server_id

        ORDER BY a.id DESC

        ##LIMIT 10000

    r�)r�rmr>r��alertsrrr�get_alert_historyls
'r�rN)Q�fastapirrrrr�fastapi.securityr�joserr	�passlib.contextr
r-r�rrr
r��
utils.emailerrr�r�calendarr�app�slowapir�slowapi.utilr�slowapi.errorsr�slowapi.middlewarer�fastapi.responsesr�limiter�state�add_middleware�exception_handlerr r0r1r/r7r4rEr`rar|rP�
oauth2_schemerT�dictrdrnr�r�r�r�rjrt�post�limitr~r�r�r��deleter�r�r�r�r�r�r�r�r�r�r�r�rrrr�<module>s�


	�



L	���W 4$0����5������C������*��

Youez - 2016 - github.com/yon3zu
LinuXploit