Ë
    9þÔi(  ã                  óî   — U d Z ddlmZ ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ  ej                  e«      Z ej                   d	ej"                  «      Z e«       Zd
ed<   ddd„Zdd„Zdd„Zy)u$  WysyÅ‚ka alertÃ³w przez SendGrid (HTTPS API, bez SMTP).

UÅ¼ywane gÅ‚Ã³wnie do alertÃ³w o bÅ‚Ä™dach billing/quota w zewnÄ™trznych API
(Google Places, Apify itd.). KaÅ¼da funkcja jest fail-safe â€” jeÅ›li SendGrid
nie odpowie albo brak konfiguracji, log siÄ™ pojawi, ale scraper nie crashuje.
é    )ÚannotationsN)Údatetime)ÚSendGridAPIClient)ÚMailé   )ÚconfigaS  \b(billing|quota|payment[\s_]*required|insufficient[\s_]*(funds|credit|balance)|out[\s_]*of[\s_]*credit|credit[\s_]*exhausted|over[\s_]*query[\s_]*limit|over[\s_]*daily[\s_]*limit|request[\s_]*denied|monthly[\s_]*usage|subscription|trial[\s_]*expired|plan[\s_]*limit|usage[\s_]*limit|exceeded|rate[\s_]*limit|too[\s_]*many[\s_]*requests)\bzset[str]Ú
_sent_keysc                óN   — |dv ry| syt        t        j                  | «      «      S )uH   Heurystyka: czy ten komunikat / status wyglÄ…da na bÅ‚Ä…d billing/quota.)i’  i­  TF)ÚboolÚ_BILLING_PATTERNSÚsearch)ÚtextÚstatus_codes     ú9/var/www/html/scraper-prawny.klono.ai/scraper/notifier.pyÚis_billing_errorr   ,   s*   € à�jÑ ØÙØÜÔ!×(Ñ(¨Ó.Ó/Ð/ó    c                óØ  — t        t        dd«      }t        t        dd«      }t        t        dd«      }|r|r|st        j                  d«       yt	        ||| |¬«      }	 t        |«      }|j                  |«      }t        j                  d|j                  | «       d	t        |j                  «      cxk  xr d
k  S c S # t        $ r }t        j                  d|«       Y d}~yd}~ww xY w)u>   WyÅ›lij maila przez SendGrid API. Zwraca True jeÅ›li wysÅ‚ano.ÚSENDGRID_API_KEYNÚALERT_EMAILÚSENDGRID_FROMu>   [notifier] SendGrid nie jest skonfigurowany â€” pomijam alert.F)Ú
from_emailÚ	to_emailsÚsubjectÚplain_text_contentu'   [notifier] alert wysÅ‚any (HTTP %s): %séÈ   i,  u   [notifier] bÅ‚Ä…d SendGrid: %s)Úgetattrr   ÚlogÚwarningr   r   ÚsendÚinfor   ÚintÚ	ExceptionÚerror)	r   ÚbodyÚapi_keyÚto_addrÚ	from_addrÚmessageÚsgÚrespÚes	            r   Ú
send_alertr,   5   sÑ   € ä”fÐ0°$Ó7€GÜ”f˜m¨TÓ2€GÜœ °Ó6€IÙ™¡IÜ�‰ÐTÔUØäØØØØô	€GðÜ˜wÓ'ˆØ�w‰w�wÓˆÜ�‰Ð:¸D×<LÑ<LÈgÔVØ”c˜$×*Ñ*Ó+Ö1¨cÑ1Ð1Ñ1Ð1øÜò Ü�	‰	Ð2°AÔ6Üûðús   Á AC  Â=C  Ã 	C)Ã	C$Ã$C)c           	     ó\  — | › d|xs ddd › �}|t         v rt        j                  d| «       yt         j                  |«       t	        j
                  «       j                  d«      }	 t        j                  «       }d| › d	�}d
| › d|› d|› d|› d�	}t        ||«       y# t        $ r d}Y Œ/w xY w)uî   WyÅ›lij ujednolicony alert o bÅ‚Ä™dzie billing/quota dla danego ÅºrÃ³dÅ‚a.

    Deduplikuje per (ÅºrÃ³dÅ‚o, treÅ›Ä‡ bÅ‚Ä™du) w obrÄ™bie procesu, Å¼eby nie zalaÄ‡
    skrzynki gdy pÄ™tla scrapera trafia na ten sam bÅ‚Ä…d wielokrotnie.
    ú:Ú Nr   u>   [notifier] alert dla %s juÅ¼ wysÅ‚any w tej sesji â€” pomijam.z%Y-%m-%d %H:%M:%SÚunknownu   â›” BILLING ERROR â€” z | scraper-prawny.klono.aiu   Å¹rÃ³dÅ‚o: u	   
BÅ‚Ä…d: z
Timestamp: z	
Serwer: uZ    (scraper-prawny.klono.ai)

SprawdÅº konto / billing zewnÄ™trznego API i wznÃ³w scrapera.
)r	   r   ÚdebugÚaddr   ÚnowÚstrftimeÚsocketÚgethostnamer"   r,   )Úsourcer#   ÚkeyÚ	timestampÚhostr   r$   s          r   Únotify_billing_errorr;   N   sÚ   € ð ˆH�A�u’{  D SÐ)Ð*Ð
+€CØ
ŒjÑÜ�	‰	ÐRÐTZÔ[ØÜ‡N�N�3Ôä—‘“×'Ñ'Ð(;Ó<€IðÜ×!Ñ!Ó#ˆð ' v hÐ.HÐI€Gà
�f�Xð Ø�'ð Ø�[ð !Ø�&ð Jð	Kð 	ô ˆw˜Õøô ò ØŠðús   Á'B ÂB+Â*B+)N)r   z
str | Noner   z
int | NoneÚreturnr   )r   Ústrr$   r=   r<   r   )r7   r=   r#   r=   r<   ÚNone)Ú__doc__Ú
__future__r   ÚloggingÚrer5   r   Úsendgridr   Úsendgrid.helpers.mailr   r/   r   Ú	getLoggerÚ__name__r   ÚcompileÚ
IGNORECASEr   Úsetr	   Ú__annotations__r   r,   r;   © r   r   ú<module>rL      st   ðòõ #ã Û 	Û Ý å &Ý &å à€g×Ñ˜Ó!€ð
 �B—J‘Jð	ð ‡M�MóÐ ñ  “u€
ˆHÓ ô0óô2r   