ó
    xÿËjD  ã            	       óÂ   • S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
JrJr  \R                  " S5      rS\S\4S	 jrS
\S\SS4S jrSS\S
\S\SS4S jjrg)uæ  
alert_service.py â€” alertes opÃ©rationnelles par e-mail Ã  l'Ã©quipe (ALERT_EMAIL).

Ã€ utiliser pour tout ce qui exige une intervention humaine : webhook Stripe en
Ã©chec, organizer bloquÃ©, suppression RGPD massive, backup en Ã©chec, erreur 500.

- Anti-spam : une mÃªme clÃ© (`key`) ne dÃ©clenche qu'un e-mail par ALERT_COOLDOWN_SECS
  (conservÃ© en base, donc partagÃ© entre workers et redÃ©marrages).
- Toujours journalisÃ© (ERROR) mÃªme sans SMTP ; ne lÃ¨ve jamais d'exception.
é    N)ÚMIMEText)Úconfig)Úget_dbÚ
named_lockzmeeconic.alertÚkeyÚreturnc           	      ó  • [         R                   " 5       n [        SU  35         [        5        nUR                  SSU  345      R	                  5       nU(       a5  U[        US   5      -
  [        R                  :  a   S S S 5        S S S 5        gUR                  SSU  3[        U5      45        UR                  5         S S S 5        S S S 5        g! , (       d  f       N= f! , (       d  f       g= f! [         a     gf = f)Nzalert:z$SELECT value FROM app_kv WHERE key=?ÚvalueFz7INSERT OR REPLACE INTO app_kv (key, value) VALUES (?,?)T)Útimer   r   ÚexecuteÚfetchoneÚfloatr   ÚALERT_COOLDOWN_SECSÚstrÚcommitÚ	Exception)r   ÚnowÚconnÚrows       ÚYD:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\backend\services\alert_service.pyÚ_cooldown_okr      sÙ   € Ü
�)Š)‹+€Cð	Ü˜&  ˜Õ'¬¬°TØ—,‘,ÐEÈ&ÐQTÐPUÈÐGXÓY×bÑbÓdˆCÞ�sœU 3 w¡<Ó0Ñ0´6×3MÑ3MÓMØ÷ *2×'Ð'ð �L‰LÐRÐW]Ð^aÐ]bÐUcÔehÐilÓemÐTnÔoØ�K‰KŒM÷ *2×'ð ÷ *2­ú×'Ô'ð ûÜó ÙðúsX   —C4 ¥C#°ACÂ C#ÂC4 Â0CÃC#Ã	C4 Ã
C 	ÃC#Ã#
C1Ã-C4 Ã1C4 Ã4
DÄ DÚsubjectÚbodyc                 ó†  • [         R                  " SS5      n[        [         R                  " SS5      5      n[         R                  " SS5      R                  5       n[         R                  " S[         R                  " SS5      5      R	                  S	S5      n[         R                  " S
U5      R                  5       nU(       a  U(       a  [
        R                  (       d  g [        USS5      nSU  3US'   XgS'   [
        R                  US'    [        R                  " X#SS9 nUR                  5         UR                  XE5        UR                  U5        S S S 5        [        R                  S[
        R                  U 5        g ! , (       d  f       N4= f! [         a   n	[        R!                  SX	5         S n	A	g S n	A	ff = f)NÚ	SMTP_HOSTzsmtp-relay.brevo.comÚ	SMTP_PORTÚ587Ú	SMTP_USERÚ ÚSMTP_PASSWORDÚ	SMTP_PASSÚ Ú	SMTP_FROMÚplainzutf-8z[Meeconic ALERTE] ÚSubjectÚFromÚToé   )ÚtimeoutzAlert sent to %s: %sz%Envoi de l'alerte impossible (%s): %s)ÚosÚgetenvÚintÚstripÚreplacer   ÚALERT_EMAILr   ÚsmtplibÚSMTPÚstarttlsÚloginÚsend_messageÚlogÚinfor   Úerror)
r   r   ÚhostÚportÚuserÚpwÚsenderÚmsgÚsÚes
             r   Ú
_smtp_sendr@   &   sI  € Ü�9Š9�[Ð"8Ó9€DÜŒr�yŠy˜ eÓ,Ó-€DÜ�9Š9�[ "Ó%×+Ñ+Ó-€DÜ	�Š�?¤B§I¢I¨k¸2Ó$>Ó	?×	GÑ	GÈÈRÓ	P€BÜ�YŠY�{ DÓ)×/Ñ/Ó1€FÞ–RœF×.×.ØÜ
�4˜ 'Ó
*€CØ)¨'¨Ð3€Cˆ	�NØˆ�KÜ×"Ñ"€Cˆ�IðGÜ�\Š\˜$¨bÒ1°QØ�J‰JŒLØ�G‰G�DÔØ�N‰N˜3Ô÷ 2ô 	�‰Ð'¬×);Ñ);¸WÕE÷	 2Õ1ûô
 ó GÜ�	‰	Ð9¸7×FÑFûðGús0   ÄF Ä$3FÅ-F Æ
FÆF Æ
G Æ F;Æ;G c           	      ó‚  •  [         R                  SXU5        [        R                  S:X  d  [        R                  (       d  g[        U 5      (       d  g[        R                  " [        X SU S[        R                   34SS9R                  5         g! [         a   n[         R                  SU5         SnAgSnAff = f)	uJ   Journalise (ERROR) et envoie un e-mail d'alerte (avec anti-spam par clÃ©).u   ALERTE [%s] %s â€” %sÚtestNz

z

Env: T)ÚtargetÚargsÚdaemonzalert_service.notify failed: %s)r5   r7   r   ÚAPP_ENVr/   r   Ú	threadingÚThreadr@   Ústartr   )r   r   r   r?   s       r   ÚnotifyrJ   <   s˜   € ð	8Ü�	‰	Ð)¨3¸Ô>Ü�>‰>˜VÓ#¬6×+=×+=ØÜ˜C× Ñ ØÜ×Ò¤
°'¸YÀdÈ4È&ÐPYÔZ`×ZhÑZhÐYiÐ;jÐ1kØ $ñ	&ß&+¡e¥gøÜó 8Ü�	‰	Ð3°Q×7Ñ7ûð8ús$   ‚A B ÁB Á?B Â
B>ÂB9Â9B>)r   )Ú__doc__Úloggingr*   r0   rG   r   Úemail.mime.textr   Úcorer   Úcore.dbr   r   Ú	getLoggerr5   r   Úboolr   r@   rJ   © ó    r   Ú<module>rT      s‡   ðñ	ó Û 	Û Û Û Ý $å ß &à×ÒÐ(Ó)€ð�cð ˜dô ðG˜ð G 3ð G¨4ô Gñ,8�ð 8˜cð 8¨ð 8°dö 8rS   