Ë
    rA‰i  ã            
       óf  — d Z ddlZddlZddlmZ ddlmZ ej                  j                  dej                  j                  ej                  j                  ej                  j                  e
«      «      «      «       ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  G d„ d«      Zy)	uD   
æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆç”Ÿæˆ�ã‚µãƒ¼ãƒ“ã‚¹ - ãƒ‡ãƒ¼ã‚¿é›†è¨ˆãƒ­ã‚¸ãƒƒã‚¯
é    N)Údatetime)Ú
monthrange)ÚESTIMATED_HANDLE_TIME_MINUTESÚHOURLY_COST)Úget_statistics_for_periodÚget_monthly_comparisonÚget_daily_statisticsÚget_hourly_statisticsÚget_day_of_week_statisticsÚget_hour_by_day_of_weekÚget_average_turnsÚget_unresolved_by_hourÚget_keywordsÚget_unresolved_keywordsÚget_unanswered_questionsÚget_recent_dislikedÚget_feedback_daily_statsÚget_qa_usage_rankingÚget_category_usage_rankingc                   óN   — e Zd ZdZdedefd„Zd„ Zdefd„Zdefd„Z	d	edefd
„Z
y)ÚReportDataAggregatoruH   æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆã�«å¿…è¦�ã�ªãƒ‡ãƒ¼ã‚¿ã‚’å�Žé›†ãƒ»é›†è¨ˆã�™ã‚‹ã‚¯ãƒ©ã‚¹ÚyearÚmonthc                 óZ   — || _         || _        | j                  «       \  | _        | _        y )N)r   r   Ú_get_month_rangeÚ
start_dateÚend_date)Úselfr   r   s      ú-/var/www/html/chat/reports/core/aggregator.pyÚ__init__zReportDataAggregator.__init__!   s'   € ØˆŒ	ØˆŒ
Ø)-×)>Ñ)>Ó)@Ñ&ˆŒ˜�ó    c                 óÊ   — t        | j                  | j                  «      \  }}| j                  › d| j                  d›d�}| j                  › d| j                  d›d|d›�}||fS )u*   å¯¾è±¡æœˆã�®é–‹å§‹æ—¥ã�¨çµ‚äº†æ—¥ã‚’å�–å¾—ú-Ú02dz-01)r   r   r   )r   Ú_Úlast_dayÚstartÚends        r   r   z%ReportDataAggregator._get_month_range&   sd   € ä  §¡¨D¯J©JÓ7‰ˆˆ8Ø—9‘9�+˜Q˜tŸz™z¨#Ð.¨cÐ2ˆØ—‘�˜1˜TŸZ™Z¨Ð,¨A¨h°s¨^Ð<ˆØ�cˆzÐr!   Úreturnc                 óP  — | j                  «       }t        | j                  | j                  «      }i d| j                  | j                  | j                  | j
                  dœ“d|“d|“dt        | j                  | j
                  «      “dt        | j                  | j
                  «      “dt        | j                  | j
                  «      “dt        | j                  | j
                  «      “d	t        | j                  | j
                  «      “d
t        | j                  | j
                  «      “dt        | j                  | j
                  «      “dt        | j                  | j
                  «      “dt        | j                  | j
                  «      “dt        | j                  | j
                  «      “dt!        | j                  | j
                  «      “dt#        | j                  | j
                  «      “dt%        | j                  | j
                  «      “d| j'                  |«      “S )u*   å…¨ãƒ‡ãƒ¼ã‚¿ã‚’å�Žé›†ã�—ã�¦è¾žæ›¸ã�§è¿”ã�™Úperiod)r   r   r   r   ÚsummaryÚ
comparisonÚdaily_statsÚhourly_statsÚday_of_week_statsÚhour_by_day_of_weekÚ	avg_turnsÚunresolved_by_hourÚkeywordsÚunresolved_keywordsÚunanswered_questionsÚrecent_dislikedÚfeedback_daily_statsÚqa_usage_rankingÚcategory_usage_rankingÚestimated_savings)Ú_get_summaryr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Ú_calculate_savings)r   r,   r-   s      r   Úcollect_all_dataz%ReportDataAggregator.collect_all_data-   sô  € à×#Ñ#Ó%ˆÜ+¨D¯I©I°t·z±zÓBˆ
ð
ØØŸ	™	ØŸ™Ø"Ÿo™oØ ŸM™Mñ	ð
ð �wð
ð ˜*ð
ð Ô/°·±ÀÇÁÓOð
ð Ô1°$·/±/À4Ç=Á=ÓQð
ð  Ô!;¸D¿O¹OÈTÏ]É]Ó![ð
ð "Ô#:¸4¿?¹?ÈDÏMÉMÓ#Zð
ð Ô*¨4¯?©?¸D¿M¹MÓJð
ð !Ô"8¸¿¹È$Ï-É-Ó"Xð
ð œ T§_¡_°d·m±mÓDð
ð  "Ô#:¸4¿?¹?ÈDÏMÉMÓ#Zð!
ð" #Ô$<¸T¿_¹_ÈdÏmÉmÓ$\ð#
ð$ Ô2°4·?±?ÀDÇMÁMÓRð%
ð& #Ô$<¸T¿_¹_ÈdÏmÉmÓ$\ð'
ð( Ô 4°T·_±_ÀdÇmÁmÓ Tð)
ð* %Ô&@ÀÇÁÐRV×R_ÑR_Ó&`ð+
ð,   ×!8Ñ!8¸Ó!Að-
ð 	
r!   c                 ó”  — t        | j                  | j                  «      }|d   }|d   }|d   }|d   }|d   }|d   }|d   }|dkD  rt        ||z  d	z  d
«      nd}	|dkD  rt        ||z  d	z  d
«      nd}
|dkD  rt        ||z  d	z  d
«      nd}|dkD  rt        ||z  d	z  d
«      nd}|dkD  rt        ||z  d
«      nd}i |¥|	|
|||dœ¥S )u   ã‚µãƒžãƒªãƒ¼çµ±è¨ˆã‚’è¨ˆç®—Útotal_conversationsÚanswered_countÚunanswered_countÚlikes_countÚdislikes_countÚtotal_feedbacksÚ
unique_ipsr   éd   é   )Úresolution_rateÚunresolved_rateÚsatisfaction_rateÚfeedback_rateÚconversations_per_user)r   r   r   Úround)r   ÚstatsÚtotalÚansweredÚ
unansweredÚlikesÚdislikesrE   rF   rI   rJ   rK   rL   rM   s                 r   r<   z!ReportDataAggregator._get_summaryK   s"  € ä)¨$¯/©/¸4¿=¹=ÓIˆàÐ+Ñ,ˆØÐ)Ñ*ˆØÐ-Ñ.ˆ
Ø�mÑ$ˆØÐ)Ñ*ˆØÐ 1Ñ2ˆØ˜<Ñ(ˆ
ð ?DÀaºiœ% ¨5Ñ 0°3Ñ 6¸Ô:ÈQˆà@EÈÂ	œ% 
¨UÑ 2°SÑ 8¸!Ô<ÈqˆàGVÐYZÒGZœE %¨/Ñ"9¸CÑ"?ÀÔCÐ`aÐàCHÈ1Â9œ˜o°Ñ5¸Ñ;¸QÔ?ÐRSˆàAKÈaÂ¤ u¨zÑ'9¸1Ô!=ÐUVÐð
Øð
à.Ø.Ø!2Ø*Ø&<ò
ð 	
r!   r,   c                 ó‚   — |d   }|t         z  }|dz  }|t        z  }|t         t        |t        |d«      t        |«      dœS )u'   æŽ¨å®šå‰Šæ¸›æ™‚é–“ãƒ»ã‚³ã‚¹ãƒˆã‚’è¨ˆç®—rA   é<   rH   )rA   Úestimated_handle_time_minutesÚhourly_costÚsaved_minutesÚsaved_hoursÚ
saved_cost)r   r   rN   Úint)r   r,   rQ   rY   rZ   r[   s         r   r=   z'ReportDataAggregator._calculate_savingsk   sW   € àÐ+Ñ,ˆð !Ô#@Ñ@ˆà# bÑ(ˆà ¤;Ñ.ˆ
ð 'Ü-JÜ&Ø*Ü  ¨aÓ0Ü˜j›/ñ
ð 	
r!   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r\   r    r   Údictr>   r<   r=   © r!   r   r   r      sL   „ ÙRðA˜Sð A¨ó Aò
ð
 $ó 
ð<
˜dó 
ð@
¨$ð 
°4ô 
r!   r   )r`   ÚosÚsysr   Úcalendarr   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úconfigr   r   Úcore.databaser   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rb   r!   r   ú<module>rm      sy   ðñó 
Û 
Ý Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°2·7±7·?±?À8Ó3LÓ#MÓNÔ Oß =÷÷ ÷ ÷ ñ ÷&_
ò _
r!   