o
    >I¼c–  ã                   @   sB   d dl Z d dlZd dlZd dlZd dlZdd„ ZG dd„ dƒZdS )é    Nc                   C   s   t jdu r	t ƒ t _t jS )z'Return a singleton _Telemetry instance.N)Ú
_TelemetryÚ
_telemetry© r   r   ú7/usr/lib/python3/dist-packages/DistUpgrade/telemetry.pyÚget   s   
r   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )r   Nc                 C   s¤   i | _ i | _|  ¡ | _tjg d¢tjdd� ¡ d  ¡ | j d< |  	d¡ d| _
z tdƒ�}| ¡ | j d	< W d   ƒ W d S 1 s@w   Y  W d S  tyQ   Y d S w )
N)Úlsb_releasez-rz-sT)ÚstdoutÚuniversal_newlinesr   ÚFromÚstartz/var/log/upgrade/telemetryz/var/log/installer/media-infoÚInstallMedia)Ú_metricsÚ_stages_histÚ_get_current_uptimeÚ_start_timeÚ
subprocessÚPopenÚPIPEÚcommunicateÚstripÚ	add_stageÚ
_dest_pathÚopenÚreadlineÚFileNotFoundError)ÚselfÚfr   r   r   Ú__init__)   s(   

þþþ

&ÿÿz_Telemetry.__init__c              
   C   sŠ   d}z#t dƒ�}t| ¡  ¡ d ƒ}W d  ƒ W |S 1 sw   Y  W |S  tttfyD } zt dt	|ƒ ¡ W Y d}~|S d}~ww )z6Get current uptime info. None if we couldn't fetch it.Nz/proc/uptimer   z)Exception while fetching current uptime: )
r   ÚfloatÚreadÚsplitr   ÚOSErrorÚ
ValueErrorÚloggingÚwarningÚstr)r   Úuptimer   Úer   r   r   r   8   s   
ÿûýÿ€ýz_Telemetry._get_current_uptimec                 C   s6   |   ¡ }| jdu s|du rdS || jt|| j ƒ< dS )z(Record installer stage with current timeN)r   r   r   Úint)r   Ú
stage_nameÚnowr   r   r   r   C   s   z_Telemetry.add_stagec                 C   ó   || j d< dS )zRecord updater typeÚTypeN©r   )r   Úupdater_typer   r   r   Úset_updater_typeJ   ó   z_Telemetry.set_updater_typec                 C   r+   )z*Record if the user had third party sourcesÚThirdPartySourcesNr-   )r   Úusingr   r   r   Úset_using_third_party_sourcesN   r0   z(_Telemetry.set_using_third_party_sourcesc              
   C   sÌ   | j | jd< tj | j¡}z<tj |¡st |¡ t| jdƒ�}t	 
| j|¡ W d  ƒ n1 s1w   Y  t | jtjtjB tjB tjB ¡ W dS  tye } zt dt|ƒ ¡ W Y d}~dS d}~ww )z<Close telemetry collection

        Save to destination fileÚStagesÚwNz(Exception while storing telemetry data: )r   r   ÚosÚpathÚdirnamer   ÚexistsÚmakedirsr   ÚjsonÚdumpÚchmodÚstatÚS_IRUSRÚS_IWUSRÚS_IRGRPÚS_IROTHr!   r#   r$   r%   )r   Ú
target_dirr   r'   r   r   r   ÚdoneR   s*   
ÿ
ÿÿ
ÿÿ€ÿz_Telemetry.done)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r/   r3   rD   r   r   r   r   r   %   s    r   )r#   r;   r6   r>   r   r   r   r   r   r   r   Ú<module>   s   