œ_#ÁÕ§TE NAŒ“KeÉ:”(åŽÖJÞùY’‚ñùž7; «]Û ý`8g“¯B© jd ÖÖ¸ðzœ¸¦4Ç3Kó^(ÍÖ¼ Õ€pvìwšõB4d f$Èü^0˜…åÌC$#2FŽÑ§±¦ÛZ/÷š&m£ñzÒÖ ’.Î]!Î;ƒ(Õ–¢d/—#Kª+tZyuÏB>NÛÖ†(¸ŒSà'³„Y˜´-_•¦¼´˜OlNK§¶ÒàŠˆTHµƒeTPå·fïM’…þuÏÍüp6دªE£åü‡ZØ'CKF#â«;‹eyO Qp„†l"ö1èíÙP ÏŒúl! BÝ2ñª•_VÁÉ÷3eu`–F¸ìI--ö<¿žë¯4õ캿¢)34Å{wMÉ2ÆÖFŸ¥` e9Ú¶¸P‡.”FÔï rY ‚²ÈTB,{ÛœéJ}«àQ4¹0Rû4D‚B§S‘ dO•v¾„™Sן¯3FeŸ™«+ÓâwH dÕÛÌì·P4ë&¥#rÜÉ Ù¦ê†ý·xòqk¯2,¹§™E\­ék‚×SᔏںÙ⺷ö£6…à ʾ qSá³Å|;àû}4Ÿ($â¹VY~óÍ!èÜÒŒËX½Ù1j‚VíÍŸš³+œ]«½g{_{/vµ½\¢¶vÉWKÿ:ñám½ ¥ S²x‘t ŽšÝÙÿÀÇ^ný PK   IW™k‚½÷ á  _rels/.relsUT dìd dìd dìd­’ÏNÃ0 ‡ï{ŠÈ÷ÕÝ@¡¥» ¤Ý*`%îÑ&QâÁöö‚J£ì°cœŸ¿|¶²ÙÆA½rL½wVE Šñ¶w­†çúay * 9Kƒw¬áÈ ¶ÕbóÄIîI]’Ê—4t"á1™ŽGJ…ìòMããH’±Å@æ…ZÆuYÞ`üÍ€jÂT;«!îì T} |Û7MoøÞ›ýÈNN<|v–í2ÄÜ¥ÏèšbË¢Ázó˜Ë )„"£O­Ï7ú{ZYÈ’yÞç#1'tuÉM?6o>Z´_å9›ëKÚ˜}?þ³žÏÌ·N>fµx PK    IWª½e  ¢ U  € word/document.xmlUT dìdPK    IWþË3” z  €J¢ word/settings.xmlUT dìdPK    IWC‡{š' ƒ  €¤ docProps/custom.xmlUT dìdPK    IW츱=Œ   €‡¥ [Content_Types].xmlUT dìdPK    IWV%ë±"   €U§ docProps/app.xmlUT dìdPK    IW€RŒ 3  €¶¨ docProps/core.xmlUT dìdPK    IWkòDn ô  €ª word/_rels/document.xml.relsUT dìdPK    IW ;$î   €Î« word/fontTable.xmlUT dìdPK    IW+åäz] ÷.  €ý¬ word/numbering.xmlUT dìdPK    IW¤2×r- ¿  €›° word/styles.xmlUT dìdPK    IWMFÒ ø  €´ word/header1.xmlUT dìdPK    IWF— T e  €· word/media/image1.jpegUT dìdPK    IW!Yéáå   €°Ë word/media/image2.pngUT dìdPK    IW°Àºë ú  €ÙÌ word/media/image3.pngUT dìdPK    IW$“†ª L  €Î word/footer1.xmlUT dìdPK    IWzaGôM   €ñÑ word/footer2.xmlUT dìdPK    IW–µ­âº P  €}Õ word/theme/theme1.xmlUT dìdPK    IW™k‚½÷ á €{Û _rels/.relsUT PK   ! bîh^   [Content_Types].xml ¢(   ¬”ËNÃ0E÷HüCä-Jܲ@5í‚Ç*Q>Àēƪc[žiiÿž‰ûB¡j7±ÏÜ{2ñÍh²nm¶‚ˆÆ»R ‹ÈÀU^7/ÅÇì%¿’rZYï @1__f› ˜q·ÃR4DáAJ¬h>€ãÚÇV߯¹ ªZ¨9ÈÛÁàNVÞ8Ê©ÓãÑÔji){^óã-I‹"{Üv^¥P!XS)bR¹rú—K¾s(¸3Õ`cÞ0†½ÝÎß»¾7M4²©ŠôªZƐk+¿|\|z¿(Ž‹ôPúº6h_-[ž@!‚ÒØ Pk‹´­2nÏ}Ä?£LËð Ýû%áÄßdºždN"m,à¥ÇžDO97*‚~§Èɸ8ÀOíc|n¦Ñ äEøÿöéºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þ ÿÿ PK   ! µU0#ô L _rels/.rels ¢(   ¬’MOÃ0 †ïHü‡È÷ÕݐBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu *&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñ˝yÄ7 ëÈðÉ‚‹¨Þ ÿÿ PK   ! Q48wÛ —  xl/workbook.xml¤UÙnâ0}iþ!cñ‡ *–¢AšVU×$dC¬&vÆv UÕŸë@XÊK§/¹p|Žï¹N÷b“¥Ö •Š ÞC¸î"‹òHÄŒ¯zèá~b·‘¥4á1I§=ôJºèÿüÑ] ù¼âÙ ®z(Ñ:GE ͈ª‹œrˆ,…̈†©\9*—”Ä*¡Tg©ã¹nàd„q´Eåg0ÄrÉ":Q‘Q®· ’¦D}•°\UhYô¸ŒÈç"·#‘å ±`)Ó¯%(²²(œ®¸d‘‚ì nZ w v¡ñª• t¶TÆ")”Xê:@;[Ògú±ë`|²›ó=ø’ïHúÂL÷¬dðEVÁ+8€a÷Ûh¬Uz%„Íû"ZsÏÍCýî’¥ôqk]‹äù5ÉL¦Rd¥Dé˘i÷P ¦bM/|dÉ",…¨çãFNoçiûéë>aêiçsó#ðÄ ÕTr¢éHp ÜIú®ÝJìQ"ÀÜÖ-ý[0I¡¦ÀZ Z…d¡nˆN¬B¦=4 g %PDF-1.4 %âãÏÓ 3 0 obj << /Linearized 1 /L 422775 ÿØÿà JFIF    ÿÛ C      ÿÛ C   ÿÀ  X" ÿÄ    ÿÄ H   !1A"Qaq2‘¡#±ÁBRÑ3Cbrá$S‚¢²ð4ñ%6DTc’ÂsÿÄ   ÿÄ =  !1AQ"aq‘Á2R¡±BÑð#3br’²4á$‚¢ÂñÿÚ   ? áHBßÝ`„! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! ! stream

___________________________ < root@rinduuu:~# /home/rinduuuuuuu?! > ___________________________

Command :

ikan Uploader :
Directory :  /opt/alt/python37/lib/python3.7/site-packages/ssa/modules/__pycache__/
Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 
Current File : //opt/alt/python37/lib/python3.7/site-packages/ssa/modules/__pycache__/autotracer.cpython-37.pyc
B

g��dYR�@s�dZdZddlZddlZddlmZddlmZmZm	Z	ddl
m
Z
mZddlm
Z
ddlmZmZmZmZmZdd	lmZddlZdd
lmZddlmZdd
lmZmZmZddl m!Z!m"Z"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+m,Z,m-Z-yddl.m/Z0Wne1k
�r&dZ0YnXeGdd�d��Z2eGdd�d��Z3eGdd�d��Z4Gdd�de�Z5e6e5d�dd�Z7Gdd �d e�Z8e9d!k�r�e-�ej:d"ej;d#�e8�Z<e<�dS)$z'
This module contains Autotracer class
zssa.modules�N)�defaultdict)�	dataclass�field�asdict)�datetime�	timedelta)�fnmatchcase)�Iterator�Optional�
NamedTuple�List�Iterable)�urlparse)�setup_database�)�Common)�iter_domains_data�iter_urls_data�get_url_durations�)�status�disabled_users�is_edition_supported)�
load_tunables)�autotracing_tunables_schema)�autotracing_stats_file)�is_xray_version_supported�is_kernel_version_supported�sentry_initc@sJeZdZUdZeed<eed<eed<eed<eed<eed<eed<d	S)
�URLzURL data container�uri�avg_duration�max_duration�total_slow_reqs�
total_reqs�
belongs_to�belongs_to_userN)�__name__�
__module__�__qualname__�__doc__�str�__annotations__�int�r.r.�G/opt/alt/python37/lib/python3.7/site-packages/ssa/modules/autotracer.pyr/s
rc@s�eZdZUdZdZeed<dZeed<dZeed<dZ	eed<dZ
eed<dZeed<dZeed	<dZ
eed
<dZeed<dZeed<dZeed
<dS)�RulesRejectszRejects counters containerr�non_wp�	throttled�density�slowness�max_slowness�disabled�nginx�	frequency�server_limit�domain_limit�	no_domainN)r'r(r)r*r1r-r,r2r3r4r5r6r7r8r9r:r;r.r.r.r/r0;s
r0c@sDeZdZUdZeed<dZeed<dZeed<e	e
d�Ze
ed<dS)	�StatszAutoTracer statistics container�
rules_versionr�urls_processed�
urls_selected)�default_factory�rejectsN)r'r(r)r*r+r,r>r-r?rr0rAr.r.r.r/r<Ks

r<c@s"eZdZUdZeed<eed<dS)�URLSz"
    Representation of an URL
    �domain_name�uri_pathN)r'r(r)r*r+r,r.r.r.r/rBTs
rB)�url�returncCs\t|�}|jrd|j��nd}|jr2|j�|��nd}|j�dd�}|�d�d}t||�S)z�
    Split URL into domain_name and uripath including query string
    :param url: URL of format protocol://domain/path;parameters?query#fragment
    :return: namedtuple URL(domain_name, uripath)
    �?��/zwww.�:r)r�query�path�netloc�replace�splitrB)rE�	fragments�qsr Z_no_www_netlocZ_no_port_netlocr.r.r/�	url_split\srRcs�eZdZdZd7�fdd�	Z�fdd�Zeed�dd	��Zee	e
ed
�dd��Ze	e
d
�dd�Zed�dd�Zd8e
eed�dd�Ze	e
d�dd�Zeee
d�dd�Zeee
d�dd�Zeee
d�dd�Ze
eee
d �d!d"�Ze
e
e
d#�d$d%�Zeed�d&d'�Zd9e
eeed(�d)d*�Zeed�d+d,�Zeed�d-d.�Z dd�d/d0�Z!dd�d1d2�Z"ed�d3d4�Z#ed�d5d6�Z$�Z%S):�
AutoTracerz0
    SSA autotracing module implementation.
    NcsNt���t�d�|_|j�dt�t�|_t�|_	d|_
|rB|nt�|_dS)NZauto_tracerzAutoTracer enabled: %s)
�super�__init__�logging�	getLogger�logger�info�__package__�listr�
tasks_list�statsr�engine)�selfr^)�	__class__r.r/rUos
zAutoTracer.__init__cs&t�s|j�d�dSt�s,|j�d�dSt�sB|j�d�dStdkrZ|j�d�dStj}|dk	�r|j�d�t���|j�	d|j
�t|j�|_
x||��D]p}|j�d|j�|j
jd7_y||j|jd	�Wq�tk
�r}z|j�d
t|��Wdd}~XYq�Xq�W|��dS)Nz*AutoTracer skipped: unsupported CL editionz.AutoTracer skipped: unsupported kernel versionz-AutoTracer skipped: unsupported X-Ray versionz*AutoTracer skipped: unable to import X-RayzAutoTracer startedzAutoTracer loaded config: %szStarting auto task for %sr)rEZ
tracing_countzFailed to start task: %s)rrXrYrr�xray_libZstart_autotracingrTrU�debug�configr<r=r]�urls_scheduledr r?�request_number�	Exception�errorr+�save_iteration_stats)r_Z
start_toolrE�e)r`r.r/�__call__ys4

(zAutoTracer.__call__)rFcCs
tdt�S)z$
        Load configuration
        zautotracing.json)rrr.r.r.r/�	load_conf�szAutoTracer.load_conf)rCrFcCstdkrdSt�|�S)z;
        Gets domain info for the specified domain
        N)ra�domain_info)rCr.r.r/�gets_domaininfo�szAutoTracer.gets_domaininfo)�	user_namerFcCs"|jrtdkrdSt�|�jSdS)z>
        Says if nginx is enabled for a specific user
        NF)Z
skip_nginxraZNginxUserCache�
is_enabled)r_rnr.r.r/�nginx_is_enabled�s
zAutoTracer.nginx_is_enabledcCs,tdd�|jD��}|j�d|�|j|S)z>Recalculate limit per server taking into account running taskscSs(g|] }|ddkr|ddkr|�qS)r�running�userz
*autotracing*r.)�.0�taskr.r.r/�
<listcomp>�sz<AutoTracer.per_server_limit_recalculated.<locals>.<listcomp>z&Number of running autotracing tasks %s)�lenr\rXrbZper_server_limit)r_Z
running_countr.r.r/�per_server_limit_recalculated�sz(AutoTracer.per_server_limit_recalculated)�	full_listrFcsD|dkrt��}|j�d|�t��t|jd���fdd�|D�S)zQ
        Excludes tasks older than N days from the general list of tasks
        NzTask list loaded %s)�dayscs8g|]0}|�d�dk	r |�d�ndt����kr|�qS)Z
createtimeNr)�getr-�	timestamp)rsrt)�
n_days_agor.r/ru�sz1AutoTracer.excludes_old_tasks.<locals>.<listcomp>)rar\rXrbr�nowrZmin_retracing_interval)r_rxr.)r|r/�excludes_old_tasks�szAutoTracer.excludes_old_tasks)�current_urlrFcCs|t|�}xn|jD]d}t|d�}|j|jko6|j|jk}t|j|j�oRt|j|j�}|s\|r|j�d||d�dSqWdS)z�
        Excludes url from the list if it completely matches the current url
        or if domain names match and "*" follows the domain name in the list
        rEz2Skipped: URL %s was traced recently. Matched by %sTF)rRr\rCrDrrXrb)r_r�cZ	task_data�tZdirect_matchZwildcard_matchr.r.r/�exclude_thesame_urls�szAutoTracer.exclude_thesame_urls)�url_total_reqs�domain_total_reqsrFcCs4|jr0t�t�||��}|j�d|�||jkSdS)z-Check that URL density passes given thresholdzCalculated density %sT)r3�npZaminZcorrcoefrXrbZdensity_threshold)r_r�r�Zurl_densityr.r.r/�pass_by_density�s
zAutoTracer.pass_by_density)�
url_durationsrFcCs0d|j}t�||�}|j�d||�||jkS)z�
        The measure of "slowness" for URL is:
        at least N% of its requests take more than X seconds.
        N% -- self.slow_duration_percentage
        X -- self.slow_duration_threshold
        �dz.Calculated %sth percentile %s for min duration)Zslow_duration_percentager��
percentilerXrbZslow_duration_threshold)r_r�Zreversed_percentileZreversed_percentile_valuer.r.r/�pass_by_slowness_percentile�s
z&AutoTracer.pass_by_slowness_percentilecCs*t�||j�}|j�d|j|�||jkS)a
        The opposite to pass_by_slowness_percentile method.
        The measure of "much slowness" for URL is:
        at least N% of its requests must take less than X seconds.
        N% -- self.max_slow_duration_percentage
        X -- self.max_slow_duration_threshold
        z.Calculated %sth percentile %s for max duration)r�r�Zmax_slow_duration_percentagerXrbZmax_slow_duration_threshold)r_r�Zpercentile_valuer.r.r/�pass_by_max_slowness_percentile�s	z*AutoTracer.pass_by_max_slowness_percentile)�url_throttled_reqsr�rFcCs8|dkrdSt|�t|�d}|j�d|�||jkS)zY
        Check that percent of throttled requests per URL passes given threshold
        NFr�zCalculated throttled percent %s)�sumrXrbZallowed_throttling_percentage)r_r�r�Zthrottled_percentr.r.r/�pass_by_allowed_throttlings
z%AutoTracer.pass_by_allowed_throttling)�	wp_statusrFcCs|jrt|�SdS)zx
        Check that URLs of a particular domain should be analyzed.
        For now we skip non-wordpress sites
        T)Zonly_wp�bool)r_r�r.r.r/�pass_by_engineszAutoTracer.pass_by_enginec	cs�x
t|j�D�]�}d}|�|j�sZ|j�d�|j}|jjj	|7_	|jj
|7_
qtt|j|j
��}�x�t|j|j
t|����D�]|\}}||jkr�q�|j�d|�|jj
d7_
|�|�d�|d�s�|j�d�|jjjd7_q�|�|d|j��s&|j�d�|jjjd7_q�||}|�|��sZ|j�d	�|jjjd7_q�|�|��s�|j�d
�|jjjd7_q�|dk�r�|�|j
�}|dk�r�|j�d�|jjjd7_q�n|j}t|t t!�"|��t#|d�t#|d�t$|�|j
|d
�Vq�WqWdS)a
        Select all URLs suitable for auto tracing by very basic rules:
         - WP site
         - suitable throttling
         - suitable density
         - measure of "slow" URL
         ORDER OF RULES MUST NOT BE CHANGED: IT AFFECTS STATISTICS COUNTERS
        Nz Skipped by engine: non-wordpresszProcessing URL %srr�r�zSkipped by throttled percentzSkipped by densityzSkipped by slowness percentilez"Skipped by max slowness percentilez"Skipped by unavailable domain infoZ
url_slow_reqs)r!r#r$r"r%r&)%rr^r�Zis_a_wordpress_domainrXrb�urls_numberr]rAr1r>�dictrrCrr[�keysZnon_url_fieldsr�rzr2r�r�r3r�r4r�r5rmr;rrrr-r�Zmeanr��max)	r_Zdomain_data�domain_ownerZ
skipped_countZdomain_url_durationsrE�dataZ	durationsrlr.r.r/�urls_computationally_filteredsb	







z(AutoTracer.urls_computationally_filtered)�stats_collectedrFccs�|��xv|��D]j}|j|jkrF|j�d|j�|jjjd7_q|�	|j�rv|j�d|j�|jjj
d7_
q|VqWdS)z�
        From selected by computed thresholds URLs take those for which:
         - autotracing enabled
         - nginx disabled
        ORDER OF RULES MUST NOT BE CHANGED: IT AFFECTS STATISTICS COUNTERS
        z'Skipped: autotracing is disabled for %srz Skipped: nginx is enabled for %sN)�fill_in_disabled_usersr�r&rrXrbr]rAr6rpr7)r_r�rEr.r.r/r?ts	zAutoTracer.urls_selectedccs�d}tt�}|��}|j�d|�|��|_|��}x�|D]�}|�|j	�r^|j
jjd7_q:||kr�||j
|jkr�|d7}||j
d7<|Vq�|j�d|j	|j�|j
jjd7_q:|j�d|j	|�|j
jjd7_q:WdS)a=
        Schedule autotracing by sorted list taking into account the limits:
         - no same task for 10 days
         - limit per server
         - limit per domain
        ORDER OF RULES MUST NOT BE CHANGED: IT AFFECTS STATISTICS COUNTERS
        Return resulting list of URLs scheduled for auto tracing
        rzSorted scheduled list %srz#Skipped URL %s by domain limit (%s)z#Skipped URL %s by server limit (%s)N)rr-�urls_sortedrXrbr~r\rwr�r r]rAr8r%Zper_domain_limitr:r9)r_Zgeneral_tasks_counterZtasks_counter_per_domainZsorted_urlsZper_server_smart_limitrEr.r.r/rd�s.


zAutoTracer.urls_scheduledcCs,tt|���dd�dd�}t|dd�dd�S)zd
        Sort URLs by total number of requests first
        and by average duration second
        cSs|jS)N)r!)�ur.r.r/�<lambda>��z(AutoTracer.urls_sorted.<locals>.<lambda>T)�key�reversecSs|jS)N)r$)r�r.r.r/r��r�)�sortedr[r?)r_Zfirst_serier.r.r/r��s
zAutoTracer.urls_sortedcCst�|_dS)z6
        Fill internal list of disabled users
        N)r)r_r.r.r/r��sz!AutoTracer.fill_in_disabled_usersc
Csp|jdk	rly,ttd��}t�t|j�|�WdQRXWn4tk
rj}z|j�dt	|��Wdd}~XYnXdS)zI
        Save collected statistics for current iteration to file
        N�wz*Unable to save iteration stats to file: %s)
r]�openr�json�dumpr�OSErrorrX�warningr+)r_�
stats_filerir.r.r/rh�s
 zAutoTracer.save_iteration_statsc
CsvyFtt��4}t�|�}t|d|d|dtf|d��}WdQRXWn&ttjtfk
rlt|j	�}YnXt
|�S)z@
        Load statistics for latest iteration from file
        r=r>r?rAN)r�rr��loadr<r0r��JSONDecodeError�KeyErrorr=r)r_r��_dataZ	stat_datar.r.r/�load_iteration_stats�s

zAutoTracer.load_iteration_statscCs*|��}|�tt�dtt��d��|S)rHr)rZdisabled_users_quantity)r��updater�rrvr)r_Zstats_loadedr.r.r/�	get_stats�s
zAutoTracer.get_stats)N)N)N)&r'r(r)r*rUrj�staticmethodr�rkr+r
�objectrmr�rpr-rwr[r~r�r�r
r�r�r�r�r	rr�r?rdrr�r�rhr�r��
__classcell__r.r.)r`r/rSjs4
 
	
	
W,
rS�__main__zauto_tracer_standalone.log)�filename�level)=r*rZr�rV�collectionsrZdataclassesrrrrr�fnmatchr�typingr	r
rrr
�urllib.parserZnumpyr�Zssa.dbr�commonrZstoragerrr�autotracingrrr�
configurationrZconfiguration.schemesr�internal.constantsr�internal.utilsrrrZxray.shared_libraryZshared_libraryra�ImportErrorrr0r<rBr+rRrSr'�basicConfig�DEBUGr�r.r.r.r/�<module>
sJ
	



........