§ WèÄjÑã óx—UddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ej e¦«Ze Gd„d¦«¦«ZiZeeefed<ej¦«Zedd ed eeddffd „¦«Zd „Zd„Zdd eeeffd„Zd ed edzfd„Zd„Zd edefd„Zd efd„ZdS)éN)Ú Generator)Úcontextmanager)Ú dataclass)Úrequest_data_storageÚsafe_id_patterncóH—eZdZUdZejed<eed<ed„¦«Z dS)ÚTaskCounterStoragezH Typing that has lock and value storage with some syntax sugar. ÚlockÚnext_request_idcó—|jdz S)Né)r )Úselfs úS/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/internal/local_counters.pyÚprocessed_requestsz%TaskCounterStorage.processed_requestss€àÔ# aÑ'Ð'óN) Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú threadingÚLockÚ__annotations__ÚintÚpropertyr©rrr r sU€€€€€€ððð Œ.ÐÐÑØÐÐÑà ð(ð(ñ„Xð(ð(ð(rr Ú_request_id_storageFÚ fake_task_idÚreturnc#óªK—t d|¦« t|¦«}|j5t5t  |¦«|ur ddd¦«ddd¦«ŒT ddd¦«n #1swxYwY|V—|r+t d|¦«t||¦« ddd¦«dS#1swxYwYŒ¶)zÉ Open local task information storage. @param fake_task_id: unique string, usually obtained as task.fake_id @param flush: whether to save data to file right after update zOpening storage %sTNz)Updating task %s requests counter in file) ÚloggerÚdebugÚ_get_or_create_recordr Ú_global_storage_lockrÚgetÚinfoÚ_save_data_to_file)rÚflushÚstorages rÚopen_local_storager)$sŽèè€õ ‡L‚LÐ% |Ñ4Ô4Ð4ð Ý'¨ Ñ5Ô5ˆØ Œ\ð ð Ý%ð ð Ý&×*Ò*¨<Ñ8Ô8ÀÐGÐGðð  ð ð ñ ô ð ð ð ð ñ ô ð ð àGð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆMˆMˆMàð :Ý— ’ ÐGÈÑVÔVÐVÝ" <°Ñ9Ô9Ð9Ø ð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð s:µC ½A?Á C Á3 C Á?B ÂC ÂB Â5C à C ÃC có|—t d|¦«t5t |¦«}ddd¦«n #1swxYwY|€dS|j5t5t |¦«|urt|=ddd¦«n #1swxYwYddd¦«dS#1swxYwYdS)zw Remove local storage record. @param fake_task_id: unique string, usually obtained as task.fake_id z#Removing memory storage for task %sN)r r%r#rr$r )rr(s rÚremove_local_storager+>sy€õ  ‡K‚KÐ5°|ÑDÔDÐDÝ ð8ð8Ý%×)Ò)¨,Ñ7Ô7ˆð8ð8ð8ñ8ô8ð8ð8ð8ð8ð8ð8øøøð8ð8ð8ð8à€Øˆà Œð2ð2Õ+ð2ð2Ý × "Ò " <Ñ 0Ô 0°GÐ ;Ð ;Ý# LÐ1ð2ð2ð2ñ2ô2ð2ð2ð2ð2ð2ð2øøøð2ð2ð2ð2ð2ð2ð2ñ2ô2ð2ð2ð2ð2ð2ð2ð2øøøð2ð2ð2ð2ð2ð2sG£A Á AÁAÁ B1Á(%B B1ÂB ÂB1 B Â!B1Â1B5Â8B5có*—tt¦«S)z8 List all fake task ids saved in local storage. )ÚlistrrrrÚ get_task_idsr.Os€õ Õ#Ñ $Ô $Ð$rTcóž—i}tt ¦«¦«D]£}t d|¦«t |¦«5}t ||¦«|j||<|rCt5t  |¦«|urt|=ddd¦«n #1swxYwYddd¦«n #1swxYwYŒ¤|S)zr Save all in-memory task counters on disk. Return the written values: {fake_task_id: next_request_id} zFlushing task id %s on diskN) r-rÚkeysr r%r)r&r r#r$)ÚremoveÚwrittenrr(s rÚflush_memory_storager3VsM€ð €GÝÕ0×5Ò5Ñ7Ô7Ñ8Ô8ð >ð >ˆ Ý� Š Ð1°<Ñ@Ô@Ð@Ý   Ñ -Ô -ð >°Ý ˜|¨WÑ 5Ô 5Ð 5Ø$+Ô$;ˆG�LÑ !Øð >õ*ð>ð>Ý*×.Ò.¨|Ñ<Ô<ÀÐGÐGÝ/° Ð=ð>ð>ð>ñ>ô>ð>ð>ð>ð>ð>ð>øøøð>ð>ð>ð>ð  >ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >øð €Ns6Á$CÁ9%B* CÂ*B. Â.CÂ1B. Â2CÃC ÃC có$—tj|¦«sdStj t |¦«} t |dt¬¦«5}t|  ¦«¦«cddd¦«S#1swxYwYdS#ttf$rYdSt$rc}|j tjkrt d|¦«n't d||j |j¦«Yd}~dSd}~wwxYw)zÝ Read the next_request_id saved on disk for the task, without creating an in-memory record. None if there is no (valid, readable) counter file: it never raises, the SIGUSR2 handler calls it before its ack NÚr©ÚopenerúRefusing to follow symlink: %sz-Unable to read counter file %s: errno %s (%s))rÚmatchÚosÚpathÚjoinrÚopenÚ_nofollow_openerrÚreadÚFileNotFoundErrorÚ ValueErrorÚOSErrorÚerrnoÚELOOPr ÚwarningÚstrerror)rÚ req_id_fileÚfÚes rÚread_counter_filerJjsQ€õ Ô  Ñ .Ô .ð؈tÝ”'—,’,Õ3°\ÑBÔB€Kð Ý �+˜sÕ+;Ð <Ñ <Ô <ð !ÀÝ�q—v’v‘x”x‘=”=ð !ð !ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð !ð !øå �zÐ *ððð؈tˆtÝ ðððØ Œ7•e”kÒ !Ð !Ý �NŠNÐ;¸[Ñ IÔ IÐ IÐ Iå �NŠNÐJÈKÐYZÔY`ÐbcÔblÑ mÔ mÐ m؈tˆtˆtˆtˆtøøøøð øøøsB½BÁ!BÁ5 BÂBÂB B BÂDÂ# DÂ,AD Ä DcóH—tj||tjzd¦«S)Ni€)r:r=Ú O_NOFOLLOW)r;Úflagss rr>r>€s€Ý Œ7�4˜¥¤Ñ.°Ñ 6Ô 6Ð6rr(cóâ—|rtj|¦«std|›�¦«‚tj t |¦«} t|dt¬¦«5}|  t|j ¦«¦«ddd¦«dS#1swxYwYdS#t$r<}|j tjkr!t d|¦«Yd}~dS‚d}~wwxYw)z1 Saves storage data from memory to file. zInvalid task_id format: Úwr6Nr8)rr9rAr:r;r<rr=r>ÚwriteÚstrr rBrCrDr rE©rr(rGrHrIs rr&r&„s9€ð ðD�Ô4°\ÑBÔBðDÝÐB°LÐBÐBÑCÔCÐCÝ”'—,’,Õ3°\ÑBÔB€KðÝ �+˜sÕ+;Ð <Ñ <Ô <ð 2ÀØ �GŠG•C˜Ô/Ñ0Ô0Ñ 1Ô 1Ð 1ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2øå ðððØ Œ7•e”kÒ !Ð !Ý �NŠNÐ;¸[Ñ IÔ IÐ IØ ˆFˆFˆFˆFˆFØ øøøøð øøøsBÁB(Á&(B B(ÂBÂB(Â"BÂ#B(Â( C.Â20C)Ã(C)Ã)C.cóÌ—t5|tv�r-ttj¦«d¬¦«t|<t|}t j t|¦«} t|dt¬¦«5}t|  ¦«¦«|_ ddd¦«n #1swxYwYn‡#t$rYn{t$rt  d|¦«YnUt$$r<}|jt&jkrt  d|¦«n‚Yd}~nd}~wwxYwt|}ddd¦«n #1swxYwY|S)zO Takes record from local storage or creates new one and returns object r )r r r5r6Nz8Corrupted counter file for task %s, resetting to defaultr8)r#rr rrr:r;r<rr=r>rr?r r@rAr rErBrCrDrRs rr"r"•sæ€õ ð8ð8Ø Õ2Ð 2Ñ 2Ý0BÍ ÌÑHXÔHXÐjkÐ0lÑ0lÔ0lÕ   Ñ -å)¨,Ô7ˆGåœ'Ÿ,š,Õ';¸\ÑJÔJˆKð ݘ+ sÕ3CÐDÑDÔDð<ÈÝ.1°!·&²&±(´(©m¬m�GÔ+ð<ð<ð<ñ<ô<ð<ð<ð<ð<ð<ð<øøøð<ð<ð<ð<øøå$ð ð ð Ø�Ýð ið ið iÝ—’ÐYÐ[gÑhÔhÐhÐhÐhÝð ð ð Ø”7�eœkÒ)Ð)Ý—N’NÐ#CÀ[ÑQÔQÐQÐQàðRÐQÐQÐQÐQøøøøð øøøõ *¨,Ô7ˆGð)8ð8ð8ñ8ô8ð8ð8ð8ð8ð8ð8øøøð8ð8ð8ð8ð* €NsxˆA'EÁ0CÂ'B:Â. CÂ:B> Â>CÃB> ÃCÃEà D=ÃEÃ$D=Ã6EÃ8 D=Ä2D8Ä3EÄ8D=Ä=EÅEÅ E)F)T) rCÚloggingr:rÚcollections.abcrÚ contextlibrÚ dataclassesrÚxray.internal.constantsrrÚ getLoggerrr r rÚdictrQrrr#r)r+r.rr3rJr>r&r"rrrúr[søðð  € € € € Ø€€€Ø € € € ØÐÐÐØ%Ð%Ð%Ð%Ð%Ð%Ø%Ð%Ð%Ð%Ð%Ð%Ø!Ð!Ð!Ð!Ð!Ð!àIÐIÐIÐIÐIÐIÐIÐIà ˆÔ ˜8Ñ $Ô $€ð ð (ð (ð (ð (ð (ñ (ô (ñ „ð (ð68Ð�T˜#Ð1Ð1Ô2Ð7Ð7Ñ7Ø%�y”~Ñ'Ô'Ðððð Sð¸)ÐDVÐX\Ð^bÐDbÔ:cðððñ„ðð22ð2ð2ð"%ð%ð%ðð¨¨c°3¨h¬ððððð( Cð¨C°$©Jððððð,7ð7ð7ð SðÐ3Eððððð"Ð+=ððððððr