
    Rh	%                     t   d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ g dZg dZ G d d	          Z e            Zdd
edede
eef         de
eef         fdZedk    rI ed            ede                                            ede                                           dS dS )u6   
API для управления P2P сканером
    N)Path)datetime)DictAnyOptional)$USDTUSDCBTCETHBNBBUSDDAIBCHLTCXRPTRXDOGESOLDOTMATICADALINKAVAXXLMXMRATOMNEARAPTSUIOPARBTONETCFILEOSFTMICPKASKAVATUSDFDUSD)+USDEURRUBUAHKZTTRYBRLARSNGNVNDIDRINRGBPAEDSARPLNCZKRONHUFGELAMDAZNUZSKGSTJSCNYHKDTWDKRWJPYMYRPHPTHBSGDAUDCADMXNCLPPENCOPZAREGPILSc                       e Zd ZdZd Zdeeef         fdZdeeef         de	fdZ
de	fdZdee         fdZdeeef         fd	Zdeeef         fd
Zdeeef         fdZdeeef         fdZdS )ScannerManageruN   Менеджер для управления процессом сканераc                 2   t          t                    j        | _        | j        dz  | _        | j        dz  | _        | j        dz  | _        	 | j                            dd           n# t          $ r Y nw xY w| j        dz  | _	        ddd	d
gdd| _
        d S )Nzscanner.pidzscanner_config.jsonlogsT)parentsexist_okzscanner.log   r,   r   r	   F)refresh_intervalfiat_currencyassets_to_track
auto_start)r   __file__parentproject_dirpid_fileconfig_filelogs_dirmkdir	Exceptionlog_filedefault_config)selfs    /app/admin_api.py__init__zScannerManager.__init__   s    >>0(=8+.CC(61	Mt<<<< 	 	 	D	5 !#" &/	
 
s   A* *
A76A7returnc                    | j                                         rU	 t          | j         dd          5 }t          j        |          cddd           S # 1 swxY w Y   n# t
          $ r Y nw xY w| j                                        S )u8   Получить текущую конфигурациюrutf-8encodingN)rf   existsopenjsonloadri   rk   copyrl   fs     rm   
get_configzScannerManager.get_config3   s    ""$$ 	$*C'BBB (a9Q<<( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (   "'')))s4   A AA AA AA 
A,+A,configc                     	 t          | j        dd          5 }t          j        ||dd           ddd           n# 1 swxY w Y   dS # t          $ r}t          d	|            Y d}~dS d}~ww xY w)
u+   Сохранить конфигурациюwrr   rs      F)indentensure_asciiNTu<   Ошибка сохранения конфигурации: )rv   rf   rw   dumpri   print)rl   r}   r{   es       rm   save_configzScannerManager.save_config=   s    	d&g>>> C!	&!AEBBBBC C C C C C C C C C C C C C C4 	 	 	TQRTTUUU55555	s7   A >A AA AA 
A2A--A2c                 R   | j                                         sdS 	 t          | j         d          5 }t          |                                                                          }ddd           n# 1 swxY w Y   t          j        |          S # t          t          f$ r Y dS w xY w)u4   Проверить, запущен ли сканерFrq   N)
re   ru   rv   intreadstrippsutil
pid_exists
ValueErrorFileNotFoundError)rl   r{   pids      rm   
is_runningzScannerManager.is_runningG   s    }##%% 	5	dmS)) ,Q!&&((..**++, , , , , , , , , , , , , , , $S)))-. 	 	 	55	s4   B 4A2&B 2A66B 9A6:B B&%B&c                 .   | j                                         sdS 	 t          | j         d          5 }t          |                                                                          cddd           S # 1 swxY w Y   dS # t          t          f$ r Y dS w xY w)u4   Получить PID процесса сканераNrq   )re   ru   rv   r   r   r   r   r   rz   s     rm   get_scanner_pidzScannerManager.get_scanner_pidU   s    }##%% 	4	dmS)) -Q16688>>++,,- - - - - - - - - - - - - - - - - --. 	 	 	44	s4   A? 3A2%A? 2A66A? 9A6:A? ?BBc                    |                                  rddddS 	 t          j        ddg| j        t	          | j        d          t          j        t          j                  }t	          | j	        d	          5 }|
                    t          |j                             d
d
d
           n# 1 swxY w Y   ddd|j        dS # t          $ r }ddt          |           ddcY d
}~S d
}~ww xY w)u   Запустить сканерFu"   Сканер уже запущенrunningsuccessmessagestatuspythonzmain.pya)cwdstdoutstderr
preexec_fnr   NTu*   Сканер успешно запущен)r   r   r   r   u,   Ошибка запуска сканера: error)r   
subprocessPopenrd   rv   rj   STDOUTossetsidre   writestrr   ri   )rl   processr{   r   s       rm   start_scannerzScannerManager.start_scanner`   sq   ?? 	 ?#  	 &9%$DM3//!(9  G dmS)) *QGK(()))* * * * * * * * * * * * * * *  G#{	    	 	 	 R#a&&RR!       	sB   AC 8(B, C ,B00C 3B04C 
C-C("C-(C-c                    |                                  s8| j                                        r| j                                         ddddS 	 |                                 }|rct          j        t          j        |          t          j	                   | j                                        r| j                                         ddddS # t          $ r }ddt          |           ddcY d	}~S d	}~ww xY w)
u!   Остановить сканерTu(   Сканер уже остановленstoppedr   u0   Сканер успешно остановленFu0   Ошибка остановки сканера: r   N)r   re   ru   unlinkr   r   killpggetpgidsignalSIGTERMri   r   )rl   r   r   s      rm   stop_scannerzScannerManager.stop_scanner   s7      	}##%% '$$&&&E#  	&&((C +	"*S//6>::: ='')) +M((***  M#    	 	 	 VcRSffVV!       	s   A>C 
C7C2,C72C7c                     |                                  }|d         s|S ddl}|                    d           |                                 S )u'   Перезапустить сканерr   r   Nr   )r   timesleepr   )rl   stop_resultr   s      rm   restart_scannerzScannerManager.restart_scanner   sR    ''))9% 	 	

1!!###    c                 8   |                                  }|r|                                 nd}|rdnd|t          j                                                    |                                 d}|r|r	 t          j        |          }|                                j	        dz  dz  |d<   |
                                |d<   t          j        |                                                                          |d<   n# t          j        $ r d|d	<   d|d
<   Y nw xY w|S )u,   Получить статус сканераNr   r   )r   r   	timestampr}   i   memory_usagecpu_percent
start_timer   r   )r   r   r   now	isoformatr|   r   Processmemory_inforssr   fromtimestampcreate_timeNoSuchProcess)rl   r   r   r   r   s        rm   
get_statuszScannerManager.get_status   s5   __&&
(2<d""$$$ $.<ii9!1133oo''	
 
  	%# 	%% .--)0)<)<)>)>)BT)ID)P~&(/(;(;(=(=}%'/'=g>Q>Q>S>S'T'T'^'^'`'`|$$' % % %#,x  $u% s   2BC; ;DDN)__name__
__module____qualname____doc__rn   r   r   r   r|   boolr   r   r   r   r   r   r   r   r    r   rm   rX   rX      s>       XX
 
 
(*DcN * * * *$sCx. T    D    	# 	 	 	 	#tCH~ # # # #J!d38n ! ! ! !F
$c3h 
$ 
$ 
$ 
$DcN      r   rX   methodpathdataro   c                 *   |dk    r| dk    rt                                           S |dk    r| dk    rt                                           S |dk    r| dk    rt                                           S |dk    r| dk    rt                                           S |dk    r"| dk    rdt                                           d	S |dk    r0| dk    r*|r#t                               |          }||rd
nddS dddS |dk    r| dk    rdt          t          dS ddddS )u%   Обработать API запросz/api/scanner/statusGETz/api/scanner/startPOSTz/api/scanner/stopz/api/scanner/restartz/api/scanner/configT)r   r}   u+   Конфигурация сохраненаu:   Ошибка сохранения конфигурации)r   r   Fu;   Не переданы данные конфигурацииz/api/scanner/options)r   assetsfiatsu#   Неизвестный API endpointz	Not Found)r   r   r   )	scanner_managerr   r   r   r   r|   r   SUPPORTED_ASSETSSUPPORTED_FIATS)r   r   r   r   s       rm   handle_api_requestr      s    $$$5))+++	%	%	%&F*:*:,,...	$	$	$6)9)9++---	'	'	'Ff,<,<..000	&	&	&6U??%0022
 
 	

 
&	&	&6V+;+; 
	%11$77G"LS  VHH  ZV   !X  
 
'	'	'FeOO &$
 
 	
 < 
 
 	
r   __main__u,   Тестирование Scanner Manager APIu   Статус:u   Конфигурация:)N)r   rw   r   r   r   r   pathlibr   r   typingr   r   r   r   r   rX   r   r   r   r   r   r   r|   r   r   rm   <module>r      s          				              & & & & & & & & & &     n n n n n n n nb !.""/
 /
s /
# /
T#s(^ /
tTWY\T\~ /
 /
 /
 /
b z	E
8999	E/?5577888	E
%'A'A'C'CDDDDD	 r   