U
    1i                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZ e	dZ
ddd	d
ddddZddddddZdddd	d
ddddZdS )z'KPI aggregation and threshold checking.    )annotationsN)KPIThresholds)KPIAlertSearchMetricsZseo_optimizer r   r   strzlist[KPIAlert])metrics
thresholds	site_namereturnc              	   C  sL  g }| j |jk rNtd| j |jd| j  d|j d}|| td||j | j|jk rtd| j|jd| j d|j d}|| td||j | j	|j
k rtd| j	|j
d	| j	d
d|j
d
d}|| td||j | j|jkr6td| j|jd| jdd|jdd}|| td||j |sHtd| |S )a,  Check metrics against KPI thresholds and return alerts for violations.

    Args:
        metrics: Current search metrics.
        thresholds: KPI threshold configuration.
        site_name: Site display name for log messages.

    Returns:
        List of KPIAlert for each threshold violation.
    clicksu2   クリック数が閾値を下回っています:  < Zmetric_nameZcurrent_valueZthreshold_valuemessage[%s] %simpressionsu/   表示回数が閾値を下回っています: ctru&   CTRが閾値を下回っています: z.2%positionu,   平均順位が閾値を超えています: z.1fz > z[%s] All KPIs within thresholds)r   Z
min_clicksr   appendloggerwarningr   r   Zmin_impressionsr   Zmin_ctrr   Zmax_positioninfo)r   r	   r
   Zalertsalert r   7/opt/web_system/seo_auto/src/analysis/kpi_calculator.pycheck_kpi_thresholds   sP    



r   intfloat)checkedindexedr   c                 C  s   | dkrdS t ||  dS )z5Calculate index rate from checked and indexed counts.r   g           )round)r   r   r   r   r   calculate_index_rateP   s    r"   zKPIAlert | None)r   r   r	   r
   r   c                 C  s^   t | |}||jk rZtd||jd|dd|jdd| d|  d	d}td	||j |S d
S )zECheck index rate against threshold. Returns alert if below threshold.Z
index_rateu8   インデックス率が閾値を下回っています: z.1%r   z (/u
   ページ)r   r   N)r"   Zmin_index_rater   r   r   r   )r   r   r	   r
   Zrater   r   r   r   check_index_rateW   s    

"	r$   )r   )r   )__doc__
__future__r   loggingsrc.config.settingsr   src.models.data_modelsr   r   	getLoggerr   r   r"   r$   r   r   r   r   <module>   s   
 C 