
    m%j	                        d dl mZ d dlmZ d dlmZ d dlZd dlZ ed           G d d                      Z G d	 d
          Z	 G d d          Z
dS )    )annotations)deque)	dataclassNT)frozenc                  B    e Zd ZU dZded<   dZded<   dZded<   ddZdS )RetryPolicyg      ?float
base_delayg      >@	max_delayg?jitterattemptintreturnc                    t          | j        | j        d|z  z            }| j        r|t	          j        d| j                  z  }|S )N   r   )minr   r
   r   randomuniform)selfr   delays      P/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/hyperliquid/api_health.pydelay_for_attemptzRetryPolicy.delay_for_attempt   sE    DNDOqG|$DEE; 	4V^At{333E    N)r   r   r   r	   )__name__
__module____qualname__r
   __annotations__r   r   r    r   r   r   r   	   s]         JIF     r   r   c                  $    e Zd ZddZddddZdS )RequestBudgetmax_requestsr   window_secondsr   Nonec               H    || _         || _        t                      | _        d S )N)r!   r"   r   _events)r   r!   r"   s      r   __init__zRequestBudget.__init__   s!    (,%*WWr   N)nowr'   float | Noneboolc               X   ||nt          j                     }| j        rR|| j        d         z
  | j        k    r9| j                                         | j        r|| j        d         z
  | j        k    9t	          | j                  | j        k    rdS | j                            |           dS )Nr   FT)timer%   r"   popleftlenr!   append)r   r'   s     r   allowzRequestBudget.allow   s    _cc$)++l 	#sT\!_48KKKL  """ l 	#sT\!_48KKKt| 1115C   tr   )r!   r   r"   r   r   r#   )r'   r(   r   r)   )r   r   r   r&   r/   r   r   r   r    r       sK        - - - -
 ,0        r   r    c                  T    e Zd ZddddZedd	            ZddZddZddZddZ	dS )ApiHealthMonitor   )max_stale_context_countr3   r   r   r#   c               L    d| _         d| _        d| _        d| _        || _        d S Nr   )api_429_countno_route_countws_reconnect_countstale_context_countr3   )r   r3   s     r   r&   zApiHealthMonitor.__init__'   s0    "##$ '>$$$r   r)   c                N    | j         dk    p| j        dk    p| j        | j        k    S r5   )r6   r7   r9   r3   r   s    r   degraded_mode_activez%ApiHealthMonitor.degraded_mode_active.   s.    !A%|)<q)@|DD\`d`|D||r   excBaseExceptionc                    t          |                                          }d|v sd|v r| xj        dz  c_        d|v r| xj        dz  c_        d S d S )N429ztoo many requests   zno route to host)strlowerr6   r7   )r   r=   msgs      r   record_errorzApiHealthMonitor.record_error2   sl    #hhnnC<<.#55!#$$1$ %$r   c                &    | xj         dz  c_         d S NrA   )r8   r;   s    r   record_ws_reconnectz$ApiHealthMonitor.record_ws_reconnect9   s    1$r   c                &    | xj         dz  c_         d S rG   )r9   r;   s    r   record_stale_contextz%ApiHealthMonitor.record_stale_context<   s      A%    r   dict[str, int | bool]c                D    | j         | j        | j        | j        | j        dS )Nr6   r7   r8   r9   r<   rM   r;   s    r   reportzApiHealthMonitor.report?   s/    !/"1"&"9#'#;$($=
 
 	
r   N)r3   r   r   r#   )r   r)   )r=   r>   r   r#   )r   r#   )r   rK   )
r   r   r   r&   propertyr<   rE   rH   rJ   rN   r   r   r   r1   r1   &   s        9: ? ? ? ? ? ? } } } X}% % % %% % % %& & & &
 
 
 
 
 
r   r1   )
__future__r   collectionsr   dataclassesr   r   r+   r   r    r1   r   r   r   <module>rS      s    " " " " " "       ! ! ! ! ! !   $	 	 	 	 	 	 	 	         
  
  
  
  
  
  
  
  
  
r   