§
    ~žjË  ã                   ó”   — d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlmZ  ej        d¦  «        Z G d„ d¦  «        ZdS )uË   
Há»™p Ä�en LÆ°u Trá»¯ Telemetry & Sá»± Kiá»‡n Tá»­ Váº­n (Blackbox Telemetry Recorder)
Duy trÃ¬ Ring Buffer 120 ticks gáº§n nháº¥t phá»¥c vá»¥ phÃ¢n tÃ­ch nguyÃªn nhÃ¢n tá»­ vong (Root Cause Analysis).
é    N)Údeque)ÚAnyÚDictÚListÚOptional)ÚCoreTelemetrySnapshotÚBlackboxRecorderc                   ó    — e Zd ZdZddedefd„Zdedd	fd
„Zdde	e         de
eeef                  fd„Zddede	eeef                  defd„Zd	S )r	   u¯   
    Bá»™ ghi Ä‘á»‡m há»™p Ä‘en Telemetry (Circular Ring Buffer).
    LÆ°u trá»¯ 120 ticks gáº§n nháº¥t (tÆ°Æ¡ng Ä‘Æ°Æ¡ng 4-10 giÃ¢y thá»±c chiáº¿n trÆ°á»›c sá»± kiá»‡n).
    éx   ÚcapturesÚcapacityÚ
output_dirc                 ó�   — || _         || _        t          |¬¦  «        | _        d | _        t          j        | j        d¬¦  «         d S )N)ÚmaxlenT)Úexist_ok)r   r   r   ÚbufferÚlast_export_pathÚosÚmakedirs)Úselfr   r   s      ú3C:\Projects\AutoPOE2\src\agentic_engine\blackbox.pyÚ__init__zBlackboxRecorder.__init__   sG   € Ø ˆŒØ$ˆŒÝ"¨(Ð3Ñ3Ô3ˆŒØ/3ˆÔÝ
Œ�D”O¨dÐ3Ñ3Ô3Ð3Ð3Ð3ó    ÚsnapshotÚreturnNc                 ó,  — |j         }i d|j        “d|j        p"t          t	          j        ¦   «         dz  ¦  «        “d|j        “d|j        “dt          |j        d¦  «        “d|j	        “d	|j
        “d
|j        “d|j        “d|j        “d|j        “dt          |j        d¦  «        t          |j        d¦  «        t          |j        d¦  «        g“d|j        “d|j        “d|j        “d|j        “d|j        “}| j                             |¦  «         dS )u6   Ghi nháº­n 1 snapshot tá»« ShmBridge vÃ o Ring Buffer.Úsnapshot_idÚtimestamp_msiè  ÚhpÚmax_hpÚhp_pcté   ÚmanaÚmax_manaÚesÚmax_esÚspiritÚ
max_spiritÚpos_xyzÚmonsters_countÚitems_countÚportals_countÚ	area_nameÚ
area_levelN)Úplayerr   r   ÚintÚtimeÚ
current_hpr    ÚroundÚhp_percentageÚcurrent_manar$   Ú
current_esr&   Úcurrent_spiritr(   Úpos_xÚpos_yÚpos_zr*   r+   r,   r-   r.   r   Úappend)r   r   ÚpÚ	tick_datas       r   Úrecord_snapshotz BlackboxRecorder.record_snapshot   sk  € àŒOˆð
Ø˜8Ô/ð
à˜HÔ1ÐLµS½¼¹¼ÀtÑ9KÑ5LÔ5Lð
ð �!”,ð
ð �a”hð	
ð
 •e˜AœO¨QÑ/Ô/ð
ð �A”Nð
ð ˜œ
ð
ð �!”,ð
ð �a”hð
ð �aÔ&ð
ð ˜!œ,ð
ð �˜aœg qÑ)Ô)­5°´¸!Ñ+<Ô+<½eÀAÄGÈQÑ>OÔ>OÐPð
ð ˜hÔ5ð
ð ˜8Ô/ð
ð ˜XÔ3ð
ð  ˜Ô+ð!
ð" ˜(Ô-ð#
ˆ	ð& 	Œ×Ò˜9Ñ%Ô%Ð%Ð%Ð%r   Úcountc                 ón   — t          | j        ¦  «        }|r|t          |¦  «        k     r|| d…         S |S )u)   Láº¥y danh sÃ¡ch cÃ¡c ticks gáº§n nháº¥t.N)Úlistr   Úlen)r   r?   Údatas      r   Úget_recent_ticksz!BlackboxRecorder.get_recent_ticks7   s>   € å�D”KÑ Ô ˆØð 	!�U�S ™YœYÒ&Ð&Ø˜˜˜˜”=Ð Øˆr   ÚPLAYER_DEATHÚtrigger_reasonÚextra_contextc           
      óè  — t          | j        ¦  «        }|st                               d¦  «         dS t	          j        d¦  «        }d|                     ¦   «         › d|› d�}t          j         	                    | j
        |¦  «        }|d         }|d         }|                     d	d¦  «        |                     d	d¦  «        z
  }	|                     d
d¦  «        |                     d
d¦  «        z
  }
|t	          j        d¦  «        t          |¦  «        |
t          d|	¦  «        |                     dd¦  «        |                     dd¦  «        |pi dœ|dœ}	 t          |dd¬¦  «        5 }t          j        ||dd¬¦  «         ddd¦  «         n# 1 swxY w Y   || _        t                               d|› �¦  «         |S # t&          $ r(}t                               d|› �¦  «         Y d}~dS d}~ww xY w)ul   
        KhÃ³a vÃ  káº¿t xuáº¥t toÃ n bá»™ Ring Buffer ra tá»‡p JSON phá»¥c vá»¥ Reflection Critic.
        u<   [Blackbox] Ring buffer rá»—ng, khÃ´ng thá»ƒ xuáº¥t blackbox.Ú z%Y%m%d_%H%M%SÚ	blackbox_Ú_z.jsonr   éÿÿÿÿr   r   z%Y/%m/%d %H:%M:%Sr-   ÚUnknownr.   )rF   Úexported_atÚticks_countÚduration_msÚhp_drop_totalr-   r.   rG   )ÚmetadataÚtelemetry_ticksÚwzutf-8)Úencodingr"   F)ÚindentÚensure_asciiNu'   [Blackbox] Ä�Ã£ lÆ°u há»™p Ä‘en táº¡i: u   [Blackbox] Lá»—i ghi file: )rA   r   ÚloggerÚwarningr1   ÚstrftimeÚlowerr   ÚpathÚjoinr   ÚgetrB   ÚmaxÚopenÚjsonÚdumpr   ÚinfoÚ	ExceptionÚerror)r   rF   rG   ÚticksÚtimestamp_strÚfilenameÚfilepathÚ
first_tickÚ	last_tickÚhp_droprP   ÚpayloadÚfÚes                 r   Úexport_blackboxz BlackboxRecorder.export_blackbox>   sO  € õ �T”[Ñ!Ô!ˆØð 	Ý�NŠNÐYÑZÔZÐZØ�2åœ oÑ6Ô6ˆØL˜~×3Ò3Ñ5Ô5ÐLÐL¸ÐLÐLÐLˆÝ”7—<’< ¤°Ñ:Ô:ˆà˜1”Xˆ
Ø˜"”Iˆ	Ø—.’.  qÑ)Ô)¨I¯MªM¸$ÀÑ,BÔ,BÑBˆØ—m’m N°AÑ6Ô6¸¿ºÈÐXYÑ9ZÔ9ZÑZˆð #1Ý#œ}Ð-@ÑAÔAÝ" 5™zœzØ*Ý!$ Q¨¡¤Ø&Ÿ]š]¨;¸	ÑBÔBØ'Ÿmšm¨L¸!Ñ<Ô<Ø!.Ð!4°"ð	ð 	ð  %ð
ð 
ˆð	Ý�h ¨gÐ6Ñ6Ô6ð D¸!Ý”	˜' 1¨Q¸UÐCÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dà$,ˆDÔ!Ý�KŠKÐLÀ(ÐLÐLÑMÔMÐMØˆOøÝð 	ð 	ð 	Ý�LŠLÐ:°qÐ:Ð:Ñ;Ô;Ð;Ø�2�2�2�2�2øøøøð	øøøs<   ÅF? Å)FÆF? ÆFÆF? ÆFÆ(F? Æ?
G1Ç	G,Ç,G1)r   r   )N)rE   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   Ústrr   r   r>   r   r   r   r   rD   rp   © r   r   r	   r	      sâ   € € € € € ðð ð
4ð 4 ð 4¸ð 4ð 4ð 4ð 4ð&Ð(=ð &À$ð &ð &ð &ð &ð0ð  h¨s¤mð ¸tÀDÈÈcÈÄNÔ?Sð ð ð ð ð(ð (¨cð (ÐS[Ð\`ÐadÐfiÐaiÔ\jÔSkð (Ðwzð (ð (ð (ð (ð (ð (r   )rt   ra   Úloggingr   r1   Úcollectionsr   Útypingr   r   r   r   Ú"src.assistant_tool.core_shm_bridger   Ú	getLoggerrX   r	   rv   r   r   ú<module>r|      sÌ   ððð ð
 €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à DÐ DÐ DÐ DÐ DÐ Dà	ˆÔ	Ð-Ñ	.Ô	.€ðTð Tð Tð Tð Tñ Tô Tð Tð Tð Tr   