o
    <‘ði(  ã                   @   sŠ   U d dl Z d dlmZmZmZmZmZmZ er+zd dlm	Z	 W n e
y*   eZ	Y nw eZ	G dd„ dƒZdaee ed< defdd	„ZdS )
é    N)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚOptional)ÚObservationc                	   @   s”   e Zd ZdZddeeeeg ee f  f fdd„Z	dedeg ee f ddfd	d
„Z
dedeeg ee f  fdd„Zddd„Zdefdd„ZdS )ÚObservablesRegistryzG
    Global registry for storing callbacks for observable metrics.
    NÚregistryc                 C   s   |pi | _ t ¡ | _d S ©N)Ú	_registryÚ	threadingÚLockÚ_lock)Úselfr
   © r   ú[/root/parts/websockify/install/lib/python3.10/site-packages/redis/observability/registry.pyÚ__init__   s   
zObservablesRegistry.__init__ÚnameÚcallbackÚreturnc                 C   s@   | j � | j |g ¡ |¡ W d  ƒ dS 1 sw   Y  dS )z?
        Register a callback for an observable metric.
        N)r   r   Ú
setdefaultÚappend)r   r   r   r   r   r   Úregister   s   "ÿzObservablesRegistry.registerc                 C   s8   | j � | j |g ¡W  d  ƒ S 1 sw   Y  dS )z=
        Get all callbacks for an observable metric.
        N)r   r   Úget)r   r   r   r   r   r      s   $ÿzObservablesRegistry.getc                 C   s6   | j � | j ¡  W d  ƒ dS 1 sw   Y  dS )z%
        Clear the registry.
        N)r   r   Úclear©r   r   r   r   r   &   s   "ÿzObservablesRegistry.clearc                 C   s
   t | jƒS )z9
        Get the number of registered callbacks.
        )Úlenr   r   r   r   r   Ú__len__-   s   
zObservablesRegistry.__len__r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   r   r   r   r   r   Úintr   r   r   r   r   r	      s    (""
r	   Ú_observables_registry_instancer   c                   C   s   t du rtƒ a t S )aJ  
    Get the global observables registry singleton instance.

    This is the Pythonic way to get the singleton instance.

    Returns:
        The global ObservablesRegistry singleton

    Example:
        >>>
        >>> registry = get_observables_registry_instance()
        >>> registry.register('my_metric', my_callback)
    N)r%   r	   r   r   r   r   Ú!get_observables_registry_instance8   s   r&   )r   Útypingr   r   r   r   r   r   Úopentelemetry.metricsr   ÚImportErrorr	   r%   Ú__annotations__r&   r   r   r   r   Ú<module>   s   
  ÿ&