3
s_\                 @   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k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 | _| j | _tjdddgtjddj d j | j d< | j	d d	| _
y&td
}|j | j d< W d Q R X W n tk
r   Y nX d S )NZlsb_releasez-rz-sT)stdoutZuniversal_newlinesr   ZFromstartz/var/log/upgrade/telemetryz/var/log/installer/media-infoZInstallMedia)_metrics_stages_hist_get_current_uptime_start_time
subprocessPopenPIPEZcommunicatestrip	add_stage
_dest_pathopenreadlineFileNotFoundError)selffr   r   r   __init__)   s    


z_Telemetry.__init__c             C   sp   d}y,t d}t|j j d }W dQ R X W n: tttfk
rj } ztjdt	|  W Y dd}~X nX |S )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   Zuptimer   er   r   r   r   8   s    
"z_Telemetry._get_current_uptimec             C   s6   | j  }| jdks|dkrdS || jt|| j < dS )z(Record installer stage with current timeN)r   r   r
   int)r   Z
stage_nameZnowr   r   r   r   C   s    z_Telemetry.add_stagec             C   s   || j d< dS )zRecord updater typeZTypeN)r	   )r   Zupdater_typer   r   r   set_updater_typeJ   s    z_Telemetry.set_updater_typec             C   s   || j d< dS )z*Record if the user had third party sourcesZThirdPartySourcesN)r	   )r   Zusingr   r   r   set_using_third_party_sourcesN   s    z(_Telemetry.set_using_third_party_sourcesc             C   s   | j | jd< tjj| j}ybtjj|s2tj| t| jd}t	j
| j| W dQ R X tj| jtjtjB tjB tjB  W n4 tk
r } ztjdt|  W Y dd}~X nX dS )z<Close telemetry collection

        Save to destination fileZ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   Z
target_dirr   r!   r   r   r   doneR   s    
z_Telemetry.done)
__name__
__module____qualname__r   r   r   r   r#   r$   r3   r   r   r   r   r   %   s   r   )r   r+   r&   r.   r   r   r   r   r   r   r   <module>   s   