%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python37/lib/python3.7/site-packages/lvestats/lib/__pycache__/
Upload File :
Create Path :
Current File : //opt/alt/python37/lib/python3.7/site-packages/lvestats/lib/__pycache__/snapshot.cpython-37.pyc

B

��1b��@s�ddlmZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddlmZddl
Z
ddlmZdZdZee�ZGdd	�d	e�Zed
d��ZdS)�)�absolute_importN)�Optional�List)�contextmanager)�mapz/var/lve/snapshotsz	.snapshotc@s�eZdZdZd$dd�Zdd�Zedd��Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zedd��Zed%d d!��Zed"d#��ZdS)&�Snapshotad
    This class is responsible for loading and saving snapshot files for the interval
    The files will be saved in a format of: /var/lve/snapshots/[uid]/dump_time.snapshot
    dump_time is the timestamp/integer
    The directories /var/lve/snaphosts/[uid] and the dump files itself will be owned by user
    They will not be readable by other users.
    �cCs||_||_t�d�|_dS)Nzlib-snapshot)�
compresslevel�incident�loggingZ	getLogger�log)�selfr
r	�r�F/opt/alt/python37/lib/python3.7/site-packages/lvestats/lib/snapshot.py�__init__!szSnapshot.__init__c	Csn|d}|dk	st�|�|�t�t�|���|j�}|�|��"}|�	|�|j
�d|j�WdQRX|jS)NZ	dump_timezSnapshot dumped to file %s)
�AssertionError�_replace_unicode_data�zlib�compress�json�dumps�encoder	�create_file�writer�debug�name)r
�data�	dump_dateZjson_compressed�frrr�save's

z
Snapshot.savecCst|t�r|�dd�S|S)Nzutf-8�replace)�
isinstance�bytes�decode)�objrrr�_to_unicode4s
zSnapshot._to_unicodecCstg}x*|�dg�D]}|�tt|j|���qW||d<g}x*|�dg�D]}|�tt|j|���qJW||d<dS)NZsnap_sqlZ	snap_http)�get�append�listrr%)r
rZ	u_queriesZqueryZu_urlsZhttprrrr:szSnapshot._replace_unicode_datacCs"|��}tj�|�rt�|�SgS)N)�get_dir�os�path�isdir�listdir)r
�dir_rrr�_get_file_listFs
zSnapshot._get_file_listcCs|�|��||�S)z�
        Return ordered list of timestamps when snapshots for this use were created
        :param from_ts:
        :param to_ts:
        :return: list of timesteamps, ordered for that period
        )�snapshot_filterr/)r
�from_ts�to_tsrrr�get_ts_listMszSnapshot.get_ts_listcCs�g}x�|�||�D]�}y\|�|�|��}t��sVt|jd��|�|�}WdQRXn
|�|�}|�t	�
|��Wqttt
fk
r�}z(|j�d|�|�|��t|�f�Wdd}~XYqXqW|S)z�
        Get all snapshot for a period
        :param from_ts
        :param to_ts
        :return: list of snapshots, ordered by date
        �uidNzCorrupted file: %s (%s))r3�
get_file_name�
ts_to_namer*�geteuid�drop_privilegesr
�read_file_contentr'r�loads�IOError�
ValueError�OSErrorrZwarning�str)r
r1r2�result�ts�filename�content�verrr�
get_snapshotsWs
:zSnapshot.get_snapshotscCszt|d��}|��}WdQRXyt�|�}WnDtjk
rpt�||j�}t|d��}|�|�WdQRXYnX|��S)N�rb�wb)	�open�readr�
decompress�errorrr	rr#)r
rArrBZcompressed_contentrrrr9mszSnapshot.read_file_contentcCs|�|jd|jd�S)zZ
        Load all snapshots for given incident
        :return: list of snapshots
        Zincident_start_timeZincident_end_time)rDr
)r
rrr�get_incident_snapshotsyszSnapshot.get_incident_snapshotscCstj�tt|jd��S)Nr4)r*r+�join�
SNAPSHOT_PATHr>r
)r
rrrr)�szSnapshot.get_dircCstj�|��|�S)N)r*r+rLr))r
rrrrr5�szSnapshot.get_file_namecCs|��}tj�|�s~y.t�|�t�|d�t�||jdd�Wn:tt	fk
r|}z|j
�d|t|��Wdd}~XYnX|�
|�|��}t|jd��`t|d�}yt�|��d�Wn:tt	fk
r�}z|j
�d|t|��Wdd}~XYnXWdQRX|S)	z�
        create file, change its ownership & permissions if needed. Create directories if needed as well
        :param dump_date: int timestamp used as file name
        :return: open File object
        i�r4rzUnable to create dir %s (%s)NrF�z&Unable to set file permissions %s (%s))r)r*r+�exists�makedirs�chmod�chownr
r;r=rrJr>r5r6r8rG�fchmod�fileno)r
rr.�e�	file_name�file_rrrr�s 
&
0zSnapshot.create_filecCsj|��}t�|�}|�|�}|j||d�}||krBtj|dd�n$x"|D]}t�|�|�|���qHWdS)z�
        Delete old snapshots. If there are no more
        :param to_ts: up to which timestamp to remove snapshots
        :return: None
        )r2T)�
ignore_errorsN)	r)r*r-r0�shutil�rmtree�remover5r6)r
r2Z_dir�filesZ
all_snapshotsZts_to_remover@rrr�
delete_old�s


zSnapshot.delete_oldcCsB|�t�r>|dt�}|��r>yt|�Stk
r<YnXdS)Nr)�endswith�SNAPSHOT_EXT�SNAPSHOT_EXT_LEN�isdigit�intr<)rWr@rrr�get_ts�s
zSnapshot.get_tsNcCsh|dkrd}|dkrtj}g}x@|D]8}t�|�}|dk	r$||krN|kr$nq$|�|�q$Wt|�S)Nr)�sys�maxsizerrcr'�sorted)r\r1r2r?rAr@rrrr0�s

 zSnapshot.snapshot_filtercCst|�tS)N)r>r_)r@rrrr6�szSnapshot.ts_to_name)r)NN)�__name__�
__module__�__qualname__�__doc__rr�staticmethodr%rr/r3rDr9rKr)r5rr]rcr0r6rrrrrs$



rc	csxt��t��t��}}}t�d�d}t�g�t�|�t�|�z
dVWdt�|�t�|�t�|�XdS)NZnobody�)	r*�getuid�getgid�	getgroups�pwd�getpwnam�	setgroups�setegid�seteuid)r4Zold_uidZold_gidZ
old_groups�gidrrrr8�s





r8)Z
__future__rrrr*rdrYr�typingrr�
contextlibrrp�builtinsrrMr_�lenr`�objectrr8rrrr�<module>s ;

Zerion Mini Shell 1.0