
    hj>                    $   d Z ddlmZ 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	Z	ddl
mZ ddlmZmZ ddlmZ ddlmZ  eej$                  j'                  dd	            Zej*                  j-                  d
d
       ddZ G d d      ZdddZy)a	  Aria Structured Logging Library (KAR-220 Phase 1).

Zentraler JSON-Logger fuer alle Aria-Skills + Cron-Services.
Schreibt Append-only nach /root/aria/logs/aria.jsonl mit
Pflichtfeldern: ts, level, skill, event, correlation_id,
payload_hash, error, duration_ms.

Usage:
    from aria_logging import get_logger
    log = get_logger("aria-akp-ingest")
    log.event("ingest_start", videos=5)
    log.error("yt_dlp_failed", err="...", video_id="abc")
    with log.timed("transcript_fetch", video_id="abc"):
        do_work()
    )annotationsN)contextmanager)datetimetimezone)Path)AnyARIA_LOG_PATHz/root/aria/logs/aria.jsonlT)parentsexist_okc                    | syt        j                  | dt              j                         }t	        j
                  |      j                         d d S )N T)	sort_keysdefault   )jsondumpsstrencodehashlibsha256	hexdigest)payloadraws     /root/aria/lib/aria_logging.py_payload_hashr   !   sB    
**Wc
:
A
A
CC>>#((*3B//    c                  T    e Zd Zd	d
dZdddZddZddZdddZddZe	dd       Z
y)
AriaLoggerNc                d    || _         |xs  t        t        j                               d d | _        y )N   )skillr   uuiduuid4correlation_id)selfr!   r$   s      r   __init__zAriaLogger.__init__)   s(    
,FDJJL0A#20Fr   c           	        t        j                  t        j                        j	                         || j
                  || j                  t        |      ||d}|r||d<   	 t        j                  d      5 }|j                  t        j                  |t              dz          d d d        y # 1 sw Y   y xY w# t        $ r(}t        d| t         j"                         Y d }~y d }~ww xY w)N)tslevelr!   eventr$   payload_hasherrorduration_msr   a)r   
z[aria-log] write failed: )file)r   nowr   utc	isoformatr!   r$   r   LOG_PATHopenwriter   r   r   OSErrorprintsysstderr)	r%   r)   r*   r,   r-   r   recordfes	            r   _writezAriaLogger._write-   s    ,,x||,668ZZ"11)'2&	
  'F9	Ds# @q

637$>?@ @ @ 	D-aS1

CC	Ds6    B8 5.B,#B8 ,B51B8 5B8 8	C)C$$C)c                ,     | j                   d|fi | y )Ninfor>   r%   r*   r   s      r   r*   zAriaLogger.event@       FE-W-r   c                ,     | j                   d|fi | y )NwarnrA   rB   s      r   rE   zAriaLogger.warnC   rC   r   c                0     | j                   d|fd|i| y )Nr,   rA   )r%   r*   errr   s       r   r,   zAriaLogger.errorF   s    GU9#99r   c                X    t        j                         } | j                  d|fd|i| y )N	exceptionr,   )	traceback
format_excr>   )r%   r*   r   tbs       r   rI   zAriaLogger.exceptionI   s*    !!#K<b<G<r   c              +  6  K   t        j                         }	 d  t        j                         |z
  dz  } | j                  d|fd|i| y # t        $ r@}t        j                         |z
  dz  } | j                  d|ft	        |      |d|  d }~ww xY ww)Ni  r@   r-   rI   )r,   r-   )time	monotonicr>   	Exceptionr   )r%   r*   r   t0durationr=   s         r   timedzAriaLogger.timedM   s     ^^	H (2-5HDKKG8GwG  	(2-5HDKKUZ#a&hZRYZ	s'   BA 1B	B;BBBN)r!   r   r$   
str | NonereturnNone)r   N)r)   r   r*   r   r,   r   r-   zfloat | Noner   r   rV   rW   )r*   r   r   r   rV   rW   )r   )r*   r   rG   r   r   r   rV   rW   )r*   r   r   r   )__name__
__module____qualname__r&   r>   r*   rE   r,   rI   r   rS    r   r   r   r   (   s8    GD&..:= 
H 
Hr   r   c                    t        | |      S rT   )r   )r!   r$   s     r   
get_loggerr]   [   s    e^,,r   )r   dictrV   r   rT   )r!   r   r$   rU   rV   r   )__doc__
__future__r   r   r   osr9   rN   rJ   r"   
contextlibr   r   r   pathlibr   typingr   environgetr4   parentmkdirr   r   r]   r[   r   r   <module>ri      sx    #   	 
    % '  

0LMN   dT  200H 0Hf-r   