
    t                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlZddlZddl	Z	ddl
Z
ddlZdZ	 ddlmZ dd	lmZ dd
lmZ ddlmZ  e       Zej(                  j-                  ee      ZddZy#  ej(                  j+                  ej(                  j-                  dd            Z	 ddlZddlmZ d Zd ZddZn#   ej4                  d       Y nxY wY xY w)zScript for reporting metrics.    )absolute_import)print_function)division)unicode_literalsNzmetrics.log)ConfigureCertsFile)GetGsutilStateDir)
GetNewHttp)CreateDirIfNeeded~z.gsutil)http_clientc                  .     G d dt               }  |        S )z*Returns an httplib-based metrics reporter.c                       e Zd Zd ZddZy)#GetNewHttp.<locals>.HttplibReporterc                      y N )selfs    )platform/gsutil/gslib/metrics_reporter.py__init__z,GetNewHttp.<locals>.HttplibReporter.__init__7   s    
    Nc                     t        j                  |dd  j                  d      d         }|j                  ||||       |j	                         }d|j
                  ifS )N   /r   )bodyheadersstatus)r   HTTPSConnectionsplitrequestgetresponser   )r   endpointmethodr   r   	https_conresponses          r   r   z+GetNewHttp.<locals>.HttplibReporter.request;   s_    !11(12,2D2DS2I!2LM)


FH4

I**,(X__-/
/r   )NNN)__name__
__module____qualname__r   r   r   r   r   HttplibReporterr   5   s    		0r   r(   )object)r(   s    r   r	   r	   2   s    0F 0  r   c                       y r   r   r   r   r   r   r   G   s    
r   c                     t         j                  j                  |       s	 t        j                  | |       yy# t        $ r(}|j
                  t
        j                  k7  r Y d}~yd}~ww xY w)z5See the same-named method in gslib.utils.system_util.N)ospathexistsmakedirsOSErrorerrnoEEXIST)dir_pathmodees      r   r
   r
   J   sT    WW^^H%	
++h
% &  	WW$ %	s   9 	A*A%%A*c                    t        j                         }|E|j                  ddj                  d t	        d      D              }t        j                  |      }|xs t
        }t        j                  j                  |      }t        |       t        j                  |d      }|j                  |       |j                  |       t        | d      5 }t        j                  |      }ddd       t        j                   |        t#                t%               }	D ]m  }
	 d	|
j&                  i}|	j)                  |
j*                  |
j,                  |
j.                  |
      }|j1                  |
       |j1                  d|d   d          o y# 1 sw Y   xY w# t2        $ r}|j1                  |       Y d}~d}~ww xY w)a  Sends the specified anonymous usage event to the given analytics endpoint.

  Args:
      metrics_file_path: str, File with pickled metrics (list of tuples).
      log_level: int, The logging level of gsutil's root logger.
      log_file_path: str, The file that this module should write its logs to.
        This parameter is intended for use by tests that need to evaluate the
        contents of the file at this path.

  N. c              3   b   K   | ]'  }t        j                  t        j                         ) y wr   )randomchoicestringascii_lowercase).0_s     r   	<genexpr>z ReportMetrics.<locals>.<genexpr>h   s$      /A7?!f,,-xs   -/r   w)r4   rbz
User-Agent)r"   r   r   zRESPONSE: %sr   r   )logging	getLoggernamejoinrangeLOG_FILE_PATHr,   r-   dirnamer
   FileHandler
addHandlersetLevelopenpickleloadremover   r	   
user_agentr   r!   r"   r   debug	Exception)metrics_file_path	log_levellog_file_pathloggernew_namelog_file_parent_dirhandlermetrics_filemetricshttpmetricr   r$   r5   s                 r   ReportMetricsr_   X   sy    & !++rww /A7<Qx/A (A BHx(F0=-6'(C8'G//)t$kk,'G %))	$f	v001gfoo%+]]#);;&-  /h ll6ll>8A;x#89  %$   ll1oos%   F"A*FF	F?$F::F?)i  r   )__doc__
__future__r   r   r   r   rC   r,   rN   r:   r<   sys_LOG_FILE_BASENAMEgslib.utils.boto_utilr   r   r	   gslib.utils.system_utilr
   _LOG_FILE_PARENT_DIRr-   
expanduserrF   r1   	six.movesr   exitrH   r_   r   r   r   <module>rj      s    $ & %  '  	    
" 565.7*,d 13EF,i/ ++BGGLLi,HI&%*CHHQKs#   A6 67C.CCCC