U
    B]                     @   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 | _|  | _tjdddgtjdd d  | j d< | 	d d	| _
z&td
}| | j d< W 5 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}z,t d}t|  d }W 5 Q R X W n: tttfk
rj } ztdt	|  W 5 d}~X Y 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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ThirdPartySourcesNr#   )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}zbtj|s2t| t| jd}t	
| j| W 5 Q R X t| jtjtjB tjB tjB  W n4 tk
r } ztdt|  W 5 d}~X Y nX dS )z<Close telemetry collection

        Save to destination fileZStageswz(Exception while storing telemetry data: N)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%   r4   r   r   r   r   r   %   s   r   )r   r,   r'   r/   r   r   r   r   r   r   r   <module>   s   