\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 www.csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv2/__pycache__/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv2/__pycache__/backup_utils.cpython-310.pyc


o

]2�g�8�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZddl
mZmZddlmZe�e�ZddlmZdd�Zd	d
�Zdd�Zddd�ZdS)�N)�datetime)�DatabaseConnection�
StorageTarget�	BackupJob�	BackupLog)�upload_to_storage�get_storage_space)�db)�format_sizec
Cs�z?|dvrddl}|j|||||dd�}|��WdS|dkr5ddl}|j|||||dd�}|��WdSt�d	|���Wd
Styh}	zt�d|�d|�d
|�d|�dt|	���
�WYd}	~	d
Sd}	~	ww)a�
    Test connection to a database server.
    
    Args:
        db_type (str): Database type (mysql, mariadb, postgresql)
        host (str): Database host
        port (int): Database port
        username (str): Database username
        password (str): Database password
        database (str): Database name
        
    Returns:
        bool: True if connection successful, False otherwise
    ��mysql�mariadbrN�)�host�port�user�password�database�connect_timeoutT�
postgresql)rrrr�dbnamer�Unsupported database type: FzDatabase connection error for � �:�/z: )�pymysql�connect�close�psycopg2�logger�error�	Exception�str)
�db_typerr�usernamerrr�connr�e�r'�>/var/www/html/yedekledb24/DatabaseBackupMaster/backup_utils.py�test_database_connections@��,��r)c
Cs�z�tjdd�}|�|j���|��dd|j��d|j��d|j��d|j��dd	d
ddd
ddddddd|j	d|g}|d}t
j|dd�}t�
|j�|jdkr_t�d|j�����WdSzIt|d��(}ddl}|�|d��}t�||�Wd�n1s�wYWd�n1s�wYt�|�t�||�t�d�WWdSty�}	zt�dt|	����WYd}	~	WdSd}	~	wwty�}	zt�d t|	����WYd}	~	dSd}	~	ww)!a+
    Perform MySQL/MariaDB backup using mysqldump with optimized parameters.
    
    Args:
        db_conn (DatabaseConnection): Database connection object
        temp_file (str): Path to temporary file for backup
        
    Returns:
        bool: True if backup successful, False otherwise
    F)�delete�	mysqldumpz--host=z--port=z--user=z--password=z--single-transactionz--quickz
--routinesz
--triggersz--eventsz--add-drop-tablez--add-drop-databasez--create-optionsz--extended-insertz
--compressz--max-allowed-packet=1Gz--set-gtid-purged=OFFz--databasesz-rz.gzT)�capture_outputrzmysqldump error: �rbN�wbz9Compressed MySQL backup file, reducing size significantlyz Could not compress backup file: zMySQL backup error: )�tempfile�NamedTemporaryFile�writer�encoderrrr$r�
subprocess�run�os�unlink�name�
returncoderr �stderr�decode�open�gzip�shutil�copyfileobj�remove�move�infor!�warningr")
�db_conn�	temp_file�pwd_file�cmd�compressed_file�result�f_inr<�f_outr&r'r'r(�perform_mysql_backupCsh



�
���
�����rKc
Cs�zKtj��}|j|d<t|j�|d<|j|d<|j|d<|j|d<dddd	d
ddd
d|g	}t	j
||dd�}|jdkrIt�
d|j�����WdSWdStyh}zt�
dt|����WYd}~dSd}~ww)a&
    Perform PostgreSQL backup using pg_dump with optimized parameters.
    
    Args:
        db_conn (DatabaseConnection): Database connection object
        temp_file (str): Path to temporary file for backup
        
    Returns:
        bool: True if backup successful, False otherwise
    �PGHOST�PGPORT�PGUSER�
PGPASSWORD�
PGDATABASE�pg_dumpz--format=customz--blobsz--createz--cleanz--if-existsz	--verbosez--compress=9z--file=T)�envr,rzpg_dump error: FzPostgreSQL backup error: N)r5�environ�copyrr"rr$rrr3r4r8rr r9r:r!)rCrDrRrFrHr&r'r'r(�perform_postgresql_backup�s6




�
��rUTc
Cs�t��}|j}t|jdd�}�z�t�d|���tj�|j	�}|sld|��}t�
|�||_tj
�|�tj
��|rizddlm}||j�WWd	Styh}zt�
dt|����WYd}~Wd	Sd}~wwWd	Stj�|j�}	|	s�d
|��}t�
|�||_tj
�|�tj
��|r�zddlm}||j�WWd	Sty�}zt�
dt|����WYd}~Wd	Sd}~wwWd	Sd}
z(t|	�\}}|dkr�||dnd}
|
dkr�d
|	j�d|
d�d�}
t�|
�Wnt�y	}zdt|���}
t�|
�WYd}~nd}~wwt���d�}|jdv�r1|j�d|�d�}|jdk�r0d|j�d|�d�}n	|j�d|�d�}tj�t �!�|�}d	}|jdv�rQt"||�}nZ|jdk�r]t#||�}nNd|j��}t�
|�||_tj
�|�tj
��|�r�zddlm}||j�WWd	St�y�}zt�
dt|����WYd}~Wd	Sd}~wwWd	S|�s�d}t�
|�||_tj
�|�tj
��|�r�zddlm}||j�WWd	St�y�}zt�
dt|����WYd}~Wd	Sd}~wwWd	Stj�$|�}z�zt%|	||�}d|_&|
�rd|
��|_nd|_||_'||_(Wnlt�y�}z_dt|���}t�
|�||_tj
�|�tj
��|�rnz
ddlm}||j�Wnt�ym}zt�
dt|����WYd}~nd}~wwWYd}~Wz	t�)|�WWd	SYWd	Sd}~wwWzt�)|�WnYn
zt�)|�WwYwt�*�|_+t��|}||_,tj
�|�tj
��t�d |�d!|d"�d#��|�r�zddlm}||j�WWd$St�y�}zt�
dt|����WYd}~Wd$Sd}~wwWd$St�y^}zRd |�d%t|���}t�
|�||_tj
�|�tj
��|�rSz
ddlm}||j�Wnt�yR}zt�
dt|����WYd}~nd}~wwWYd}~d	Sd}~ww)&z�
    Run a backup job.
    
    Args:
        job (BackupJob): Backup job to run
        send_email (bool): Whether to send email notification
        
    Returns:
        bool: True if backup successful, False otherwise
    �failed)�job_id�statuszStarting backup job: z&Database connection not found for job r)�send_backup_notificationz#Failed to send email notification: NFz!Storage target not found for job �d�
zWarning: Storage target z has less than 10% free space (z.1fz% remaining)zCould not check storage space: z
%Y%m%d_%H%M%Sr�_z.sqlr
�mariadb_z.dumprrzBackup creation failed�successzBackup completed successfully. zBackup completed successfullyzFailed to upload backup: zBackup job z completed successfully in z.2fz secondsTz	 failed: )-�timer7r�idrrAr�query�get�database_idr �messager	�session�add�commit�email_utilsrYr!r"r�
storage_idrrBr�now�strftimer#rr5�path�joinr/�
gettempdirrKrU�getsizerrX�backup_file�backup_sizer?�utcnow�last_run�duration)�job�
send_email�
start_time�job_name�
backup_logrC�msgrY�	email_err�storage�storage_warning�
free_space�total_space�percent_freer&�	timestamp�backup_filenamerD�backup_successrq�remote_pathrtr'r'r(�
run_backup�sZ


���


���
����

���

���


 ������

���

 ����r�)T)r5r_r3r/�loggingr=r<r�modelsrrrr�
storage_utilsrr�appr	�	getLogger�__name__r�utilsr
r)rKrUr�r'r'r'r(�<module>s"
/I/

© KUJUNTI.ID