o
    hŽ  ã                   @   s>   d dl Z d dlZd dlZd dlZd dlmZ G dd„ dƒZdS )é    N)ÚMIMETextc                   @   s:   e Zd Zdefdd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚAlertingHandlerÚalerting_configc                 C   s|   |pi | _ i | _d| j v r|  | j d ¡| _d S d| j v r<| j  d¡| j  d¡| j  d¡| j  d¡| j  d¡dœ| _d S d S )NZsmtp_secret_nameÚsmtp_serverÚ	smtp_portÚsmtp_usernameÚsmtp_passwordÚ
from_email©r   r   r   r   r	   )r   Úsmtp_credentialsÚ!get_smtp_credentials_from_secretsÚget)Úselfr   © r   úEC:\Users\shubh\Videos\recall\recall_audit_sampler\alerting_handler.pyÚ__init__   s   







ûþzAlertingHandler.__init__c              
   C   sŠ   z't  d¡}|j|d�}t |d ¡}|d t|d ƒ|d |d |d d	œW S  tyD } ztd
t|ƒ› �ƒ i W  Y d }~S d }~ww )NZsecretsmanager)ZSecretIdZSecretStringr   r   r   r   r	   r
   z>[ERROR] Failed to fetch SMTP credentials from SecretsManager: )	Úboto3ÚclientZget_secret_valueÚjsonÚloadsÚintÚ	ExceptionÚprintÚstr)r   Úsecret_namer   ÚresponseZsecretÚer   r   r   r      s   

û€þz1AlertingHandler.get_smtp_credentials_from_secretsc              
   C   s¬   d| j v r)z|  ||¡ W n ty( } ztdt|ƒ› �ƒ W Y d}~nd}~ww d| j v rTz	|  ||¡ W dS  tyS } ztdt|ƒ› �ƒ W Y d}~dS d}~ww dS )z/Send both Slack and Email alerts if configured.Úslack_webhook_urlz&[WARNING] Failed to send Slack alert: NÚ
email_listz&[WARNING] Failed to send Email alert: )r   Úsend_slack_alertr   r   r   Úsend_email_alert)r   ÚsubjectÚmessage_bodyr   r   r   r   Ú
send_alert)   s   
€ÿ
 €ÿýzAlertingHandler.send_alertc                 C   sl   | j  d¡}dd|› d|› �i}ddi}tj||t |¡d�}|jdkr0td	|j› d
|j› �ƒ‚t	dƒ d S )Nr   ÚtextÚ*z*
zContent-Typezapplication/json)ÚheadersÚdataéÈ   z!Slack webhook failed with status z: z[SUCCESS] Slack alert sent.)
r   r   ÚrequestsZpostr   ÚdumpsZstatus_coder   r$   r   )r   r!   r"   r   Zslack_messager&   r   r   r   r   r   7   s   ÿ
z AlertingHandler.send_slack_alertc                 C   sâ   | j s	tdƒ d S | j d }| j d }| j d }| j d }| j d }| j dg ¡}t|ƒ}	||	d< ||	d	< d
 |¡|	d< t ||¡�}
|
 ¡  |
 	||¡ |
 
|||	 ¡ ¡ W d   ƒ n1 s`w   Y  tdd
 |¡› �ƒ d S )Nz=[INFO] SMTP credentials not configured; skipping email alert.r   r   r   r   r	   r   ZSubjectZFromz, ZToz[SUCCESS] Email alert sent to: )r   r   r   r   r   ÚjoinÚsmtplibZSMTPZstarttlsZloginZsendmailZ	as_string)r   r!   r"   r   r   r   r   r	   Z	to_emailsÚmsgZserverr   r   r   r    D   s&   




ýz AlertingHandler.send_email_alertN)	Ú__name__Ú
__module__Ú__qualname__Údictr   r   r#   r   r    r   r   r   r   r      s    r   )r   r   r,   r)   Zemail.mime.textr   r   r   r   r   r   Ú<module>   s    