§
    ¤åœc  ã                   ó$  — d dl Z 	 d dlmZmZ n# e$ r d dlmZmZ Y nw xY w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 dlmZ n# e$ r	 d dlmZ Y nw xY wd dlZ G d„ de j        ¦  «        Zedk    �re
j                             ¦   «         Ze                     e
j                             ¦   «         ¦  «          ej        d¦  «        Ze                     ¦   «                              ¦   «         Z e j        ¦   «         Ze                     ¦   «          dej         j!        ›d	ej         j"        d          j!        ›d
e›d�Z# e e$ej         j%         &                    ¦   «         ¦  «        e# e j        ¦   «         e¦  «        Z'e' (                    ¦   «          dS dS )é    N)ÚEmptyÚQueue)Úurlopenc                   ón   — e Zd ZdZ G d„ dej        ¦  «        Zdd„Zd„ Zdd	„Z	d
„ Z
dd„Z	 	 dd„Zd„ ZdS )Ú
MirrorTestz@Determines the best mirrors by perfoming ping and download test.c                   ó    — e Zd ZdZdd„Zd„ ZdS )úMirrorTest.PingWorkerz¢Use the command line command ping to determine the server's
           response time. Using multiple threads allows to run several
           test simultaneously.©r   é   ©r   r   c                 óÊ   — || _         || _        || _        || _        || _        || _        t          j        d¦  «        | _        t          j
                             | ¦  «         d S )Nz^rtt .* = [\.\d]+/([\.\d]+)/.*)ÚbordersÚmodÚparentÚidÚjobsÚresultsÚreÚcompileÚmatch_resultÚ	threadingÚThreadÚ__init__)Úselfr   r   r   r   r   r   s          ú?/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.pyr   zMirrorTest.PingWorker.__init__   s\   € Ø"ˆDŒLØˆDŒHØ ˆDŒKØˆDŒGØˆDŒIØ"ˆDŒLÝ "¤
Ð+LÑ MÔ MˆDÔÝÔ×%Ò% dÑ+Ô+Ð+Ð+Ð+ó    c                 ó(  — d }| j                              ¦   «         �sñ| j        j                             ¦   «         �rÔ	 | j                              d¦  «        }|j        }| j                             d|z  ¦  «         t          j	        ddddd|gt          j
        t          j        d¬	¦  «        j        }	 |                     ¦   «         }|snt          j        | j        |¦  «        }Œ2n0# t"          $ r Y d S  | j                             d
|z  ¦  «         Y nxY wt$          j                             ¦   «          t$          xj        dz  c_        | j                             t$          j        t$          j        | j        | j        ¦  «         |r0| j                             t9          |d         ¦  «        ||g¦  «         t$          j                             ¦   «          | j                              ¦   «         s%| j        j                             ¦   «         �°Ðd S d S d S d S )NFzPinging %s...Úpingz-qz-c 2z-W 1z-i 0.5T)ÚstdoutÚstderrÚuniversal_newlineszSkipping %sr   r   )r   Úemptyr   ÚrunningÚisSetÚgetÚhostnameÚreport_actionÚ
subprocessÚPopenÚPIPEÚSTDOUTr   Úreadliner   Úfindallr   r   r   Úcompleted_lockÚacquireÚ	completedÚreport_progressÚtodor   r   r   ÚappendÚfloatÚrelease)r   ÚresultÚmirrorÚhostÚcommandoÚlines         r   ÚrunzMirrorTest.PingWorker.run#   s+  € ØˆFØ”i—o’oÑ'Ô'ñ 4¨D¬KÔ,?×,EÒ,EÑ,GÔ,Gñ 4ðDØ!œYŸ]š]¨5Ñ1Ô1�FØ!œ?�Dà”K×-Ò-¨oÀÑ.DÑEÔEÐEÝ)Ô/°¸¸vÀvÈxÐY]Ð0^Ý7A´Ý7AÔ7HØCGð Iñ  Iô  Iô JPð ðEØ'×0Ò0Ñ2Ô2˜Ø#ð "Ø!Ý!#¤¨DÔ,=¸tÑ!DÔ!D˜ð	Eð "øåð ð ð Ø�F�FðDØ”K×-Ò-¨m¸dÑ.BÑCÔCÐCÐCÐCøøøåÔ)×1Ò1Ñ3Ô3Ð3ÝÐ$Ô$¨Ñ)Ð$Ô$Ø”×+Ò+­JÔ,@Ý,6¬OØ,0¬LØ,0¬Hñ6ô 6ð 6ð ð JØ”L×'Ò'­¨v°a¬yÑ)9Ô)9¸4ÀÐ(HÑIÔIÐIÝÔ)×1Ò1Ñ3Ô3Ð3ð9 ”i—o’oÑ'Ô'ð 4¨D¬KÔ,?×,EÒ,EÑ,GÔ,Gñ 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4s   ½B(C& Ã&
DÃ3DN)r
   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r;   © r   r   Ú
PingWorkerr	      sA   € € € € € ð	#ð 	#ð	,ð 	,ð 	,ð 	,ð	4ð 	4ð 	4ð 	4ð 	4r   rA   Nc                 óp  — t           j                             | ¦  «         d| _        d| _        || _        d | _        || _        g | _        dt          _
        t          j        ¦   «         t          _        t          |¦  «        t          _        || _        |st          j        ¦   «         | _        d S || _        d S )NÚ )r   r   g        r   )r   r   r   ÚactionÚprogressÚeventÚbestÚ	test_fileÚthreadsr   r0   ÚLockr.   Úlenr2   ÚmirrorsÚEventr#   )r   rL   rH   rF   r#   s        r   r   zMirrorTest.__init__C   s•   € ÝÔ×!Ò! $Ñ'Ô'Ð'ØˆŒØ#ˆŒØˆŒ
ØˆŒ	Ø"ˆŒØˆŒØ �
ÔÝ$-¤NÑ$4Ô$4�
Ô!Ý˜g™,œ,�
ŒØˆŒØð 	#Ý$œ?Ñ,Ô,ˆDŒLˆLˆLà"ˆDŒLˆLˆLr   c                 óX   — || _         | j        r| j                             ¦   «          d S d S ©N)rD   rF   Úset)r   Útexts     r   r'   zMirrorTest.report_actionT   s5   € ØˆŒØŒ:ð 	ØŒJ�NŠNÑÔÐÐÐð	ð 	r   ©r   éd   r   c                 ó¾   — ||d         z   ||d         z   |d         |d         |d         z
  |z  |z  z   f| _         | j        r| j                             ¦   «          dS dS )zTSubclasses should override this method to receive
           progress status updatesr   r   N)rE   rF   rP   )r   ÚcurrentÚmaxr   r   s        r   r1   zMirrorTest.report_progressY   sv   € ð ! 3 q¤6Ñ)Ø˜s 1œv™Ø  œ w¨q¤z°G¸A´JÑ'>À#Ñ&EÈÑ&OÑOðQˆŒð Œ:ð 	ØŒJ�NŠNÑÔÐÐÐð	ð 	r   c           
      óT  — |                       ddd¬¦  «        }t          | j        ¦  «        }|dk    rr|                     dd| j        t	          j        d|dz
  ¦  «                 g¦  «         |                     dd| j        t	          j        d|dz
  ¦  «                 g¦  «         |                      d„ |D ¦   «         d	t          j        t          j        f¬
¦  «        }|D ]\  }}t          d|j
        ›d|›�¦  «         Œ |sd S |d         d         j
        }t          d|z  ¦  «         |S )Né   )r   ç      à?)r   é   )rV   r   r   é   r   r   c                 ó   — g | ]
}|d          ‘ŒS )r[   r@   )Ú.0Úrs     r   ú
<listcomp>z,MirrorTest.run_full_test.<locals>.<listcomp>j   s   € Ð)EÐ)EÐ)E°1¨!¨A¬$Ð)EÐ)EÐ)Er   ©rY   r   )r   r   zmirror: z	 - time: zand the winner is: %s)Úrun_ping_testrK   rL   r3   ÚrandomÚrandintÚrun_download_testr   r2   Úprintr&   )r   Úresults_pingÚsizer   ÚtÚhÚwinners          r   Úrun_full_testzMirrorTest.run_full_testb   sB  € à×)Ò)¨a¸ÀuÐ)ÑMÔMˆå�4”<Ñ Ô ˆØ�!Š8ˆ8Ø×Ò  A t¤|µF´NÀ1ÀdÈ1ÁfÑ4MÔ4MÔ'NÐ OÑPÔPÐPØ×Ò  A t¤|µF´NÀ1ÀdÈ1ÁfÑ4MÔ4MÔ'NÐ OÑPÔPÐPØ×(Ò(Ð)EÐ)E¸Ð)EÑ)EÔ)EØ19Ý.8¬oÝ.8¬oð.?ð )ñ @ô @ˆð ð 	=ð 	=‰FˆQ�ÝˆE¨Q¬Z¨Z¨Z¸¸Ð;Ñ<Ô<Ð<Ð<Øð 	Ø�4à˜Q”Z ”]Ô+ˆFÝÐ)¨FÑ2Ñ3Ô3Ð3ØˆMr   r
   c           	      ó¦  — |dk    r| j         }t          ¦   «         }|D ]}|                     |¦  «         Œg }t          d¦  «        D ]O}t                               |||| ||¦  «        }	| j                             |	¦  «         |	                     ¦   «          ŒP| j        D ]}	|	 	                    ¦   «          Œ| 
                    ¦   «          |d|…         S )zõPerforms ping tests of the given mirrors and returns the
           best results (specified by max).
           Mod and borders could be used to tweak the reported result if
           the download test is only a part of a whole series of tests.Né   r   )rL   r   ÚputÚranger   rA   rI   r3   ÚstartÚjoinÚsort)
r   rL   rV   r   r   r   Úmr   Úirh   s
             r   ra   zMirrorTest.run_ping_testw   sÔ   € ð
 �dŠ?ˆ?Ø”lˆGÝ‰wŒwˆØð 	ð 	ˆAØ�HŠH�Q‰KŒKˆKˆKØˆå�r‘”ð 	ð 	ˆAÝ×%Ò% d¨G°Q¸¸gÀsÑKÔKˆAØŒL×Ò Ñ"Ô"Ð"Ø�GŠG‰IŒIˆIˆIà”ð 	ð 	ˆAØ�FŠF‰HŒHˆHˆHà�Š‰ŒˆØ�q˜�uŒ~Ðr   c                 ón  ‡ — ˆ fd„}|dk    r‰ j         }g }|D ]€}‰ j                             ¦   «         s nd ||¦  «        }|dk    r|                     ||g¦  «         ‰                      |                     |¦  «        dz   t          |¦  «        d|¦  «         Œ�|                     ¦   «          |d|…         S )zùPerforms download tests of the given mirrors and returns the
           best results (specified by max).
           Mod and borders could be used to tweak the reported result if
           the download test is only a part of a whole series of tests.c                 ó(  •— |                       ¦   «         d         ›d‰j        ›�}‰                     d|z  ¦  «         t          j        ¦   «         }	 t	          |d¬¦  «                             d¦  «         t          j        ¦   «         |z
  S #  Y dS xY w)Nr   ú/zDownloading %s...r[   )Útimeouti � )Úget_repo_urlsrH   r'   Útimer   Úread)r7   Úurlrp   r   s      €r   Útest_download_speedz9MirrorTest.run_download_test.<locals>.test_download_speed”   s—   ø€ Ø#×1Ò1Ñ3Ô3°AÔ6Ð6Ð6Ø!œ^˜^ð-ˆCà×ÒÐ2°SÑ8Ñ9Ô9Ð9Ý”I‘K”KˆEðÝ˜ QÐ'Ñ'Ô'×,Ò,¨VÑ4Ô4Ð4Ý”y‘{”{ UÑ*Ð*øðØ�q�qøøøs   Á9B ÂBNr   r   r`   )rL   r#   r$   r3   r1   ÚindexrK   rr   )	r   rL   rV   r   r   r}   r   rs   Údownload_times	   `        r   rd   zMirrorTest.run_download_testŽ   sà   ø€ ð		ð 		ð 		ð 		ð 		ð �dŠ?ˆ?Ø”lˆGØˆàð 	Tð 	TˆAØ”<×%Ò%Ñ'Ô'ð Ø�Ø/Ð/°Ñ2Ô2ˆMØ˜qÒ Ð Ø—’ ¨qÐ1Ñ2Ô2Ð2Ø× Ò  §¢¨qÑ!1Ô!1°AÑ!5µs¸7±|´|ÀXÈsÑSÔSÐSÐSØ�Š‰ŒˆØ�q˜�uŒ~Ðr   c                 ój   — |                       ¦   «         | _        | j                             ¦   «          dS )z/Complete test exercise, set self.best when doneN)rk   rG   r#   Úclear)r   s    r   r;   zMirrorTest.run¬   s/   € à×&Ò&Ñ(Ô(ˆŒ	ØŒ×ÒÑÔÐÐÐr   rO   )rR   r   )NNr
   r   )r<   r=   r>   r?   r   r   rA   r   r'   r1   rk   ra   rd   r;   r@   r   r   r   r      sÏ   € € € € € ØJÐJð+4ð +4ð +4ð +4ð +4�YÔ%ñ +4ô +4ð +4ðZ#ð #ð #ð #ð"ð ð ð
ð ð ð ðð ð ð*ð ð ð ð. AFØ#ðð ð ð ð<ð ð ð ð r   r   Ú__main__zdpkg --print-architecturezdists/rw   z/binary-z/Packages.gz))r   Úqueuer   r   ÚImportErrorrz   r   r(   ÚosÚaptsources.distroÚ
aptsourcesÚaptsources.sourceslistÚurllib.requestr   Úurllib2rb   r   r   r<   ÚdistroÚ
get_distroÚget_sourcesÚsourceslistÚSourcesListÚpopenÚpiper{   ÚstripÚarchrM   r#   rP   Úsource_templateÚnameÚ
componentsrH   ÚlistÚ
mirror_setÚvaluesÚapprk   r@   r   r   ú<module>r›      sZ  ðð Ð Ð Ð ð#Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"øØð #ð #ð #Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ð#øøøà €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð ð Ø&Ð&Ð&Ð&Ð&Ð&Ð&øØð  ð  ð  ØÐÐÐÐÐÐÐð øøøà €€€ð[ð [ð [ð [ð [�Ô!ñ [ô [ð [ðz ˆzÒÑØÔ×)Ò)Ñ+Ô+€FØ
×Ò�zÔ-×9Ò9Ñ;Ô;Ñ<Ô<Ð<Øˆ2Œ8Ð/Ñ0Ô0€DØ�9Š9‰;Œ;×ÒÑÔ€DØˆiŒoÑÔ€GØ‡K‚K�M„M€M€MàÔ'Ô,Ð,Ð,ØÔ'Ô2°1Ô5Ô:Ð:Ð:Ø��ð€Ið ˆ*�T�T˜&Ô0Ô;×BÒBÑDÔDÑEÔEØ  	¤Ñ 1Ô 1°7ñ<ô <€Cà×ÒÑÔÐÐÐð Ðs   † �ž»A ÁAÁA