
    ShX:                        d Z ddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlZddlmZmZ ddlmZmZmZ  ej        e          Z G d d          Zdd
efdZdd
efdZdd
efdZddddefdZddedefdZ e            Z dS )z
Error monitoring decorators and middleware for automatic error detection and notification.
This module provides decorators to automatically monitor API calls and system functions for errors.
    N)DictAnyOptionalCallableUnion)datetime)capture_exceptioncapture_message) send_critical_error_notificationsend_api_failure_notificationsend_system_alertc            
           e Zd ZdZe	 	 	 ddedededefd            Ze	 	 dded	ed
efd            Ze	 	 ddede	defd            Z
dS )ErrorMonitorz4Error monitoring class with decorators and utilitiesTapi_namecriticalinclude_request_datainclude_response_datac                 <     dt           dt           f fd}|S )a  
        Decorator to monitor API calls and send notifications on failure
        
        Args:
            api_name: Name of the API (OpenAI, Jira, Azure, etc.)
            critical: Whether this API call is critical (sends email notification)
            include_request_data: Whether to include request data in notifications
            include_response_data: Whether to include response data in notifications
        funcreturnc                 P     t          j                    fd            }|S )Nc                     t          j                     }d}d }d }d }	 | r$t          | d         d          r| d         j        }nd|v r	|d         }nd|v r|d         }r>| rt          |           d d         nd |rd |                                D             nd d}t
                              d d	|             | i |}t          j                     |z
  }t          d
 d||t          j	                    
                                d           |S # t          j        j        $ r}	t          j                     |z
  }t          |	          }
t          |	d          rI|	j        B|	j        j        }r4	 |	j        j        r|	j                                        nd }n#  ddi}Y nxY wt%          |	|||||d           rt'          ||
|||            d }	~	wt(          $ rp}	t          j                     |z
  }t          |	          }
t%          |	|||t+          |	          j        d           rt/          d |
|||d|	            d }	~	ww xY w)Nunknownr   urlendpointi  c                 D    i | ]\  }}|t          |          d d         S )N   )str).0kvs      @/var/www/html/testcasegenerator.evdpl.com/utils/error_monitor.py
<dictcomp>zUErrorMonitor.monitor_api_call.<locals>.decorator.<locals>.wrapper.<locals>.<dictcomp><   s,    &R&R&R41aq#a&&#,&R&R&R    )argskwargszMaking API call to : zAPI call successful: info)r   r   execution_time	timestamplevelcontextresponseerrorzUnable to parse response)r   r   status_coder)   request_dataresponse_data)r   r   error_messager0   r2   r1   )r   r   r)   r1   
error_type
API_ERROR_)r   r   r)   r1   r4   r3   r-   	exception)timehasattrr   r   itemsloggerr(   r
   r   utcnow	isoformatrequests
exceptionsRequestExceptionr.   r0   contentjsonr	   r   	Exceptiontype__name__r   )r%   r&   
start_timer   r1   r2   r0   resultr)   er3   r   r   r   r   r   s              r"   wrapperzAErrorMonitor.monitor_api_call.<locals>.decorator.<locals>.wrapper'   sH   !Y[[
$# $"i 6Q 7 7 6#'7;&#)%=#v--#)*#5 , 7;$ECIIdsdOOV\&f&R&R6<<>>&R&R&R&Rbf( (
 KK Lh L L( L LMMM "T42622F &*Y[[:%=N $:::$(0(0.<)1):):)D)D)F)F	! !	 	 	 	 "M*; $ $ $%)Y[[:%=N$'FFM q*-- V!*2H&'j&<0 VVEFZEW0a
0A0A0A]aV18:T0U &a$,$,'2*8(4)6* *      5%-%-*7(3*7)5        %)Y[[:%=N$'FFM &a$,$,*8(4&*1gg&6* *      8'>H'>'>*7,4,42@0<	% % '(
 
 
 
 ;s>   C;D I.A
G9'F! G!F)'4GI(A+II	functoolswraps)r   rI   r   r   r   r   s   ` r"   	decoratorz0ErrorMonitor.monitor_api_call.<locals>.decorator&   sW    _T""p p p p p p p p #"pd Nr$   r   )r   r   r   r   rM   s   ```` r"   monitor_api_callzErrorMonitor.monitor_api_call   sU    t	H t	 t	 t	 t	 t	 t	 t	 t	 t	 t	j r$   function_nameinclude_contextalert_on_failurec                 8     dt           dt           f fd}|S )a8  
        Decorator to monitor critical system functions
        
        Args:
            function_name: Name of the function for logging/notification
            include_context: Whether to include function context in notifications
            alert_on_failure: Whether to send email alerts on failure
        r   r   c                 N     t          j                    fd            }|S )Nc                  F   t          j                     }d }	 rZt          |           |r!t          |                                          ng t	          j                                                    d}t                              d             
| i |}t          j                     |z
  }t          d d|t	          j                                                    d           |S # t          $ r}t          j                     |z
  }t          |          }|t          |          j        t	          j                                                    d}|r|                    |           t          ||           	rt!          dd	 d
| ||            d }~ww xY w)N)rP   
args_countkwargs_keysr*   zExecuting critical function: z)Critical function executed successfully: r(   )rP   r)   r*   r+   )rP   r)   r4   r*   CRITICAL_FUNCTION_ERRORzCritical function '
' failed: r6   )r8   lenlistkeysr   r<   r=   r;   r(   r
   rC   r   rD   rE   updater	   r   )r%   r&   rF   r-   rG   r)   rH   r3   error_contextrR   r   rP   rQ   s            r"   rI   zJErrorMonitor.monitor_critical_function.<locals>.decorator.<locals>.wrapper   s   !Y[[
<& -:*-d))BH+P4+>+>+>b)1):):)D)D)F)F	# # KK O O OPPP "T42622F &*Y[[:%=N $SMSS$-:.<)1):):)D)D)F)F! !    "M    %)Y[[:%=N$'FFM *7*8&*1gg&6%-_%6%6%@%@%B%B	% %M  6%,,W555 &a777 ( 8'A*h*h*hYf*h*h$1&'	    ;s   CC- -
F 7B$FF rJ   )r   rI   rR   rP   rQ   s   ` r"   rM   z9ErrorMonitor.monitor_critical_function.<locals>.decorator   sQ    _T""@ @ @ @ @ @ @ #"@D Nr$   rN   )rP   rQ   rR   rM   s   ``` r"   monitor_critical_functionz&ErrorMonitor.monitor_critical_function   sN    D	H D	 D	 D	 D	 D	 D	 D	 D	 D	J r$         @component_namealert_thresholdalert_on_slow_executionc                 8     dt           dt           f fd}|S )a/  
        Decorator to monitor system health and performance
        
        Args:
            component_name: Name of the system component
            alert_threshold: Execution time threshold in seconds for alerts
            alert_on_slow_execution: Whether to send alerts for slow execution
        r   r   c                 N     t          j                    fd            }|S )Nc                     t          j                     }	  
| i |}t          j                     |z
  }|k    r*r(t          dd	 d|dd dd	|
j        d	           t          d
	 d	|
j        t	          j                                                    d           |S # t          $ r}t          j                     |z
  }t          |          }t          |	|
j        t          |          j        d           t          dd	 d| d	|
j        t          |          j        d	            d }~ww xY w)NPERFORMANCE_WARNINGzSlow execution detected in r'   z.2fzs (threshold: zs)WARNING)ra   r)   	thresholdrP   )
alert_typemessageseverityr-   zSystem component executed: r(   )ra   r)   rP   r*   r+   )ra   r)   rP   r4   COMPONENT_FAILUREzSystem component 'rY   CRITICAL)r8   r   rE   r
   r   r<   r=   rC   r   r	   rD   )r%   r&   rF   rG   r)   rH   r3   rc   rb   ra   r   s          r"   rI   zFErrorMonitor.monitor_system_health.<locals>.decorator.<locals>.wrapper   s   !Y[[
>!T42622F &*Y[[:%=N &77<S7)'< %J.  %J  %JTb  %J  %J  %J  wF  %J  %J  %J%.2@2@-<15	% %	
 
 
 
 $FnFF$.<.<-1])1):):)D)D)F)F	! !	 	 	 	 "M    %)Y[[:%=N$'FFM &a*8*8)-&*1gg&6	* *    &#6 ^^ ^ ^} ^ ^!+.<.<-1]*.q''*:	! !	
 
 
 
 7s   BB( (
D>2BD99D>rJ   )r   rI   rc   rb   ra   s   ` r"   rM   z5ErrorMonitor.monitor_system_health.<locals>.decorator   sQ    _T""A A A A A A A #"AF Nr$   rN   )ra   rb   rc   rM   s   ``` r"   monitor_system_healthz"ErrorMonitor.monitor_system_health   sN    E	H E	 E	 E	 E	 E	 E	 E	 E	 E	L r$   N)TTT)TT)r`   T)rE   
__module____qualname____doc__staticmethodr   boolrO   r_   floatro    r$   r"   r   r      s       >>9=596:A A3 A$ A.2A/3A A A \AF 8<9=P P P15P26P P P \Pd 58<@Q Qc Q-2Q59Q Q Q \Q Q Qr$   r   Tr   c                 :    t                               d|           S )zMonitor OpenAI API callsOpenAIr   r   rO   ry   s    r"   monitor_openai_apir{   E  s    ((H(EEEr$   c                 :    t                               d|           S )zMonitor Jira API callsJirary   rz   ry   s    r"   monitor_jira_apir~   I  s    ((((CCCr$   c                 :    t                               d|           S )zMonitor Azure DevOps API callszAzure DevOpsry   rz   ry   s    r"   monitor_azure_apir   M  s    ((((KKKr$   )rP   rP   c                ,    fd}| |S  ||           S )z!Monitor critical system functionsc                 Z    p| j         }t                              |          |           S N)rE   r   r_   )fnamerP   s     r"   rM   z*monitor_critical_system.<locals>.decoratorS  s+    *
55d;;A>>>r$   rv   )r   rP   rM   s    ` r"   monitor_critical_systemr   Q  s7    ? ? ? ? ? |yr$   r`   ra   ri   c                       fd}|S )zMonitor system performancec                 N    p| j         }t                              |          S )N)rb   )rE   r   ro   )r   r   ra   ri   s     r"   rM   z-monitor_system_performance.<locals>.decorator^  s(    .11$	1RRRr$   rv   )ra   ri   rM   s   `` r"   monitor_system_performancer   \  s0    S S S S S S r$   )Tr   )Nr`   )!rr   rK   loggingr8   	tracebacktypingr   r   r   r   r   r   r>   utils.error_loggerr	   r
   utils.email_notifierr   r   r   	getLoggerrE   r;   r   rt   r{   r~   r   r   r   ru   r   error_monitorrv   r$   r"   <module>r      s   
           7 7 7 7 7 7 7 7 7 7 7 7 7 7        A A A A A A A A          
	8	$	$l l l l l l l l^	F F F F F FD Dt D D D DL L L L L L	t 	 	 	 	 	 	 	 s e     r$   