Viewing File: /opt/hc_python/lib/python3.12/site-packages/sentry_sdk/__pycache__/spotlight.cpython-312.pyc

�

_�*jf/�
���ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZddlm
Z
ddlZe
rddlmZmZmZmZmZddlmZddlmZmZddlmZej6d�Zd	Zd
ZGd�d�Z	dd
lm Z ddl!m"Z"m#Z#m$Z$ddl%m&Z&dZ'dZ(dZ)dZ*dZ+e,d�ee-e+j]�e+j_���D��Z0Gd�de&�Z1						dd�Z3dd�Z4y#e2$rdZ Y�wxYw)�N)�chain�product)�
TYPE_CHECKING)�Any�Callable�Dict�Optional�Self)�Envelope)�capture_internal_exceptions�env_to_bool)�logger�	spotlightzhttp://localhost:8969/streamz(sentry_sdk.spotlight.SpotlightMiddlewarec�0�eZdZdZdZdZdeddfd�Zd	d�Zy)
�SpotlightClientaY
    A client for sending envelopes to Sentry Spotlight.

    Implements exponential backoff retry logic per the SDK spec:
    - Logs error at least once when server is unreachable
    - Does not log for every failed envelope
    - Uses exponential backoff to avoid hammering an unavailable server
    - Never blocks normal Sentry operation
    g�?gN@�url�returnNc�t�||_tj�|_|j|_d|_y)N�)r�urllib3�PoolManager�http�INITIAL_RETRY_DELAY�_retry_delay�_last_error_time)�selfrs  �C/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/spotlight.py�__init__zSpotlightClient.__init__0s/������'�'�)��	� �4�4���'*���c��|jdkDr1tj�|jz
}||jkrytj�}|j|�	|jj|j|j�dddi��}|j�|j|_d|_y#t$rw}tj�|_t|jdz|j�|_tj d|j||j�Yd}~yd}~wwxYw)	Nr�POST�Content-Typezapplication/x-sentry-envelope)r�body�method�headersr�zNFailed to send envelope to Spotlight at %s: %s. Will retry after %.1f seconds.)r�timer�io�BytesIO�serialize_intor�requestr�getvalue�closer�	Exception�min�MAX_RETRY_DELAY�
sentry_logger�warning)r�envelope�time_since_errorr#�req�es      r�capture_envelopez SpotlightClient.capture_envelope6s��� � �1�$�#�y�y�{�T�-B�-B�B���$�"3�"3�3���z�z�|������%�	��)�)�#�#��H�H��]�]�_��"�$C��	$��C�
�I�I�K� $� 8� 8�D��$'�D�!���
	�$(�I�I�K�D�!�!$�D�$5�$5��$9�4�;O�;O� P�D��
�!�!�1������!�!�
�
��
	�s�'A!C	�		E	�A-E�E	)r3rrN)	�__name__�
__module__�__qualname__�__doc__rr0�strrr7�rrrr!s,������O�+�C�+�D�+�$rr)�settings)�HttpRequest�HttpResponse�HttpResponseServerError)�MiddlewareMixinz/assets/main.jsz�<script>window.__spotlight = {{ initOptions: {{ sidecarUrl: '{spotlight_url}', fullPage: false }} }};</script>
<script type="module" crossorigin src="{spotlight_js_url}"></script>
z�<html><base href="{spotlight_url}">
<script>window.__spotlight = {{ initOptions: {{ fullPage: true, startFrom: "/errors/{event_id}" }}}};</script>
zcharset=r#c#�\K�|]$}djdj|�����&y�w)z</{}>�N)�format�join)�.0�charss  r�	<genexpr>rIms)����)�P�E�	���r�w�w�u�~�&�P�s�*,c���eZdZUdZded<dZded<d�fd�Zedd	��Z								dd�Z	ddd
dd
e
ddfd�Z�xZS)�SpotlightMiddlewareN�
Optional[str]�_spotlight_script�_spotlight_urlrr
rc�$��t�|�|�ddl}|j|_|jj�j}|�tjd�ytjj|jd�|_
y)NrzPCannot find Spotlight client from SpotlightMiddleware, disabling the middleware.z../)�superr�sentry_sdk.api�api�
sentry_sdk�
get_clientrr1r2�urllib�parse�urljoinrrN)r�get_responserS�spotlight_client�	__class__s    �rrzSpotlightMiddleware.__init__vss����G��\�*�!�(�n�n�D�O�#���9�9�;�E�E���'��%�%�f���"(�,�,�"6�"6�7G�7K�7K�U�"S�D�rc�&�|j��|j��	tjj	|jt
�}tjj|d��}tjj|�tj|j|��|_|jS|jS#tjj$r-}tjd|��Yd}~|jSd}~wwxYw)N�HEAD)r$)�
spotlight_url�spotlight_js_urlzUCannot get Spotlight JS to inject at %s. SpotlightMiddleware will not be very useful.)�exc_info)rNrMrUrVrW�SPOTLIGHT_JS_ENTRY_PATHr+�Request�urlopen�SPOTLIGHT_JS_SNIPPET_PATTERNrE�error�URLErrorr1�debug)rr^r5�errs    r�spotlight_scriptz$SpotlightMiddleware.spotlight_script�s����"�"�.�4�3I�3I�3Q��'-�|�|�';�';��+�+�-D�(�$�!�.�.�0�0�(�%�1��C��N�N�*�*�3�/�-I�-P�-P�&*�&9�&9�)9�.Q�.�D�*��)�)�)�4�)�)�)���|�|�,�,��!�'�'�o�(�!$����)�)�)���s�BC�D�#D�D�_requestr?c����td��jjdd�j�j	d�D��}|d}t|�dkDr.|dj
t�r|dtt�d�nd�|j���js�|dk(r�t�j�}|jj��}td	���fd
�tD�D�|�}�jd||z�j|dz�_
�jd�r|t|�z�jd<�S)Nc3�<K�|]}|j����y�w�N)�strip)rG�ps  rrIz7SpotlightMiddleware.process_response.<locals>.<genexpr>�s����(�T�A����	�T�s�r"rD�;r��utf-8z	text/htmlc3�*K�|]}|dkDr|���
y�w)���Nr=)rG�idxs  rrIz7SpotlightMiddleware.process_response.<locals>.<genexpr>�s%�����$�C���8��$�s�c3�r�K�|].}�jj|j������0y�wrl)�content�rfind�encode)rG�body_variant�encoding�responses  ��rrIz7SpotlightMiddleware.process_response.<locals>.<genexpr>�s5�����$�0L��%�,�,�2�2�<�3F�3F�x�3P�Q�0L�s�47zContent-Length)�tupler%�get�lower�split�len�
startswith�CHARSET_PREFIXrh�	streamingrvrx�next�BODY_CLOSE_TAG_POSSIBILITIES�
has_header)	rrir{�content_type_header�content_type�content_length�	injection�injection_siterzs	  `     @r�process_responsez$SpotlightMiddleware.process_response�se���#(�(�!�)�)�-�-�n�b�A�G�G�I�O�O�PS�T�(�#��/�q�1�L��&�'�!�+�0C�A�0F�0Q�0Q��1�/�q�1�#�n�2E�2G�H��"���%�%�1� �*�*� �K�/�!$�X�%5�%5�!6�� �1�1�8�8��B�	�!%��$�0L�$��#�
"���$�$�_�n�5�� ��&�&�~��7�8�� ��&�&�'7�8�9G�#�i�.�9X�H�$�$�%5�6��Or�	exceptionz!Optional[HttpResponseServerError]c	��tjr|jsy	tjj|j�j
�jd�}|jj|�}t|jdtj|j|����S#tjj$rYywxYw)Nrqz<html>)r]�event_id)r>�DEBUGrNrUr+rb�read�decoderS�capture_exceptionrA�replace�SPOTLIGHT_ERROR_PAGE_SNIPPETrErdre)rrir�rr�s     r�process_exceptionz%SpotlightMiddleware.process_exception�s����>�>��)<�)<��
��N�N�*�*�4�+>�+>�?�D�D�F�M�M�g�V�� �?�?�<�<�Y�G��.��%�%� �4�;�;�*.�*=�*=��<������	�<�<�(�(�
��
�s�AB:�:C�C)rr
rXzCallable[..., HttpResponse]rN)rr
rrL)rr
rir?r{r@rzOptional[HttpResponse])
r8r9r:rM�__annotations__rNr�propertyrhr�r.r��
__classcell__)rZs@rrKrKrs}���-1��?�1�*.���.�	T� 
�	*�
�	*�0,	��,	�$1�,	�=K�,	�
%�,	�\	��	�$1�	�>G�	�
0�	rrKc�>�tjjd�}d}d}|rt|d��}|�d}|}n|}|dur|r|jd�y|dur
|r|St
St
|t�r|r||k7r|jd||�|S|�|r|S|rt
Sy)a
    Resolve the Spotlight URL based on config and environment variable.

    Implements precedence rules per the SDK spec:
    https://develop.sentry.dev/sdk/expected-features/spotlight/

    Returns the resolved URL string, or None if Spotlight should be disabled.
    �SENTRY_SPOTLIGHTNT)�strictFzhSpotlight is disabled via spotlight=False config option, ignoring SENTRY_SPOTLIGHT environment variable.z`Spotlight URL from config (%s) takes precedence over SENTRY_SPOTLIGHT environment variable (%s).)�os�environr}r
r2�DEFAULT_SPOTLIGHT_URL�
isinstancer<)�spotlight_configr1�spotlight_env_value�spotlight_from_env�spotlight_env_url�parseds      r�_resolve_spotlight_urlr��s����*�*�.�.�);�<��,0��)-����0��>���>�!%�� 3��!'���5� ��!�M�!�!�B�
��	�T�	!��$�$�(�(�	�$�c�	*��#6�:J�#J�!�M�!�!�>� �#�	
� ��	�	!��$�$�
�(�(�rc�N�t|jd�t�}|�ytjt
j�}|jtjd��tj|�tjtj�||d<t�5t��tjr�t!t"j$jdd��rt!t"j$jdd��rVtj&}t(|vr>t+|�t-|t(f��t_tj/d�ddd�t1|�}tj/d|�|S#1swY�,xYw)Nrz' [spotlight] %(levelname)s: %(message)s�SENTRY_SPOTLIGHT_ON_ERROR�1�SENTRY_SPOTLIGHT_MIDDLEWAREz(Enabled Spotlight integration for Djangoz%Enabled Spotlight using sidecar at %s)r�r}r1�logging�
StreamHandler�sys�stderr�setFormatter�	Formatterr�
addHandler�setLevel�INFOrr>r�r
r�r��
MIDDLEWARE� DJANGO_SPOTLIGHT_MIDDLEWARE_PATH�typer�infor)�optionsr�_handler�
middleware�clients     r�setup_spotlightr�'s.��
 ����[�!9�=�
I�C�
�{���$�$�S�Z�Z�0�H����'�+�+�,U�V�W�
���h��
�O�O�G�L�L�!��G�K��	$�	&�� �����B�J�J�N�N�+F��L�M��B�J�J�N�N�+H�#�N�O�!�,�,�J�/�z�A�&6�d�:�&6��*�'G�&I�J�'��#����F�G�
'��S�
!�F�
�K�K�7��=��M�#
'�	&�s
�1B?F�F$)r�rr1rrrL)r�zDict[str, Any]rzOptional[SpotlightClient])5r(r�r�r�r'�urllib.errorrU�urllib.parse�urllib.request�	itertoolsrr�typingrrrrrr	r
�sentry_sdk.enveloper�sentry_sdk.utilsrr
rr1�	getLoggerr�r�r�django.confr>�django.httpr?r@rA�django.utils.deprecationrBr`rcr�r��
BODY_TAG_NAMEr|�zip�upperr~r�rK�ImportErrorr�r�r=rr�<module>r�s"��	��	�
�����$� ���:�:�(���
��	�	�;�	'��7��#M� �9�9�xH�$�N�N�8�/��	Q�!�
	{�!� �N��M�#(�)��c�-�"5�"5�"7��9L�9L�9N�O�P�)�$� �
p�o�p�l<��<�,1�<��<�~ ��G���H��s�8A C'�'C1�0C1
Back to Directory File Manager