OwlCyberSecurity - MANAGER
Edit File: exposition.cpython-312.pyc
� B��g@f � � � d dl Z d dlmZ d dlZd dlmZ d dlZd dlZd dlm Z d dl Z d dlZd dlZd dl mZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZm Z m!Z!m"Z" d d l#m$Z$m%Z%m&Z& d dl'm(Z' d dl)m*Z*m+Z+ d d l,m-Z- dZ.dZ/ G d� de � Z0d� Z1e+dfde*de2defd�Z3 G d� de%� Z4 G d� de e&� Z5d� Z6 dMde7de7de8d ee7 d!ee7 d"e2de jr fd#�Z:d$e+dddde jv dfd%e8d&e7de*dee7 dee7 d'ee7 d(ee7 de8d"e2dee&ejx f fd)�Z=e=Z>e+fde*de?fd*�Z@d+e7deee*ge?f e7f fd,�ZAd-e7de2fd.�ZB G d/� d0e� ZCd1e7de*ddfd2�ZDd3e7d4e7d5eeE d6eee7e7f d7e?d8eeeFf deg df fd9�ZGd3e7d4e7d5eeE d6eee7e7f d7e?deg df fd:�ZHd3e7d4e7d5eeE d6eee7e7f d7e?deg df fd;�ZI dNd3e7d4e7d5eeE d6eee7e7f d7e?d<ee7 d=ee7 deg df fd>�ZJde j� dfd3e7d4e7d5eeE d6eee7e7f d7e?de7de7d ee7 de8d?e2deg df fd@�ZLddAeHfdBe7dCe7de*dDeee7ef d5eeE dEeddfdF�ZMddAeHfdBe7dCe7dee* dDeee7ef d5eeE dEeddfdG�ZNddAeHfdBe7dCe7dDeee7ef d5eeE dEeddfdH�ZOd4e7dBe7dCe7dee* dDeee7ef d5eeE dEeddfdI�ZPdJ� ZQdee7ef fdK�ZRd dLlSmTZT y)O� N)�closing)�BaseHTTPRequestHandler)�ThreadingMixIn)�Any�Callable�Dict�List�Optional�Sequence�Tuple�Union)� HTTPError)�parse_qs� quote_plus�urlparse)�BaseHandler�build_opener�HTTPHandler�HTTPRedirectHandler�HTTPSHandler�Request)�make_server�WSGIRequestHandler� WSGIServer� )� exposition)�CollectorRegistry�REGISTRY)�floatToGoString)�CONTENT_TYPE_LATEST�delete_from_gateway�generate_latest�instance_ip_grouping_key� make_asgi_app� make_wsgi_app�MetricsHandler�push_to_gateway�pushadd_to_gateway�start_http_server�start_wsgi_server�write_to_textfilez(text/plain; version=0.0.4; charset=utf-8c � � e Zd ZdZd� Zy)�_PrometheusRedirectHandleraw Allow additional methods (e.g. PUT) and data forwarding in redirects. Use of this class constitute a user's explicit agreement to the redirect responses the Prometheus client will receive when using it. You should only use this class if you control or otherwise trust the redirect behavior involved and are certain it is safe to full transfer the original request (method and data) to the redirected URL. For example, if you know there is a cosmetic URL redirect in front of a local deployment of a Prometheus server, and all redirects are safe, this is the class to use to handle redirects in that case. The standard HTTPRedirectHandler does not forward request data nor does it allow redirected PUT requests (which Prometheus uses for some operations, for example `push_to_gateway`) because these cannot generically guarantee no violations of HTTP RFC 2616 requirements for the user to explicitly confirm redirects that could have unexpected side effects (such as rendering a PUT request non-idempotent or creating multiple resources not named in the original request). c � � t |d|j � � }|dv r|dv s!|dv r|dv st |j ||||� �t |j dd� |j |j d|j � � }||_ |S ) a� Apply redirect logic to a request. See parent HTTPRedirectHandler.redirect_request for parameter info. If the redirect is disallowed, this raises the corresponding HTTP error. If the redirect can't be determined, return None to allow other handlers to try. If the redirect is allowed, return the new request. This method specialized for the case when (a) the user knows that the redirect will not cause unacceptable side effects for any request method, and (b) the user knows that any request data should be passed through to the redirect. If either condition is not met, this should not be used. �method)�- �. �/ i3 )�GET�HEAD)r0 r1 r2 )�POST�PUT� z%20T)�headers�origin_req_host�unverifiable�data) �getattr� get_methodr �full_urlr �replacer8 r9 r; r/ ) �self�req�fp�code�msgr8 �newurl�m�new_requests �K/opt/hc_python/lib/python3.12/site-packages/prometheus_client/exposition.py�redirect_requestz+_PrometheusRedirectHandler.redirect_requestA s� � �$ �C��3�>�>�#3�4���,�,��o�1E��?�*�q�O�/C��C�L�L�$��W�b�A�A���N�N�3��&��K�K��/�/����� �� ����� N)�__name__� __module__�__qualname__�__doc__rI � rJ rH r- r- + s � ��*rJ r- c �� � t |� \ }}d|v r| j |d � } || � }d|fg}|s1t |� r&t j |� }|j d� d||fS )zBake output for metrics output.zname[]�Content-Type)zContent-Encoding�gzip�200 OK)�choose_encoder�restricted_registry� gzip_acceptedrR �compress�append) �registry� accept_header�accept_encoding_header�params�disable_compression�encoder�content_type�outputr8 s rH �_bake_outputra b sz � � +�=�9��G�\��6���/�/��x�0@�A�� �X� �F���-�.�G��=�1G�#H����v�&�����3�4��W�f�$�$rJ FrY r] �returnc � � �� �� fd�}|S )z;Create a WSGI app which serves the metrics from a registry.c �V �� | j d� }| j d� }t | j dd� � }| d }|dk( rd}dg}d }nN|d k7 r&d}dg}dj ||� j � }n#| d dk( rd}dg}d }nt � |||� � \ }}} |||� |gS )N�HTTP_ACCEPT�HTTP_ACCEPT_ENCODING�QUERY_STRING� �REQUEST_METHOD�OPTIONSrS )�AllowzOPTIONS,GETrJ r3 z405 Method Not Allowedz"# HTTP {}: {}; use OPTIONS or GET � PATH_INFOz/favicon.ico)rh rh )�getr �format�encodera )�environ�start_responserZ r[ r\ r/ �statusr8 r` r] rY s ��rH �prometheus_appz%make_wsgi_app.<locals>.prometheus_appt s� �� ����M�2� �!(���-C�!D���'�+�+�n�b�9�:���)�*���Y���F�/�0�G��F� �u�_�-�F�/�0�G�:�A�A�&�&�Q�X�X�Z�F� �[� !�^� 3��F��j�G��F� '3�8�]�Lb�dj�l� 'A�#�F�G�V��v�w�'��x�rJ rO )rY r] rs s `` rH r% r% q s �� ��: �rJ c � � e Zd ZdZd� Zy)�_SilentHandlerz(WSGI handler that does not log requests.c � � y�zLog nothing.NrO �r@ rn �argss rH �log_messagez_SilentHandler.log_message� � � rJ N)rK rL rM rN rz rO rJ rH ru ru � s � �2�rJ ru c � � e Zd ZdZdZy)�ThreadingWSGIServerzThread per request HTTP server.TN)rK rL rM rN �daemon_threadsrO rJ rH r} r} � s � �)� �NrJ r} c � � t j | |t j t j �� }t t |� � \ }}}}}||d fS )z8Automatically select address family depending on address)�type�flagsr )�socket�getaddrinfo�SOCK_STREAM� AI_PASSIVE�next�iter)�address�port�infos�family�_�sockaddrs rH �_get_best_familyr� � sN � � ���w��6�3E�3E�V�M^�M^�_�E� $�T�%�[� 1��F�A�q�!�X��8�A�;��rJ �certfile�keyfile�protocol�cafile�capath�client_auth_requiredc �R � t j |�� }|�|� |j ||� n+ |j t j j �� |rt j |_ |j | |�� |S # t $ r,}t |� }t |� } |d|�d|�d| � �� �d}~ww xY w# t $ r&}t |� }t |� } |d| � �� �d}~ww xY w# t $ r,}t |� }t |� } |d | �d |�d| � �� �d}~ww xY w)zLoad context supports SSL.�r� Nz+Cannot load CA certificate chain from file z or directory z: )�purposez*Cannot load default CA certificate chain: �r� r� z$Cannot load server certificate file z or its private key file )�ssl� SSLContext�load_verify_locations�IOErrorr� �str�load_default_certs�Purpose�CLIENT_AUTH� CERT_REQUIRED�verify_mode�load_cert_chain) r� r� r� r� r� r� �ssl_cxt�exc�exc_typerD s rH �_get_ssl_ctxr� � s` � � �n�n�h�/�G� ��V�/� I��)�)�&�&�9� O��&�&�s�{�{�/F�/F�&�G� �!�/�/���C�����7��C� �N��1 � I��C�y�H��c�(�C��H�$�Z�~�f�Z�r�#��H� I� I�� I�� � O��C�y�H��c�(�C��G��u�M�N�N�� O�� � C���9���#�h���=�h�\� J/�/6�k��C�5�B� C� C��C�sF �B �*B? �2C1 � B<�'B7�7B<�? C.�!C)�)C.�1 D&�:'D!�!D&z0.0.0.0r� �addr� client_cafile� client_capathc �h � G d� dt � } t || � \ | _ }t |� } t || | | t �� }|r4|r2t ||||||� }|j |j d�� |_ t j |j �� } d| _ | j � || fS )z?Starts a WSGI server for prometheus metrics as a daemon thread.c � � e Zd ZdZy)�$start_wsgi_server.<locals>.TmpServerz<Copy of ThreadingWSGIServer to update address_family locallyN)rK rL rM rN rO rJ rH � TmpServerr� � s � �JrJ r� )� handler_classT)�server_side)�target)r} r� �address_familyr% r ru r� �wrap_socketr� � threading�Thread� serve_forever�daemon�start)r� r� rY r� r� r� r� r� r� r� �app�httpd�context�ts rH r* r* � s� � �K�'� K� &6�d�D�%A�"�I��d� �� !�C���d�C��.�Q�E��G��x��(�M�=�Zn�o���*�*�5�<�<�T�*�J������� 3� 3�4�A��A�H��G�G�I��!�8�OrJ c �f � d� }g }| j � D �]� } |j }|j }|dk( r|dz }n$|dk( r|dz }d}n|dk( rd}n|dk( rd }n|d k( rd}|j dj ||j j d d� j dd� � � |j d|� d|� d�� i }|j D ]e }dD ]G }|j |j |z k( s� |j |g � j ||� � �N |j ||� � �g t |j � � D ]� \ }} |j dj |j ||j j d d� j dd� � � |j d|j � |� d�� |j | � �� ��� dj |� j d� S # t $ r} | j xs d|fz | _ � d} ~ ww xY w)zHReturns the metrics from the registry in latest text format as a string.c � � | j r�dj dj t | j j � � D ��cg c]G \ }}dj ||j dd� j dd� j dd � � ��I c}}� � }nd }d }| j �%dt t | j � dz � d ��}| j � |� dt | j � � |� d�S c c}}w )Nz{{{0}}}�,z{}="{}"�\�\\� �\n�"z\"rh r7 i� �d)�labelsrn �join�sorted�itemsr? � timestamp�int�float�namer �value)�line�k�v�labelstrr� s rH �sample_linez$generate_latest.<locals>.sample_line� s� � ��;�;� �'�'���� !'�t�{�{�'8�'8�':� ;�=� ;���1� �!�!��q�y�y��u�-�5�5�d�E�B�J�J�3�PU�V�X� ;�=�)>� ?�H� �H�� ��>�>�%��C��d�n�n� 5�� <�=�a�@�A�I��)�)��X�J�a��� � �(C�'D�Y�K�r�R�R��=s � AD �counter�_total�info�_info�gauge�stateset�gaugehistogram� histogram�unknown�untypedz # HELP {} {} r� r� r� r� z# TYPE r7 )�_created�_gsum�_gcount)rh Nz# HELP {}{} {} z gauge rh �utf-8)�collectr� r� rX rn � documentationr? �samples� setdefault� Exceptionry r� r� �extendr� ro )rY r� r` �metric�mname�mtype� om_samples�s�suffix� exception�liness rH r"