
    Xj                     H   d dl m Z mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  ee          Z edg          Z G d de	          Z G d de	          Ze                    dee                    ed d            eddd          dddddd ee           e ed                    f
dedededz  dedz  de dz  de dz  d e dz  d!e dz  d"ed#efd$            Z!e                    d%e          d ed&dd'           ee           e ed                    fdedz  d(ed"ed#efd)            Z"e                    d*e           ee           e ed                    fd+ed"ed#efd,            Z#dS )-    )datetime	timedelta)	APIRouterDependsHTTPExceptionQuerystatus)	BaseModel)
get_logger)desc)Session)require_read)get_db_without_tenant)AuditLog)Userz
audit-logs)tagsc                       e Zd ZU eed<   edz  ed<   edz  ed<   eed<   eed<   edz  ed<   edz  ed<   edz  ed	<   edz  ed
<   edz  ed<   edz  ed<   edz  ed<   eed<    G d d          ZdS )AuditLogResponseidN	tenant_iduser_idactionresource_typeresource_idmethodpath
ip_addressresponse_statuserror_messageduration_ms
created_atc                       e Zd ZdZdS )AuditLogResponse.ConfigTN)__name__
__module____qualname__from_attributes     F/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/platform/audit_logs.pyConfigr#   !   s        r)   r+   )r$   r%   r&   int__annotations__strr   r+   r(   r)   r*   r   r      s         GGGTz4ZKKKt$J
*d
4Z:t         r)   r   c                   B    e Zd ZU eed<   eed<   eed<   eed<   eed<   dS )AuditLogStatstotal_requestsfailed_requestsavg_duration_msactions_by_typeresources_by_typeN)r$   r%   r&   r,   r-   floatdictr(   r)   r*   r0   r0   %   sN         r)   r0    )response_model)ged      i  )r:   leN
audit_logsskiplimitr   r   r   r   
start_dateend_datedbcurrent_userc
                    |                     t                    }
|	j        dk    r&|#|
                    t          j        |k              }
n|	j        dk    r)|
                    t          j        |	j        k              }
nNt
                              |	j                                      d           t          t          j        d          |#|
                    t          j        |k              }
|r#|
                    t          j        |k              }
|r#|
                    t          j        |k              }
|r#|
                    t          j        |k              }
|r#|
                    t          j        |k              }
|
                    t#          t          j                            }
|
                    |                               |                                          }|S )Nplatform_admincustomer_admin)r   z'Insufficient permissions for audit logsz-Insufficient permissions to access audit logsstatus_codedetail)queryr   rolefilterr   loggerbindr   warningr   r	   HTTP_403_FORBIDDENr   r   r   r!   order_byr   offsetr@   all)r?   r@   r   r   r   r   rA   rB   rC   rD   rK   logss               r*   list_audit_logsrV   -   s    HHXE,,, LL!3y!@AAE		.	.	.X/<3IIJJLO,,445^___1B
 
 
 	
 X-899 8X_677 FX3}DEE @X0J>?? >X0H<==NN4 34455E<<##E**..00DKr)   z/stats   Z   daysc           	      @	   ddl m}m} t          j                    t          |          z
  }|                    t                                        t          j	        |k              }|j
        dk    r&| #|                    t          j        | k              }nO|j
        dk    r)|                    t          j        |j        k              }nt          t          j        d          |                    |                    t          j                                      d          |                     |t          j        d	k    d
f                                        d          |                    t          j                                      d                                        t          j	        |k              }|j
        dk    r&| #|                    t          j        | k              }n3|j
        dk    r(|                    t          j        |j        k              }|                                }	|	j        pd}
|	j        pd}|	j        rt3          |	j                  nd}|                    t          j        |                    t          j                                      d                                        t          j	        |k              }|j
        dk    r&| #|                    t          j        | k              }n3|j
        dk    r(|                    t          j        |j        k              }t7          |                    t          j                                                            }|                    t          j        |                    t          j                                      d                                        t          j	        |k              }|j
        dk    r&| #|                    t          j        | k              }n3|j
        dk    r(|                    t          j        |j        k              }t7          |                    t          j                                                            }t?          |
||||          S )Nr   )casefunc)rY   rF   rG   z.Insufficient permissions to access audit statsrH   totali  r<   failedavg_timeg        count)r1   r2   r3   r4   r5   ) 
sqlalchemyr[   r\   r   utcnowr   rK   r   rM   r!   rL   r   r   r	   rQ   r`   r   labelr   avgr    firstr]   r^   r_   r6   r   r7   group_byrT   r   r0   )r   rY   rC   rD   r[   r\   rA   rK   statsstats_resultr1   r2   r3   actions_queryr4   resources_queryr5   s                    r*   get_audit_statsrk   U   s    &%%%%%%%""YD%9%9%99JHHX%%h&9Z&GHHE,,, LL!3y!@AAE		.	.	.X/<3IIJJ1C
 
 
 	
 HH

8;%%g..

441S8!<==>>DDXNN%&&,,Z88  fX J.//	 

 ,,, LL!3y!@AAE		.	.	.X/<3IIJJ;;==L!',1N").QO6B6KTeL1222QTOHHX_djj.E.E.K.KG.T.TUU\\z) M ,,, )001Cy1PQQM		.	.	.%,,X-?<CY-YZZ=11(/BBFFHHIIOhh

8; 7 7 = =g F F fX J.//  ,,, -44X5G95TUUO		.	.	.)001C|G]1]^^_55h6LMMQQSSTT%'''+   r)   z	/{log_id}log_idc                    |                     t                                        t          j        | k                                              }|st          t          j        d          |j        dk    rnR|j        dk    r,|j	        |j	        k    rt          t          j
        d          nt          t          j
        d          |S )NzAudit log not foundrH   rF   rG   zAccess deniedzInsufficient permissions)rK   r   rM   r   re   r   r	   HTTP_404_NOT_FOUNDrL   r   rQ   )rl   rC   rD   logs       r*   get_audit_logrp      s     ((8


#
#HK6$9
:
:
@
@
B
BC a(AJ_````,,,		.	.	.=L222F,Eo^^^^ 3 1:T
 
 
 	
 Jr)   )$r   r   fastapir   r   r   r   r	   pydanticr
   common_loggingr   ra   r   sqlalchemy.ormr   app.api.permissionsr   app.db.sessionr   app.models.audit_logr   app.models.userr   r$   rN   routerr   r0   getlistr,   r.   rV   rk   rp   r(   r)   r*   <module>r|      sz   ( ( ( ( ( ( ( ( D D D D D D D D D D D D D D       % % % % % %       " " " " " " , , , , , , 0 0 0 0 0 0 ) ) ) ) ) )            	H				'	'	'    y   &    I    Bt$4566aAsqT***  $"& $'/00 l!;!;<<$ $
$$ Tz$ 4Z	$
 $J$ :$ 4$ o$ 	$ $ $ $ 76$N H]33 aA"%%%'/00 l!;!;<<	: :Tz:
: 	: 	: : : 43:z K(899 '/00 l!;!;<<     :9  r)   