
    {i                         d 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
  ej                  e      Z G d de
      Zded	ed
efdZy)z2
Logging Middleware for Request/Response Tracking
    N)Callable)RequestResponse)BaseHTTPMiddlewarec                   $    e Zd ZdZdededefdZy)LoggingMiddlewarez
    Middleware to log all HTTP requests with timing and unique request IDs.
    
    Logs:
    - Request ID (UUID4)
    - HTTP method and path
    - Processing time in milliseconds
    - Response status code
    request	call_nextreturnc                 x  K   t        j                         }t        j                         }t	        |      |j
                  _        	  ||       d{   }t        j                         |z
  dz  }t        j                  d| d|j                   d|j                  j                   d|dd|j                   
       |S 7 m# t        $ rm}t        j                         |z
  dz  }t        j                  d| d|j                   d|j                  j                   d|dd	t	        |       
       |d}~ww xY ww)
zProcess request and log detailsN  
RequestID= Method= Path= CompletedIn=.2fms StatusCode=	ms Error=uuiduuid4timeperf_counterstrstate
request_idloggerinfomethodurlpathstatus_code	Exceptionerror)selfr	   r
   r   
start_timeresponseprocess_timeexcs           T/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/middleware/logging.pydispatchzLoggingMiddleware.dispatch   sP     ZZ\
&&(
 $'z?  	&w//H !--/*<DL KKZL )!..) *(() *+C0 1&223	5 O 0   	 --/*<DL LLZL )!..) *(() *+C0 1S
	$ I	>   AD:C B?A,C >D:?C 	D7
A(D22D77D:N)__name__
__module____qualname____doc__r   r   r   r+        r*   r   r      s!    )g )( )x )r2   r   r	   r
   r   c                 x  K   t        j                         }t        j                         }t	        |      | j
                  _        	  ||        d{   }t        j                         |z
  dz  }t        j                  d| d| j                   d| j                  j                   d|dd|j                   
       |S 7 m# t        $ rm}t        j                         |z
  dz  }t        j                  d| d| j                   d| j                  j                   d|dd	t	        |       
       |d}~ww xY ww)
z}
    Functional version of logging src.middleware.
    
    Alternative to class-based middleware for simpler use cases.
    Nr   r   r   r   r   r   r   r   r   )r	   r
   r   r&   r'   r(   r)   s          r*   logging_middleware_functionr4   F   sJ     J""$J  #:GMM"7++))+j8D@ %nn% &KK$$% &', -"../	1	
  ,  ))+j8D@ %nn% &KK$$% &', -XJ	 	
 	r,   )r0   loggingr   r   typingr   fastapir   r   starlette.middleware.baser   	getLoggerr-   r   r   r4   r1   r2   r*   <module>r:      sY        % 8			8	$4* 4n%w %8 %PX %r2   