
    !h                        S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  \(       a  S SKJr  S SKJr  S S	KJr  \R$                  " \5      r " S
 S5      rg)    )annotationsN)TYPE_CHECKING)task)Spidersignals)NotConfigured)Self)Crawler)StatsCollectorc                  t    \ rS rSrSrSSS jjr\SS j5       rSS jrSS jr	SS jr
SS jr    SS	 jrS
rg)LogStats   zaLog basic scraping stats periodically like:
* RPM - Requests per Minute
* IPM - Items per Minute
c                R    Xl         X l        SU R                  -  U l        S U l        g )N      N@)statsinterval
multiplierr   )selfr   r   s      a/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/extensions/logstats.py__init__LogStats.__init__   s#    %*
'!%!5-1	    c                j   UR                   R                  S5      nU(       d  [        eUR                  (       d   eU " UR                  U5      nUR                  R                  UR                  [        R                  S9  UR                  R                  UR                  [        R                  S9  U$ )NLOGSTATS_INTERVAL)signal)settingsgetfloatr   r   r   connectspider_openedspider_closed)clscrawlerr   os       r   from_crawlerLogStats.from_crawler"   s    !**334GH}}}x(8M8MN8M8MNr   c                    SU l         SU l        [        R                  " U R                  U5      U l        U R                  R                  U R                  5        g )Nr   )	pagesprev	itemsprevr   LoopingCalllogstartr   )r   spiders     r   r   LogStats.spider_opened-   s<    $$TXXv6			&r   c                    U R                  5         SnU R                  U R                  U R                  U R                  S.n[
        R                  X#SU0S9  g )NzhCrawled %(pages)d pages (at %(pagerate)d pages/min), scraped %(items)d items (at %(itemrate)d items/min))pagespagerateitemsitemrater,   )extra)calculate_statsr/   prater1   irateloggerinfo)r   r,   msglog_argss       r   r*   LogStats.log4   sU    B 	
 ZZ

ZZ

	
 	C(F);<r   c                z   U R                   R                  SS5      U l        U R                   R                  SS5      U l        U R                  U R                  -
  U R
                  -  U l        U R                  U R                  -
  U R
                  -  U l        U R                  U R                  sU l        U l        g )Nitem_scraped_countr   response_received_count)	r   	get_valuer1   r/   r(   r   r6   r'   r5   )r   s    r   r4   LogStats.calculate_statsC   s    **../CQG
**../H!L
!ZZ$..8DOOK
!ZZ$..8DOOK
)-TZZ&r   c                &   U R                   (       a5  U R                   R                  (       a  U R                   R                  5         U R                  U5      u  p4U R                  R                  SU5        U R                  R                  SU5        g )Nresponses_per_minuteitems_per_minute)r   runningstopcalculate_final_statsr   	set_value)r   r,   reason	rpm_final	ipm_finals        r   r    LogStats.spider_closedJ   s`    99**IINN#99&A	

3Y?

/;r   c                <   U R                   R                  S5      nU R                   R                  S5      nU(       a  U(       d  gX2-
  R                  S-  nUS:X  a  gU R                   R                  SS5      nU R                   R                  SS5      nXd-  XT-  4$ )N
start_timefinish_time)NN<   r   r=   r>   )r   r?   seconds)r   r,   rM   rN   mins_elapsedr1   r/   s          r   rF   LogStats.calculate_final_statsR   s     ZZ)),7
jj**=9#099B>1

$$%91=

$$%>B$(<==r   )
r   r6   r1   r(   r   r/   r'   r5   r   r   N)r   )r   r   r   float)r"   r
   returnr	   )r,   r   rT   None)rT   rU   )r,   r   rH   strrT   rU   )r,   r   rT   z'tuple[None, None] | tuple[float, float])__name__
__module____qualname____firstlineno____doc__r   classmethodr$   r   r*   r4   r    rF   __static_attributes__ r   r   r   r      sJ    
2  '=@<>>	0>r   r   )
__future__r   loggingtypingr   twisted.internetr   scrapyr   r   scrapy.exceptionsr   typing_extensionsr	   scrapy.crawlerr
   scrapy.statscollectorsr   	getLoggerrW   r7   r   r^   r   r   <module>ri      sA    "    ! " +&&5 
		8	$M> M>r   