o
    7&i
                     @   s"   d dl Z d dlZG dd dZdS )    Nc                   @   s   e Zd Zdededededef
ddZdd	 Zd
edededededee fddZ	d
edefddZ
dd
ededefddZdS )ClickHouseRepositoryhostportusernamepassworddatabasec                 C   s(   || _ || _|| _|| _|| _d | _d S )N)r   r   r   r   r   client)selfr   r   r   r   r    r
   )app/repositories/clickhouse_repository.py__init__   s   
zClickHouseRepository.__init__c                 C   s0   | j d u rtj| j| j| j| j| jd| _ | j S )N)r   r   r   r   r   )r   clickhouse_connect
get_clientr   r   r   r   r   )r	   r
   r
   r   _get_client   s   
z ClickHouseRepository._get_client	tenant_idcall_idagent_idquality_scorecompliance_scoreissuesc              
   C   s8   |   jd|||t|t|t|ggg dd d S )Nagent_score_events)r   r   r   r   r   issues_json)column_names)r   insertfloatjsondumps)r	   r   r   r   r   r   r   r
   r
   r   insert_score_event   s
   
z'ClickHouseRepository.insert_score_eventc                 C   sN   |   jd||ddj}|sdS |d \}}}t|t|pdt|p$dfS )Na-  
            SELECT
                count() AS total_calls_scored,
                avg(quality_score) AS avg_quality_score,
                avg(compliance_score) AS compliance_rate
            FROM agent_score_events
            WHERE tenant_id = %(tenant_id)s AND agent_id = %(agent_id)s
            r   r   
parameters)r           r!   r   r!   )r   queryresult_rowsintr   )r	   r   r   rowstotalavg_qcompr
   r
   r   get_agent_report!   s   
z%ClickHouseRepository.get_agent_report
   limitc              	   C   s   |   jd||ddj}i }|D ]0\}zt|}W n ty&   g }Y nw |D ]}t|  }	|	s6q)|	|	dd ||	< q)qt
| dd dd	}
d
d |
d | D S )Nz
            SELECT issues_json
            FROM agent_score_events
            WHERE tenant_id = %(tenant_id)s AND agent_id = %(agent_id)s
            ORDER BY event_time DESC
            LIMIT 200
            r   r   r      c                 S   s   | d S )Nr,   r
   )xr
   r
   r   <lambda>K   s    z;ClickHouseRepository.get_recurring_issues.<locals>.<lambda>T)keyreversec                 S   s   g | ]}|d  qS )r   r
   ).0itemr
   r
   r   
<listcomp>L   s    z=ClickHouseRepository.get_recurring_issues.<locals>.<listcomp>)r   r"   r#   r   loads	Exceptionstrstriplowergetsorteditems)r	   r   r   r+   r%   freqr   r   issuer/   orderedr
   r
   r   get_recurring_issues3   s*   	
z)ClickHouseRepository.get_recurring_issuesN)r*   )__name__
__module____qualname__r6   r$   r   r   r   listr   r)   r?   r
   r
   r
   r   r      s    &r   )r   r   r   r
   r
   r
   r   <module>   s    