PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /usr/libexec/kcare/python/kcarectl/__pycache__/
Server: Linux red.truehostdns.com 4.18.0-553.150.1.el8_10.x86_64 #1 SMP Fri Jul 31 15:23:31 EDT 2026 x86_64
IP: 51.161.15.103
Choose File :

Url:
Dir : //usr/libexec/kcare/python/kcarectl/__pycache__/delivery_kit.cpython-36.pyc

3

0�j+�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
mZmZm
Z
mZmZddlmZdd�ZGdd�de�ZGd	d
�d
e�ZdS)�N)�NamedTemporaryFile)�auth�config�
http_utils�ipv6_support�	log_utils�utils)�run_commandcCs<t|�}x(dD] }|dkr&dj||�S|d}qWdj|�S)	zBRender a byte count as a short human-readable string for the logs.�B�KiB�MiB�GiBg�@z{0:.1f} {1}z{0:.1f} TiB)r
rrr
)�float�format)Z	num_bytes�sizeZunit�r�2/usr/libexec/kcare/python/kcarectl/delivery_kit.py�format_sizes
rc@s�eZdZdZdZdZdd�Zedd��Zedd��Z	d	d
�Z
d(d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zejejd!�d"d#��Zd$d%�Zd&d'�ZdS))�DataPackagez�Generic archive package for the patch server uploads pipeline.

    Based on DataPackage from eportal (delivery_kit.py). Subclasses
    supply the manifest `data_type`, the `upload_uri` to PUT the
    archive to and the `max_size` payload limit.
    �cCsd|_g|_d|_dS)Nr)�_tar�_errors_buffer�_total_payload_size)�selfrrr�__init__-szDataPackage.__init__cCst�dS)N)�NotImplementedError)rrrr�max_size3szDataPackage.max_sizecCs|j�}t|j�S)N)�_ensure_tar_created�str�name)r�tarrrr�archive_path8szDataPackage.archive_pathcCs�d}d}yttj|�ddd�\}}}Wn*tk
rP}zt|�}WYdd}~XnX|rh|jdj||��|dk	r�|j|tj	|dd�d�dS)NT)�catch_stdout�catch_stderrz!failed to dump stdout of {0}:
{1}zutf-8)�encoding)�
data_bytes)
r	�shlex�split�	Exceptionr�	log_errorr�add_filer�bstr)r�arcname�cmd�stdout�stderr�_�errr�
add_stdout>szDataPackage.add_stdoutNFc	Csh|dkr|dkrtd��|j�}d}|dk	rZtjj|�sL|jdj|��dStjj|�}nt|�}|j	|�s�|jdj|��dS|r�|j
|�r�|jdj|t|�t|j
�t|j���dSyp|r�|j||d�n"tj|�}||_|j|tj|��|�s*|j|7_tjdj|t|�t|j��dd	�Wn6tk
�rb}z|jd
j||��WYdd}~XnXdS)Nz"No src_path or data_bytes providedrzfile not found: {0}z no available space to store: {0}zPskipping {0}: {1} would exceed the {2} report size limit (already collected {3}))r,z%collected {0}: {1} (report total {2})F)�	print_msgzfailed to store {0}: {1})�
ValueErrorr�os�path�existsr)r�getsize�len�_check_required_space�_check_total_payload_limit�log_warningrrr�add�tarfile�TarInfor�addfile�io�BytesIOr�loginfor()	rr,�src_pathr%�skip_limit_checkr �
entry_size�infor1rrrr*NsJ


zDataPackage.add_filecCsbytjtj|dd�dd�}Wn2tk
rN}z|jdj||��dSd}~XnX|j||d�dS)N�)�indentzutf-8)r$zfailed to dump {0}:
{1})r%)rr+�json�dumps�	TypeErrorr)rr*)rr,�datar%r1rrr�add_json�szDataPackage.add_jsoncCstj|j�}|j|j|kS)N)r5�statvfsr!�f_frsize�f_bfree)rrFrOrrrr:�sz!DataPackage._check_required_spacecCs|j|j|kS)N)rr)rrFrrrr;�sz&DataPackage._check_total_payload_limitcCsd|jttj��d�S)N�)Zschema_version�typeZtime_created)�	data_type�int�time)rrrr�
make_manifest�szDataPackage.make_manifestcCsNtjtj|j�dd�dd�}|j�}tjd�}t|�|_	|j
|tj|��dS)NrH)rIzutf-8)r$z
manifest.json)
rr+rJrKrWrr>r?r9rr@rArB)rr%r rGrrr�
_add_manifest�s


zDataPackage._add_manifestcCs&|j�}tj|dd�|jj|�dS)NF)r3)�stripr�logerrorr�append)rZ	error_msgrrrr)�szDataPackage.log_errorcCs&|j�}tj|dd�|jj|�dS)NF)r3)rYr�logwarnrr[)rZwarning_msgrrrr<�szDataPackage.log_warningcCs�x�d
D]�}tdj|dd��dd�}|j�y6tjdj|j�dd	�tj|j|d
d�|_|j	�|St
k
r�}zb|jdk	r�y|jj�Wnt
k
r�YnXd|_tjj
|j�r�tj|j�t|tj�sЂWYdd}~XqXqWtjd��dS)N�w:xz�w:bz2�w:gzz.tar.{0}�F)�suffix�deletezCreating DataPackage: {0})r3T)r�modeZdereferencez%No supported compression method found)r]r^r_)rr�closerrCrr>�openrrXr(r5r6r7�unlink�
isinstanceZCompressionError)rZcompression_modeZtmpfile�errrrr�	__enter__�s(

zDataPackage.__enter__cCsP|jr,dj|j�d}|jdtj|�dd�|jrL|jj�|rL|j�dSdS)N�
z
errors.logT)r%rEF)r�joinr*rr+rrd�remove_archive)r�exc_typeZexc_val�exc_tb�errorsrrr�__exit__�s
zDataPackage.__exit__)�loggercCs$|jr tjj|j�r tj|j�dS)N)rr5r6r7r!rf)rrrrrl�szDataPackage.remove_archivecCs|jstd��|jS)Nz/DataPackage should be used as a context manager)r�RuntimeError)rrrrr�szDataPackage._ensure_tar_createdcCst|j�j�tjj|j�}d|kr4||jd�d�nd}ttj	��|}t
j�|j|}t
j|j|tj�d�|S)aSend the package archive to the patch server.

        Upload errors propagate to the caller (see the eportal
        precedent): wrap with utils.catch_errors where a silent
        failure is acceptable.

        :return: Upload name (package identifier)
        �.Nr)�
upload_urlZauth_string)rrdr5r6�basenamer!�findr�uuidZuuid4r�get_patch_server�
upload_urirZupload_filer�get_http_auth_string)rru�ext�upload_namertrrr�send�s
zDataPackage.send)NNF)�__name__�
__module__�__qualname__�__doc__rTryr�propertyrr!r2r*rNr:r;rWrXr)r<rirpr�catch_errorsrr\rlrr}rrrrr"s(
;

	 rc@s eZdZdZdZedd��ZdS)�KernelAnomalyPackagezkernel-anomalyz/upload/kernel-anomaly/cCstjS)N)rZ$KERNEL_ANOMALY_REPORT_MAX_SIZE_BYTES)rrrrrszKernelAnomalyPackage.max_sizeN)r~rr�rTryr�rrrrrr�sr�)rArJr5r&r>rVrw�tempfiler�kcarectlrrrrrrZkcarectl.process_utilsr	r�objectrr�rrrr�<module>s y