
    >Ic                     F    d dl Z d dlZd dlZd dlZd dlZd Z G d d      Zy)    Nc                  h    t         j                  t               t         _        t         j                  S )z'Return a singleton _Telemetry instance.)
_Telemetry
_telemetry     7/usr/lib/python3/dist-packages/DistUpgrade/telemetry.pygetr	      s$    $ *
   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)r   Nc                    i | _         i | _        | j                         | _        t	        j
                  g dt        j                  d      j                         d   j                         | j                   d<   | j                  d       d| _
        	 t        d      5 }|j                         | j                   d	<   d d d        y # 1 sw Y   y xY w# t        $ r Y y w xY 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fs     r   __init__z_Telemetry.__init__)   s    335 * 0 0'
#!%%0[]1!66;eg 	f 	w6	56 =!01

n-= = =  		s0   C C:C CC C 	CCc                 (   d}	 t        d      5 }t        |j                         j                         d         }ddd       |S # 1 sw Y   |S xY w# t        t
        t        f$ r,}t        j                  dt        |      z          Y d}~|S d}~ww xY 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!   es       r   r   z_Telemetry._get_current_uptime8   s    	$n% 4qvvx~~/234
 4
  "7J7 	$OOGF# $ $	$s3   A +AA A	A A B%!BBc                     | j                         }| j                  |y|| j                  t        || j                  z
        <   y)z(Record installer stage with current timeN)r   r   r   int)r    
stage_namenows      r   r   z_Telemetry.add_stageC   sC    &&(#s{9C#cD$4$4456r   c                 "    || j                   d<   y)zRecord updater typeTypeNr   )r    updater_types     r   set_updater_typez_Telemetry.set_updater_typeJ   s     ,fr   c                 "    || j                   d<   y)z*Record if the user had third party sourcesThirdPartySourcesNr4   )r    usings     r   set_using_third_party_sourcesz(_Telemetry.set_using_third_party_sourcesN   s    -2)*r   c                    | j                   | j                  d<   t        j                  j	                  | j
                        }	 t        j                  j                  |      st        j                  |       t        | j
                  d      5 }t        j                  | j                  |       ddd       t        j                  | j
                  t        j                  t        j                  z  t        j                  z  t        j                   z         y# 1 sw Y   kxY w# t"        $ r+}t%        j&                  dt)        |      z          Y d}~yd}~ww xY 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-   s       r   donez_Telemetry.doneR   s    
 #'"3"3hWW__T__5

	$77>>*-J'doos+ ,q		$--+,HHT__\\DLL0\\"$(LL12, ,
  	$OOFF# $ $	$s2   A
D% !D/A)D% D"D% %	E.!EE)
__name__
__module____qualname__r   r"   r   r   r6   r:   rL   r   r   r   r   r   %   s&    J	D-3$r   r   )r)   rC   r>   rF   r   r	   r   r   r   r   <module>rP      s%   .   	  !?$ ?$r   