o
    NDi                     @   sZ   d dl mZ d dlZzd dlmZ W n ey   edw eeZG dd de	Z
dS )    )chainN)scaleszTThe scales library is required for metrics support: https://pypi.org/project/scales/c                   @   s   e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ		 dZ
	 dZ	 dZ	 dZ	 dZ	 dZdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd ZdS )Metricsz
    A collection of timers and counters for various performance metrics.

    Timer metrics are represented as floating point seconds.
    Nr   c                    sB  t d dt| j| _t jd7  _t| jt	dt
dt
dt
dt
dt
d	t
d
t
dtd fddtd fddtd fdd| _dtjjvrhtjj| j tjjd< | jj| _| jj| _| jj| _| jj| _| jj| _| jj| _| jj| _| jj| _| jj| _| jj| _| jj| _d S )NzStarting metric capturezcassandra-{0}   request_timerconnection_errorswrite_timeoutsread_timeoutsunavailablesother_errorsretriesignoresknown_hostsc                      s   t  j S N)lenmetadata	all_hosts cluster_proxyr   J/var/www/Datamplify/venv/lib/python3.10/site-packages/cassandra/metrics.py<lambda>   s    z"Metrics.__init__.<locals>.<lambda>connected_toc                      s   t ttdd  jD S )Nc                 s   s    | ]}|j  V  qd S r   )_poolskeys.0sr   r   r   	<genexpr>   s    5Metrics.__init__.<locals>.<lambda>.<locals>.<genexpr>)r   setr   from_iterablesessionsr   r   r   r   r      s    open_connectionsc                      s   t dd  jD S )Nc                 s   s(    | ]}t d d |j D V  qdS )c                 s   s    | ]}|j V  qd S r   )
open_count)r   pr   r   r   r      s    z?Metrics.__init__.<locals>.<lambda>.<locals>.<genexpr>.<genexpr>N)sumr   valuesr   r   r   r   r      s   & r   )r&   r"   r   r   r   r   r      s    	cassandra)logdebugformatstr_stats_counter
stats_namer   r   
collectionPmfStatIntStatStatstats_Statsr   r   r   r	   r
   r   r   r   r   r   r#   )selfr   r   r   r   __init__v   sF   













zMetrics.__init__c                 C      | j  jd7  _d S Nr   )r3   r   r5   r   r   r   on_connection_error      zMetrics.on_connection_errorc                 C   r7   r8   )r3   r   r9   r   r   r   on_write_timeout   r;   zMetrics.on_write_timeoutc                 C   r7   r8   )r3   r	   r9   r   r   r   on_read_timeout   r;   zMetrics.on_read_timeoutc                 C   r7   r8   )r3   r
   r9   r   r   r   on_unavailable   r;   zMetrics.on_unavailablec                 C   r7   r8   )r3   r   r9   r   r   r   on_other_error   r;   zMetrics.on_other_errorc                 C   r7   r8   )r3   r   r9   r   r   r   	on_ignore   r;   zMetrics.on_ignorec                 C   r7   r8   )r3   r   r9   r   r   r   on_retry   r;   zMetrics.on_retryc                 C   s   t  | j S )zJ
        Returns the metrics for the registered cluster instance.
        )r   getStatsr.   r9   r   r   r   	get_stats   s   zMetrics.get_statsc                 C   sZ   | j |krdS |tjjv rtd|tjj| j  }tjj| j = || _ |tjj| j < dS )z
        Set the metrics stats name.
        The stats_name is a string used to access the metris through scales: scales.getStats()[<stats_name>]
        Default is 'cassandra-<num>'.
        Nz"{0}" already exists in stats.)r.   r   r4   r3   
ValueErrorr+   )r5   r.   r3   r   r   r   set_stats_name   s   
zMetrics.set_stats_name)__name__
__module____qualname____doc__r   r   r   r	   r
   r   r   r   r   r   r#   r-   r6   r:   r<   r=   r>   r?   r@   rA   rC   rE   r   r   r   r   r      sF    (r   )	itertoolsr   logginggreplinr   ImportError	getLoggerrF   r)   objectr   r   r   r   r   <module>   s   
