
    _hR                     h    d dl Z d dlZd dlmZmZmZ d dlZ ej                  d      Z G d d      Zy)    N)datetimetimezone	timedeltaproxy_managerc                   F    e Zd Zd Zd ZdefdZd
defdZd Zd Z	ddZ
y	)ProxyManagerc                 R    || _         g | _        t        j                         | _        y )N)db_poolproxiesasyncioLocklock)selfr
   s     /var/www/html/proxy_manager.py__init__zProxyManager.__init__	   s    LLN	    c                   K   | j                   j                         4 d {   }|j                  t        j                        4 d {   }|j                  d       d {    |j                          d {   | _        d d d       d {    d d d       d {    t        j                  dt        | j                         d       y 7 7 7 r7 \7 I# 1 d {  7  sw Y   YxY w7 P# 1 d {  7  sw Y   `xY ww)Nz
                    SELECT id, proxy, port, username, password, is_banned, banned_until 
                    FROM proxy
                u   Завантажено u    проксі)r
   acquirecursoraiomysql
DictCursorexecutefetchallr   loggerinfolen)r   conncurs      r   load_proxieszProxyManager.load_proxies   s     <<'') 	4 	4T{{8#6#67 4 43kk #    &)\\^34 4	4 	4 	-c$,,.?-@NO	44  44 4 4 4	4 	4 	4 	4s   DCD$C2	C
C2C"C#C:C;	CC2CC2DC0 2DC2CCC2C-	!C$"C-	)C20D2D8C;9D Dusernamec                 4  K   t        j                  t        j                        j	                  d      }t
        j                  d| d|        | j                  j                         4 d {   }|j                         4 d {   }|j                  d||f       d {    |j                          d {    d d d       d {    d d d       d {    y 7 r7 [7 A7 +7 # 1 d {  7  sw Y   -xY w7 $# 1 d {  7  sw Y   y xY ww)Nr   microsecondu=   Оновлюємо last_checked для проксі username=u    на z2UPDATE proxy SET last_checked=%s WHERE username=%s)r   nowr   utcreplacer   r   r
   r   r   r   commit)r   r    r$   r   r   s        r   update_last_checkedz ProxyManager.update_last_checked   s     ll8<<(00Q0?ST\S]]cdgchij<<'') 	$ 	$T{{} $ $kkH(O   kkm##$ $	$ 	$ 	$$ $$ $ $ $	$ 	$ 	$ 	$s   A-D/C"0D3DC$	DC,$C&%C,<C(=C,DC*DDDD$D&C,(C,*D,C>	2C53C>	:DDD	D
DDc                   K   t        j                  t        j                        j	                  d      t        |      z   }| j                  j                         4 d {   }|j                         4 d {   }|j                  d||f       d {    |j                          d {    d d d       d {    d d d       d {    t        j                  d| d|        | j                  4 d {    | j                  D ]  }|d   |k(  sd|d	<   ||d
<    n d d d       d {    y 7 7 7 7 7 # 1 d {  7  sw Y   xY w7 # 1 d {  7  sw Y   xY w7 p7 =# 1 d {  7  sw Y   y xY ww)Nr   r"   )secondsz?UPDATE proxy SET is_banned=1, banned_until=%s WHERE username=%su'   Забанено проксі username=u    до r       	is_bannedbanned_until)r   r$   r   r%   r&   r   r
   r   r   r   r'   r   warningr   r   )r   r    ban_seconds	ban_untilr   r   ps          r   	ban_proxyzProxyManager.ban_proxy#   sz    LL.6616E	ZeHff	<<'') 	$ 	$T{{} $ $kkU)   kkm##$ $	$ 	$ 	@
&QZP[\]99 	 	\\ Z=H,%&AkN(1An%		 	 		$$ $$ $ $ $	$ 	$ 	$ 	$	 	 	 	 	s   AF!D9"F%E:D;;E>ED=E.D?/E3E>E?EFE/F>E/?FE3E3(F3E14F;E=E?EEE		E
E	EFE, E#!E,(F1F3F9E<:FFc                 Z  K   t        j                  t        j                        j	                  d      }| j
                  j                         4 d {   }|j                         4 d {   }|j                  d|f       d {    |j                          d {    d d d       d {    d d d       d {    t        j                  d       | j                          d {    y 7 7 7 n7 X7 J# 1 d {  7  sw Y   ZxY w7 Q# 1 d {  7  sw Y   axY w7 ;w)Nr   r"   zXUPDATE proxy SET is_banned=0, banned_until=NULL WHERE is_banned=1 AND banned_until <= %suO   Розбанено всі проксі, у яких закінчився бан)r   r$   r   r%   r&   r
   r   r   r   r'   r   r   r   )r   r$   r   r   s       r   unban_expired_proxiesz"ProxyManager.unban_expired_proxies5   s    ll8<<(00Q0?<<'') 	$ 	$T{{} $ $kknF   kkm##$ $	$ 	$ 	ef!!!	$$ $$ $ $ $	$ 	$ 	$ 	$ 	"s   AD+C3D+D-C5.D1C=C7	C= C9!C=%D0C;1D5D+ D,D+-D).D+5D7C=9C=;D=D	DD	DD+D&DD&"D+c                 t  K   t        j                  t        j                        j	                  d      }| j
                  4 d {    | j                  D ]  }|j                  d      }|r,|j                   |j	                  t        j                        }|d   dk(  s	|sM||k  sS|d   dk(  r
d|d<   d |d<   t        j                  d|d    d	       | j                  |d          d {    |c cd d d       d {    S  d d d       d {    y 7 7 -7 7 # 1 d {  7  sw Y   y xY ww)
Nr   r"   r-   )tzinfor,   r+   u%   Видаємо проксі username=r    u#    і оновлюємо last_checked)r   r$   r   r%   r&   r   r   getr6   r   r   r(   )r   r$   r1   r-   s       r   	get_proxyzProxyManager.get_proxyA   s4    ll8<<(00Q0?99 	 	\\  uu^4L$7$7$?#/#7#7x||#7#LL[>Q&<LC<O~*)*+,0.)KK"G*Vy z{221Z=AAAH	 	 		 	 	 B	 	 	 	 	 s   AD8DD8
AD#$D#*AD#/D0D#7D8DD8	D#
D8D!D8D#D8!D8#D5)D,*D51D8c                    K   	 	 | j                          d {    t	        j
                  |       d {    77 "# t        $ r$}t        j                  d| d       Y d }~Hd }~ww xY w7 7w)NTu)   Помилка в unban_expired_proxies: )exc_info)r4   	Exceptionr   errorr   sleep)r   interval_seces      r   run_periodic_unbanzProxyManager.run_periodic_unbanT   sn     ]00222 ----- 2 ]HLW[\\]-sA   A/= ;= A/A-A/= 	A*A% A/%A**A/N)iX  )i,  )__name__
__module____qualname__r   r   strr(   r2   r4   r8   r@    r   r   r   r      s4    #
P	$# 	$ $
"&.r   r   )	r   loggingr   r   r   r   	getLoggerr   r   rE   r   r   <module>rH      s2      2 2 			?	+R. R.r   