
    i                         d Z ddlZddlZddlmZmZ ddlmZmZmZm	Z	 ddl
mZmZ  ej                  d      Z G d d	      Zy)
z=Structured audit logging for the Publishing Integrity system.    N)datetimetimezone)DictAnyOptionalList   )AuditActionValidationStatezpub-integrityc                       e Zd ZdZdedefdZ	 	 	 ddededed	ed
edee   dee   dee	ee
f      fdZddededee	   fdZde	ee
f   fdZy)IntegrityAuditLoggerz5Structured logger for publishing integrity decisions.run_idrun_typec                 ~    || _         || _        g | _        t        j                  t
        j                        | _        y N)r   r   entriesr   nowr   utc
started_at)selfr   r   s      E/var/www/html/rainmaker/backend/scripts/publishing_integrity/audit.py__init__zIntegrityAuditLogger.__init__   s+     -/",,x||4    Nactionplayer_namegame_idleaguevalidation_statesuppress_reasondetailconflictc	                    t        j                  t        j                        j	                         | j
                  | j                  |j                  ||||j                  |||d}	| j                  j                  |	       |t        j                  k(  r3t        j                  d| d| d| d|j                   d|xs d 
       y |t        j                  k(  r t        j                  d| d| d| d       y |t        j                   k(  r3t        j                  d| d| d| d|j                   d|xs d 
       y y )N)	timestampr   r   r   r   r   r   r   r   r    r!   z[SUPPRESS] z | zN/Az
[PUBLISH] z | VERIFIEDz[UNPUBLISH] )r   r   r   r   	isoformatr   r   valuer   appendr
   
SUPPRESSEDlogwarning	PUBLISHEDinfoUNPUBLISHED)
r   r   r   r   r   r   r   r    r!   entrys
             r   log_decisionz!IntegrityAuditLogger.log_decision   s>    "hll3==?kkll& 0 6 6. 
 	E" [+++KKk]#gYc&#))*#o.F-GI {,,,HH[MWISL {...KK{m3wis6(##))*#fo->@ /r   severitymessagedatac           	         t         j                  d|j                          d|        | j                  j	                  t        j                  t        j                        j                         | j                  d|||d       y )Nz[ALERT-z] alert)r#   r   typer/   r0   r1   )r(   r)   upperr   r&   r   r   r   r   r$   r   )r   r/   r0   r1   s       r   	log_alertzIntegrityAuditLogger.log_alert@   sf    ghnn./r';<!hll3==?kk 
 	r   returnc                    t        j                  t        j                        | j                  z
  j                         }i }| j                  D ],  }|j                  dd      }|j                  |d      dz   ||<   . | j                  | j                  | j                  j                         t        |d      t        | j                        |dS )Nr   otherr   r	   )r   r   r   elapsed_secondstotal_decisionsaction_counts)r   r   r   r   r   total_secondsr   getr   r   r$   roundlen)r   elapsedactionseas        r   summaryzIntegrityAuditLogger.summaryK   s    <<-?NNP 	/Ah(A Q*Q.GAJ	/
 kk//335$Wa0"4<<0$
 	
r   )NNNr   )__name__
__module____qualname____doc__strr   r
   r   r   r   r   r.   r6   rE    r   r   r   r      s    ?5s 5c 5 *. $-1(( ( 	(
 ( *( "#( ( 4S>*(T	# 	 	8D> 	
c3h 
r   r   )rI   jsonloggingr   r   typingr   r   r   r   enumsr
   r   	getLoggerr(   r   rK   r   r   <module>rQ      s8    C   ' , , /g(L
 L
r   