/opt/cloudlinux/venv/lib/python3.11/site-packages/xray/agent/__pycache__
NameSizeModeActions
daemon.cpython-311.pyc382060644editdlrm
executor.cpython-311.pyc36830644editdlrm
fault_detector.cpython-311.pyc125810644editdlrm
__init__.cpython-311.pyc2350644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/xray/agent/__pycache__/daemon.cpython-311.pyc (38206B)
§ ð ˜j„ãóÈ—dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZmZmZmZmZddl mZmZmZmZddlmZddlZddlmZddlmZdd lm Z dd l!m"Z"m#Z#m$Z$dd l%m&Z&m'Z'dd l(m)Z)dd l*m+Z+m,Z,m-Z-ddl.m/Z/ddl0m1Z1ddl2m3Z3m4Z4e j5r ddl6m7Z7m8Z8m9Z9eGd„d¦«¦«Z:ej;e<¦«Z=Gd„d¦«Z>dS)zJ This module contains contains classes implementing X-Ray Agent behaviour éN)ÚThreadÚcurrent_threadÚLockÚEventÚTimer)ÚAnyÚOptionalÚDictÚTuple)Ú dataclassé)ÚBoundedThreadExecutor)Úgettext)Ú get_client)Úlocal_tasks_storageÚtasks_base_storageÚsafe_id_pattern)Ú XRayErrorÚ XRayAPIError)Ú FaultDetector)Úopen_local_storageÚflush_memory_storageÚ get_task_ids)ÚTask)Ú extract_creds)Ú dbm_storageÚget_current_cpu_throttling_time)Ú SendClientÚSmartAdviceAPIClientÚ APIClientcó$—eZdZUded<eed<dS)ÚAPIDataContainerr ÚclientÚtaskN)Ú__name__Ú __module__Ú __qualname__Ú__annotations__r©óúH/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/agent/daemon.pyr"r"-s%€€€€€€à ÐÐÑØ €J€J�J€J€Jr*r"c ó|—eZdZdZdZdZdZdZej ¦«dzej ¦«dzej ¦«dzd d d fd „Z d „Z d „Z dd.„Z*dÐ'JÐ #Ð #ÐP_ÐcdÑPdð Ô$ð+¨[Ñ8ˆÔð(/?Ð.JÐ*Ð*ÕPSÐTUÐWbÐfgÑWgÑPhÔPhˆŒð0CÐ/NÐ+Ð+ÐT_ˆŒ õ Ô�vÔ/µ&´.Ð1AÑBÔBÐBõ=GÀyÑÑ">Ô">ˆDÔ Ø Ô × %Ò %Ñ 'Ô 'Ð 'õ "¨dÔ.>ÈTÔM^Ð _Ñ _Ô _ð ØcoÝ !Ø Ô0ðð  ñ ô ð ð"à Ð,�%Ð,Ð,Ð,Ø&*§k¢k¡m¤mÑ#� ˜Gð'Ø$×+Ò+¨DÔ,KÈZÐYeÑfÔfÐfÐføÝ”zð'ð'ð'Ý—L’LðWñôðð×$Ò$Ñ&Ô&Ð&Ð&Ð&ð 'øøøðÐ$ؘQ‘J�Eð!Ð,�%Ð,Ð,Ð,ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð sZÂE%Â5E ÃC1Ã0E Ã1=D1Ä.E Ä0D1Ä1E Å E%Å E ÅE%ÅE ÅE%Å%E)Å,E)cóD—| ||¦«\|d<|d<dS)zj Calculate throttling values and update given data with resulting throttling stat Úhitting_limitsÚthrottled_timeN)rK)rVÚdataÚt_keyÚ cpu_values r+Úadd_limit_faultszAgent.add_limit_faults s1€ð :>×9LÒ9LÈUÐT]Ñ9^Ô9^Ñ6ˆÐ Ñ Ð%5Ñ 6Ð 6Ð 6r*Úphp_pidÚ cpu_usageÚ caller_uidcó¬—t d|||¦«|j |||¬¦«|j ¦«dS)zƒ Called when php request starts and sends us welcome request meaning that request started on the php side. z=Received request init trigger from php=%s uid=%s cpu_usage=%s)ÚuidN)rpr_rKÚsaveÚflush)rVržrŸr s r+Ú_handle_request_initzAgent._handle_request_inits[€õ � Š ÐSÐU\Ð^hÐjsÑtÔtÐtð Ô× Ò  ¨)¸Ð ÑDÔDÐDà Ô×!Ò!Ñ#Ô#Ð#Ð#Ð#r*Ú request_datacó2—| d¦«€| |||¦«t dt ¦«j| d¦«| d¦«¦«| ||¦«dS)Nr˜z&[%s] Processing trace for task %s (%s)Útracing_task_idÚurl)Úgetr�rpr_rÚnameÚprocess_request_data)rVržrŸr¦r s r+Ú_handle_request_endzAgent._handle_request_ends—€ð × Ò Ð,Ñ -Ô -Ð 5à × !Ò ! ,°¸Ñ CÔ CÐ Cå� Š Ø 4Ý Ñ Ô Ô !Ø × Ò Ð.Ñ /Ô /Ø × Ò ˜UÑ #Ô #ñ  ô ð ð ×!Ò! ,° Ñ;Ô;Ð;Ð;Ð;r*i@g@g>@r•r“cóJ— t|¦«\}}}n?#t$r2t d¦«| ¦«YdSwxYw|j5|j |d¦«|jkr=t d|¦«| ¦« ddd¦«dS|j|xxdz cc<ddd¦«n #1swxYwY |  ||||¦«|j5|j|xxdzcc<|j|dkr|j|=ddd¦«dS#1swxYwYdS#|j5|j|xxdzcc<|j|dkr|j|=ddd¦«w#1swxYwYwxYw)a Handle incoming connection :param connection: socket object usable to send and receive data on the connection :param workers_pool: pool where we can place tasks for the futher processing z1Failed to extract credentials, closing connectionNrz6Too many concurrent connections from uid=%s, rejectingr ) rrdrprer’rPrOrªr<Ú_process_connection)rVr•r“Ú_pidÚ_uidÚ_gids r+rŽz Agent.handle_incoming_connection=sÅ€ð Ý,¨ZÑ8Ô8Ñ ˆD�$˜˜øÝð ð ð Ý �NŠNÐNÑ OÔ OÐ OØ × Ò Ñ Ô Ð Ø ˆFˆFð øøøð Ô 'ð -ð -ØÔ$×(Ò(¨¨qÑ1Ô1°TÔ5QÒQÐQÝ—’ÐWÐY]Ñ^Ô^Ð^Ø× Ò Ñ"Ô"Ð"Øð  -ð -ð -ñ -ô -ð -ð -ð -ð Ô ! $Ð 'Ð 'Ô '¨1Ñ ,Ð 'Ð 'Ñ 'ð  -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð 4Ø × $Ò $ Z°¸tÀTÑ JÔ JÐ JàÔ+ð 4ð 4ØÔ% dÐ+Ð+Ô+¨qÑ0Ð+Ð+Ñ+ØÔ(¨Ô.°!Ò3Ð3ØÔ-¨dÐ3ð 4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4ð 4ø�Ô+ð 4ð 4ØÔ% dÐ+Ð+Ô+¨qÑ0Ð+Ð+Ñ+ØÔ(¨Ô.°!Ò3Ð3ØÔ-¨dÐ3ð 4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4øøøsj‚–8AÁAÁACÂ>CÃC#Ã&C#Ã+EÄ /EÅE Å E ÅF"Å/FÆ F"ÆF ÆF"ÆF ÆF"r°r±c 󔇇 —t|¦«}‰ |j¦«‰ d¬¦«}t ¦«Š ˆˆ fd„}t |j|¦«}| ¦« | |¦«} nÞ#tj $rp} t  dt| ¦«dt¦«ji¬¦«Yd} ~ | ¦«‰ ¦«dSd} ~ wt$t&jf$rHt d||¦«Y| ¦«‰ ¦«dSwxYw | ¦«‰ ¦«n-#| ¦«‰ ¦«wxYw‰  ¦«r$t d|j||¦«dS| €"| |||j|||¬ ¦«dS| |||j||| |¬ ¦«dS) NÚignore)Úerrorscó’•—‰ ¦« ‰ tj¦«dS#t$rYdSwxYw©N)ÚsetÚshutdownÚsocketÚ SHUT_RDWRrd)r•Údeadline_exceededs€€r+Ú_abort_on_deadlinez5Agent._process_connection.._abort_on_deadlineisYø€Ø × !Ò !Ñ #Ô #Ð #ð Ø×#Ò#¥FÔ$4Ñ5Ô5Ð5Ð5Ð5øÝð ð ð Ø��ð øøøs—8¸ AÁAzJSON decode failed: %sÚt_name©Úextraz5Connection read timed out or failed for pid=%s uid=%szAConnection read exceeded %ss deadline for pid=%s uid=%s, dropping)ržrŸr )ržrŸr¦r )rÚ settimeoutÚ _READ_TIMEOUTÚmakefilerrÚ_MAX_READ_DURATIONr‹Ú read_inputÚjsonÚJSONDecodeErrorrpr‘Ústrrr«Úcancelr’rdrºÚtimeoutreÚis_setÚ_submit_uid_jobr¥r­) rVr•r“r°r±Ú current_cpuÚfileobjr½ÚwatchdogÚ input_dataÚer¼s ` @r+r¯zAgent._process_connection[s«øø€õ6°dÑ;Ô;ˆ Ø×Ò˜dÔ0Ñ1Ô1Ð1Ø!+×!4Ò!4¸HÐ!4Ñ!EÔ!Eˆõ"™GœGÐð ð ð ð ð ð õ˜Ô0Ð2DÑEÔEˆØ�ŠÑÔÐð ØŸš¨Ñ1Ô1ˆJˆJøÝÔ#ð ð ð Ý �LŠLÐ1µ3°q±6´6À(ÍNÑL\ÔL\ÔLaÐAbˆLÑ cÔ cÐ cØ ˆFˆFˆFð �OŠOÑ Ô Ð ð × Ò Ñ Ô Ð Ð Ð øøøøõ�œÐ(ð ð ð Ý �NŠNÐRÐTXÐZ^Ñ _Ô _Ð _Ø à �OŠOÑ Ô Ð ð × Ò Ñ Ô Ð Ð Ð ð øøøð ð �OŠOÑ Ô Ð ð × Ò Ñ Ô Ð Ð øð �OŠOÑ Ô Ð ð × Ò Ñ Ô Ð Ð øøøà × #Ò #Ñ %Ô %ð õ �NŠNØSÐUYÔUlÐnrÐtxñ ô ð ð ˆFð Ð Ø × Ò Ø˜d DÔ$=ÀtÐWbÐosð !ñ ô ð ð ð ð × Ò ØØØÔ(ØØ%Ø'Øð !ñ ô ð ð ð s<ÂBÂFÂE1Â%=DÃ"FÄ5E1ÅFÅ0E1Å1FÆ*Gcóä—t|j¦«||jvrdndz}t|j|j|z¦«}|j|jz }t|jt ||¦«¦«S)aýDynamic max-min fair-share cap for one uid, in outstanding jobs. MUST be called while holding _uid_jobs_lock (it reads _uid_jobs). active = number of currently-active uids (those with > 0 outstanding jobs). _uid_jobs is kept free of zero-count entries, so its size is the active set; _uid itself is counted even on its first job (it is about to become active), so a flood never under-counts itself out of a share. The cap is: max(min_floor, min(capacity - reserve, max(min_floor, capacity // active))) * active == 1 -> capacity // 1 == capacity, clamped to capacity-reserve (e.g. 80-16=64): a lone user is bounded only by the real queue.Full, no regression, yet still leaves `reserve` slots for a new tenant. * active == N -> capacity // N: a fair split; a flooder is held to its share going forward and converges to it as its jobs drain. * min_floor stops the cap collapsing to 0 with very many active uids. * the OUTER max(min_floor, ...) keeps the cap >= min_floor even when the capacity - reserve clamp is <= 0 (e.g. maxqueuesize == 0, so capacity == max_workers == reserve): without it the cap would be 0 and _submit_uid_job would drop EVERY request from EVERY uid (total self-DoS). On such a tiny pool the per-uid cap is min_floor and the executor's real queue.Full (BoundedSemaphore = maxqueuesize + max_workers) is the backstop. rr )ÚlenrQr>r?r=r@Úmin)rVr±ÚactiveÚ fair_shareÚ reserve_clamps r+Ú_effective_uid_capzAgent._effective_uid_cap›sl€õ6�T”^Ñ$Ô$¨T°T´^Ð-CÐ-C¨¨ÈÑKˆÝ˜œ¨$Ô*=ÀÑ*GÑHÔHˆ ØÔ+¨d¬mÑ;ˆ Ý�4”?¥C¨ °zÑ$BÔ$BÑCÔCÐCr*c ó䇇‡‡—‰j5‰ ‰¦«}‰j ‰d¦«|krqt d‰‰j ‰d¦«|t ‰j¦«‰‰jvrdndz‰j‰j¦« ddd¦«dS‰j‰xxdz cc<‰xj dz c_ ddd¦«n #1swxYwYˆˆˆˆfd„} |  |¦«dS#tj $r3‰  ‰¦«t d¦«YdSt$r‰  ‰¦«‚wxYw)uM Submit a worker job into the shared workers_pool, enforcing a DYNAMIC max-min per-UID fair share of the real pool capacity, UNCONDITIONALLY. At submit time the per-UID cap is recomputed from the number of currently-active uids (see _effective_uid_cap): a sole active uid gets the whole capacity minus a reserved headroom (no regression — bounded only by the real queue.Full), while with N active uids each gets capacity // N (fair split). There is NO pressure gate: the cap alone provides both no-regression for a lone user and anti-monopolization under contention, and a flooder cannot defeat it by supplying its own load. The reserved headroom guarantees a newly-arriving tenant always finds free slots even when one uid has filled its share. rz¸Per-UID fair-share drop: uid=%s holds %s outstanding jobs (dynamic fair-share cap %s for %s active uid(s), pool capacity %s, reserve %s); dropping this request to protect other tenantsr Ncót•— ‰di‰¤Ž‰ ‰¦«S#‰ ‰¦«wxYw)Nr))Ú_release_uid_job)r±ÚfnÚkwargsrVs€€€€r+Ú_jobz#Agent._submit_uid_job.._jobàsHø€ð ,Ø�r�|�|˜F�|�|à×%Ò% dÑ+Ô+Ð+Ð+ø�×%Ò% dÑ+Ô+Ð+Ð+øøøsƒ  7z€Request %s was rejected because our workers thread pool is full of tasks. Increase queuemaxsize or max_threads in configuration.)rSrØrQrªrprerÓr=r@rRr�r�r�rÛr‘Ú BaseException)rVr“r±rÜrÝÚ effective_caprÞs` ``` r+rÌzAgent._submit_uid_job»s%øøøø€ðÔ ð &ð &Ø ×3Ò3°DÑ9Ô9ˆMØŒ~×!Ò! $¨Ñ*Ô*¨mÒ;Ð;Ý—’ðEðØ”N×&Ò& t¨QÑ/Ô/Ø!ݘœÑ'Ô'°¸¼Ð0FÐ0F¨1¨1ÈAÑNØÔ'Ø”Mñ ô ð ðð &ð &ð &ñ &ô &ð &ð &ð &ð ŒN˜4Ð Ð Ô  AÑ %Ð Ð Ñ Ø Ð Ô  AÑ %Ð Ô ð# &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð, ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð  Ø × Ò  Ñ %Ô %Ð %Ð %Ð %øÝŒzð ð ð ð × !Ò ! $Ñ 'Ô 'Ð 'Ý �LŠLð[ñ ô ð ð ˆFˆFÝð ð ð à × !Ò ! $Ñ 'Ô 'Ð 'Ø ð øøøs*ŒBC#Â2%C#Ã#C'Ã*C'Ã7DÄ>E/Å E/cóØ—|j5|j|xxdzcc<|j|dkr|j|=|jdkr|xjdzc_ddd¦«dS#1swxYwYdS)a*Decrement the per-UID and total outstanding-job counters under the lock. The total counter is floored at 0 so it can never underflow if a release is somehow called more often than expected, and zero-count per-UID entries are deleted to keep _uid_jobs from growing unbounded.r rN)rSrQrR)rVr±s r+rÛzAgent._release_uid_job÷sÍ€ð Ô ð *ð *Ø ŒN˜4Ð Ð Ô  AÑ %Ð Ð Ñ ØŒ~˜dÔ# qÒ(Ð(Ø”N 4Ð(ØÔ# aÒ'Ð'ØÐ$Ô$¨Ñ)Ð$Ô$ð  *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *sˆA AÁA#Á&A#Úfileiocó$—| |j¦«}t dt |¦«¦«t | ¦«¦«dkrdSt j| ¦«d¬¦«S)zy Read input data and return decoded json :param fileio: a file-like object providing read method zReceived %d bytesrNF)Ústrict)ÚreadÚ_MAX_READ_SIZErpÚdebugrÓÚstriprÆÚloads)rVrâršs r+rÅzAgent.read_inputsp€ð �{Š{˜4Ô.Ñ/Ô/ˆÝ� Š Ð(­#¨d©)¬)Ñ4Ô4Ð4Ý ˆt�zŠz‰|Œ|Ñ Ô  Ò !Ð !Ø ˆFÝŒz˜$Ÿ*š*™,œ,¨uÐ5Ñ5Ô5Ð5r*Ú fake_task_idr cóΗ tt¦«5} || ¦«}nA#t$r4t t d¦«|| ¦«dœ¬¦«‚wxYw ddd¦«n #1swxYwYn>#t$r1}t t d¦«t|¦«z¦«‚d}~wwxYw|  |j |¬¦«S)z< Initialize MongoDB client for current task z9Cannot resolve tracing_task_id: no match found in storage)ÚidÚall_idsr¿Nz"Cannot resolve tracing_task_id: %s)r6r¨) rrÚdecodeÚKeyErrorrÚ_ÚkeysÚ RuntimeErrorrÈrGr8)rVrêÚ task_storageÚreal_idrÑs r+Úinstantiate_mongo_clientzAgent.instantiate_mongo_clientsE€ð NÝÕ0Ñ1Ô1ð °\ðØ*¨<Ô8×?Ò?ÑAÔA�G�GøÝðððÝ#ÝÐUÑVÔVØ%1¸l×>OÒ>OÑ>QÔ>QÐRÐRðñôððøøøðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øøõð Nð Nð NÝ�AÐBÑCÔCÅcÈ!ÁfÄfÑLÑMÔMÐ Møøøøð Nøøøð×&Ò&°´ÈgÐ&ÑVÔVÐVsN‚B –B˜3²B³>A1Á1BÁ5 B ÂBÂB ÂB B  CÂ,CÃCcó—t d|j¦«|j |¦«}|�|j|jfS| |¦«}| ¦«}t d|||¦«|j5|j |¦«}|�|j|jfcddd¦«St|j¦«|j kritt|j¦«¦«}t  dt|j¦«|¦«|j |¦«t||¬¦«|j|<ddd¦«n #1swxYwY||fS)zŠ Returns a client and task from cache of API data or initialize client and GET task from MongoDB and add to cache zCached API data: %sNz,Adding new container in cache: %s --> %s, %sz9api_data_cache at capacity (%d), evicting oldest entry %s)r#r$)rprçrJrªr#r$rõÚget_taskrHrÓÚ_MAX_CACHE_ENTRIESÚnextÚiterr_Úpopr")rVrêÚ cached_dataryÚ_tÚ oldest_keys r+rqzAgent.get_cached_or_load só€õ � Š Ð*¨DÔ,?Ñ@Ô@Ð@ðÔ)×-Ò-¨lÑ;Ô;ˆ Ø Ð "ØÔ% {Ô'7Ð7Ð 7à×1Ò1°,Ñ?Ô?ˆ Ø × Ò Ñ !Ô !ˆÝ� Š ÐCÀ\ÐSUÐW`ÑaÔaÐaØ Ô %ð \ð \ð Ô-×1Ò1°,Ñ?Ô?ˆKØÐ&Ø"Ô)¨;Ô+;Ð;ð \ð \ð \ð \ñ \ô \ð \ð \õ�4Ô&Ñ'Ô'¨4Ô+BÒBÐBÝ!¥$ tÔ':Ñ";Ô";Ñ<Ô<� Ý— ’ ØOÕQTÐUYÔUhÑQiÔQiÐkuñôððÔ#×'Ò'¨ Ñ3Ô3Ð3Ý0@È ÐXZÐ0[Ñ0[Ô0[ˆDÔ   Ñ -ð \ð \ð \ñ \ô \ð \ð \ð \ð \ð \ð \øøøð \ð \ð \ð \ð ˜"ˆ}ÐsÂ*E:ÃBE:Å:E>ÆE>có— tt¦«5}d„| ¦«D¦«}ddd¦«n #1swxYwYn+#t$rt d¦«YdSwxYwt |j ¦«¦«D]c}|j5||jvr9||vr5t  d|¦«|j  |¦«ddd¦«n #1swxYwYŒddS)z‡ Cleanup an API data im-memory cache dict in order not store inactive (stopped, already completed) tasks there có6—g|]}| ¦«‘ŒSr))rî)Ú.0Úks r+ú z0Agent.cleanup_api_data_cache..Hs €ÐHÐHÐH¨q §¢¡ ¤ ÐHÐHÐHr*Nz,Unable to cleanup cache, storage unavailablez!Cleaning up inactive container %s) rrrñròrpreÚlistrJrHr_rû)rVróÚ active_tasksÚ_tasks r+r�zAgent.cleanup_api_data_cacheAs¢€ð  ÝÕ0Ñ1Ô1ð I°\ØHÐH°L×4EÒ4EÑ4GÔ4GÐHÑHÔH� ð Ið Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Iøøåð ð ð Ý �NŠNÐIÑ JÔ JÐ JØ ˆFˆFð øøøõ˜$Ô-×2Ò2Ñ4Ô4Ñ5Ô5ð 3ð 3ˆEØÔ)ð 3ð 3ؘDÔ/Ð/Ð/°EÀÐ4MÐ4MÝ—K’KÐ CÀUÑKÔKÐKØÔ'×+Ò+¨EÑ2Ô2Ð2ð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3øð 3ð 3sF‚A –Aµ A ÁAÁA ÁAÁ A Á $A5Á4A5Â'AC6Ã6C: Ã=C: cóÒ—|d}|�¡tj|¦«st d|¦«dStj tt|¦«|¦«}tj  |¦«st d||¦«dS|  |¦«\}}t  d|j ¦«t|d|j¬¦«5}| |j¬¦«|jdkr(t  d ¦« ddd¦«dS| ||¦«}t  d ¦«| |¦« t  d ¦«| |¦«n#t*$rYnwxYw|xjd z c_| |j¬¦«ddd¦«n #1swxYwY|jr| |j¦«|jd kr"|jdkr| |¦«dSdSdS)aK Increment request ID in /usr/share/alt-php-xray/requests/{tracing_task_id} file Substitute request_id and tracing_task_id in request_data. Send request_data to ClickHouse :param request_data: original request data :param caller_uid: UID of the connecting process (from SO_PEERCRED) r¨Nz*Rejecting request with invalid task id: %szSRejecting request from uid=%s for task %s: no matching task file in per-UID storagezProcessing task: %s)r¤rmrz*Tracing count is 0, nothing should be donezSending to ClickHousezSending to SmartAdvicer ro)rÚmatchrprerbÚpathÚjoinrrÈÚisfilerqr_rwrÚ is_manualrrrnrvÚupdate_request_datarErFrraÚfake_idrsÚ complete_task) rVr¦r rêÚowner_task_filerðr$rzÚupdated_request_datas r+r¬zAgent.process_request_dataSs߀ð$Ð$5Ô6ˆ ð Ð !Ý"Ô(¨Ñ6Ô6ð Ý—’ÐKÈ\ÑZÔZÐZØ�Ý œgŸlšlÕ+=½sÀ:¹¼ÐP\Ñ]Ô]ˆOÝ”7—>’> /Ñ2Ô2ð Ý—’ØiØØ ñôðð �à×)Ò)¨,Ñ7Ô7‰ˆˆ4Ý� Š Ð)¨4¬<Ñ8Ô8Ð8Ý   Ð->Ô ?ÀtÄ~Ð VÑ VÔ Vð QÐZaà × 'Ò '¸Ô8OÐ 'Ñ PÔ PÐ PàÔ! QÒ&Ð&Ý— ’ ÐHÑIÔIÐIØð  Qð Qð Qñ Qô Qð Qð Qð Qð$(×#;Ò#;¸LÈ$Ñ#OÔ#OÐ å �KŠKÐ/Ñ 0Ô 0Ð 0Ø × Ò Ð1Ñ 2Ô 2Ð 2ð Ý— ’ Ð4Ñ5Ô5Ð5Ø×#Ò#Ð$8Ñ9Ô9Ð9Ð9øÝð ð ð ð�ð øøøð Ð #Ô # qÑ (Ð #Ô #à × 'Ò '¸Ô8OÐ 'Ñ PÔ PÐ Pð- Qð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð0 Œ>ð 7Ø × (Ò (¨¬Ñ 6Ô 6Ð 6Ø Œ?˜fÒ $Ð $¨Ô);¸qÒ)@Ð)@Ø × Ò ˜tÑ $Ô $Ð $Ð $Ð $ð %Ð $Ð)@Ð)@s>ÄAH ÅAH Æ/GÇH Ç GÇH ÇGÇ.H È HÈHršr$c óð—|jdz|d<|j|d<|dD]C}|jdz|d<|j|d<|ddkr| |d¦«|d<ŒDt d| d¦«| d¦«¦«t d t| dg¦«¦«| d¦«¦«|S) z£ Substitute request_id and tracing_task_id :param data: original input :param task: a Task instance :return: updated input r Ú request_idr¨ršÚtypeÚ mysql_queryÚqueryz5Input updated: tracing_task_id = %s & request_id = %sz2Updated input: %d item(s) for tracing_task_id = %s)rurwÚ hide_symbolsrpr_rªrçrÓ)rVršr$Úitems r+r zAgent.update_request_data�s €ð"Ô/°!Ñ3ˆˆ\ÑØ"&¤,ˆÐ ÑØ˜”Lð Að AˆDØ!%Ô!3°aÑ!7ˆD�Ñ Ø&*¤lˆDÐ"Ñ #Ø�FŒ|˜}Ò,Ð,Ø $× 1Ò 1°$°w´-Ñ @Ô @��W‘ øå� Š Ø CÀTÇXÂXÐN_ÑE`ÔE`Ðbf×bjÒbjÐkwÑbxÔbxñ ô ð õ � Š Ø @Å#ÀdÇhÂhÈvÐWYÑFZÔFZÑB[ÔB[Ð]a×]eÒ]eÐfwÑ]xÔ]xñ ô ð ðˆ r*r#rurvcó4—| ||¬¦«dS)z: Update task counters in mongodb instance )rvruN)Úupdate_counts_only)rVr#rurvs r+rtzAgent.update_counts¤s#€ð ×!Ò!° È]Ð!Ñ[Ô[Ð[Ð[Ð[r*rcó¢—t d|j¦«tjd¦«| |j¦«dS)z_ Stop and complete request_qty task :param _task: tracing task to stop zTask %s should be completedr N)rpr_rwror}Ú_run_complete_task_cmd)rVrs r+rzAgent.complete_taskªsD€õ � Š Ð1°5´=ÑAÔAÐAå Œ �1‰ Œ ˆ Ø ×#Ò# E¤MÑ2Ô2Ð2Ð2Ð2r*cóê— tjddd|jd|gdtj¬¦«dS#tjtjf$r'}t  d||¦«Yd}~dSd}~wwxYw)Nzcloudlinux-xray-managerÚstopz --system_idz--tracing_task_idéx)rÊÚstderrzFailed to complete task %s: %s)Ú subprocessÚ check_outputr8ÚPIPEÚTimeoutExpiredÚCalledProcessErrorrpr‘)rVrwrÑs r+rzAgent._run_complete_task_cmd´s¡€ð GÝ Ô #Ø*¨F°MÀ4Ä;ÐPcÐelÐmØÝ!”ð ñ ô ð ð ð øõ Ô)­:Ô+HÐIð Gð Gð GÝ �LŠLÐ9¸7ÀAÑ FÔ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Føøøøð Gøøøs‚,0°A2Á A-Á-A2rcó\—d„}tjd¦«}tj|||¦«S)zA Sanitize data in single quotes from MySQL query có—| d¦«}| d¦«}d„}tjd|| d¦«¦«}|›|›|p|›�S)zL Works with whole string in single or double quotes ÚquoteÚtrunccób—| d¦«rdS| d¦«rdSdS)zE Works with characters inside quotes ÚdigitÚ0ÚsymbolÚxN)Úgroup)Úinner_ms r+Ú inner_replz8Agent.hide_symbols..replacer..inner_replËs@€ð—=’= Ñ)Ô)ðؘ3Ø—]’] 8Ñ,Ô,ðؘ3ððr*z.((?P\d)|(?P[^0-9_:;\-/',. \\]))Úin_quote)r/ÚreÚsub)ÚmÚqÚtr1Ú sanitizeds r+Úreplacerz$Agent.hide_symbols..replacerÄsx€ð—’˜Ñ Ô ˆAØ—’˜Ñ Ô ˆAð ð ð õœÐPÐR\Ð^_×^eÒ^eÐfpÑ^qÔ^qÑrÔrˆIðÐ,˜Ð, A F¨Ð,Ð,Ð ,r*zH(?P['"])(?P.*?)((?\.{3})))r3Úcompiler4)rr9Úpatterns r+rzAgent.hide_symbols¾s7€ð  -ð -ð -õ0”*ÐlÑmÔmˆÝŒv�g˜x¨Ñ5Ô5Ð5r*r·)FN)rˆN)2r%r&r'Ú__doc__r~rr€røÚpsutilÚ cpu_countr[rgrkrar„rºÚboolr rNr‹r�r¥rIr­rærÂrÄrrŽr¯rØrÌrÛÚioÚ TextIOBaserrÅrÈrõr rrqr�r¬r rtrrÚ staticmethodrr)r*r+r-r-6s€€€€€ððð!ÐØÐØÐØÐð )˜Ô(Ñ*Ô*¨QÑ.à$�FÔ$Ñ&Ô&¨Ñ*Ø%�VÔ%Ñ'Ô'¨"Ñ,Ø $ØØ ðY5ðY5ðY5ðY5ðv Uð Uð Uð Zð Zð ZðVðVðVðVð23ð3ð3ð*%ð%˜&œ-ð%¸Tð%ÐRZÐ[^ÔR_ð%Ðkoð%ð%ð%ð%ðN_ð_ð_ð $ð $¨Cð $¸Cð $ÈXÐVYÌ]ð $ð $ð $ð $ð <¨3ð <¸3ð <Èdð <Ð`cð <ð <ð <ð <ð*%€Nà€Mð Ðð4°V´]ð4ÐRgð4Ðlpð4ð4ð4ð4ð<>Ø œ-ð>Ø7Lð>ØTWð>Ø_bð>à ð>ð>ð>ð>ð@D sðD¨sðDðDðDðDð@:Ð,Að:Èð:Ð_cð:ð:ð:ð:ðx * Sð *¨Tð *ð *ð *ð *ð 6 ¤ð 6°3ð 6ð 6ð 6ð 6ðW°SðW¸[ðWðWðWðWð$¨sð°u¸[È$Ð=NÔ7OðððððB3ð3ð3ð3ð$8%ð8%°ð8%À3ð8%ÐRVð8%ð8%ð8%ð8%ðt¨ð°Dð¸Tððððð.\ð\ Kð\Àð\ÐT\Ð]`ÔTað\Ðmqð\ð\ð\ð\ð 3 4ð3¨Dð3ð3ð3ð3ðGðGðGðð6 #ð6¨#ð6ð6ð6ñ„\ð6ð6ð6r*r-)?r<rLr@rÆr^rbr�r3rArºr!roÚtypingÚ threadingrrrrrrr r r Ú dataclassesr r=ÚexecutorrÚxrayrrðÚxray.apiclientrÚxray.internal.constantsrrrÚxray.internal.exceptionsrrrKrÚxray.internal.local_countersrrrÚxray.internal.typesrÚxray.internal.user_plugin_utilsrÚxray.internal.utilsrrÚ TYPE_CHECKINGÚxray.apiclient.api_clientrrr r"Ú getLoggerr%rpr-r)r*r+úrRsrððððÐÐÐØ € € € Ø € € € Ø€€€Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € ØÐÐÐØ € € € Ø € € € Ø@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø!Ð!Ð!Ð!Ð!Ð!à € € € à+Ð+Ð+Ð+Ð+Ð+ØÐÐÐÐÐØ%Ð%Ð%Ð%Ð%Ð%Ø\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø)Ð)Ð)Ð)Ð)Ð)Ø_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ø$Ð$Ð$Ð$Ð$Ð$Ø9Ð9Ð9Ð9Ð9Ð9ØLÐLÐLÐLÐLÐLÐLÐLà ÔðVØUÐUÐUÐUÐUÐUÐUÐUÐUÐUð ðððððñôñ „ðð ˆÔ ˜8Ñ $Ô $€ðg 6ðg 6ðg 6ðg 6ðg 6ñg 6ôg 6ðg 6ðg 6ðg 6r*