o
    7)#i                      @   s   d dl mZmZmZ d dlZd dlZd dlmZ d dlZede	ddZ
ddd	d
dd	ddd	ddd	dZdZh dZdd Ze
jdd Zdd Zd/ddZdZe
jddgdd d! Ze
jd"dgdd#d$ Ze
jd%d&gdd'd( Ze
jd)d&gdd*d+ Ze
jd,d&gdd-d. ZdS )0    )	BlueprintjsonifyrequestN)current_useradmin_bpz
/admin/api)
url_prefixzbtm-allchain.servicez$/var/www/html/logs/allchainIV_V2.log)namelogzbtm-outliers.servicez./var/www/html/logs/gettingChains_outliers4.logzbtm-tokenrefresh.servicez#/var/www/html/logs/tokenrefresh.logzbtm-predictor.servicez /var/www/html/logs/predictor.log)allchainoutlierstokenrefresh	predictorz/var/www/html/logs>   QQQRUTSPXSPYXSPc                  C   s    t dd} dd | dD S )zo
    Lee ADMIN_ALLOWED_EMAILS del entorno EN EL MOMENTO DEL REQUEST.
    Soporta lista separada por comas.
    ADMIN_ALLOWED_EMAILS c                 S   s    h | ]}|  r|   qS  )striplower).0er   r   0/var/www/html/backtestingmarket/admin_service.py	<setcomp>'   s    
z%get_allowed_emails.<locals>.<setcomp>,)osgetenvsplit)rawr   r   r   get_allowed_emails!   s   r!   c                  C   sf   t jstddddfS tt ddpd } t }|s$tddddfS | |vr1tddddfS dS )zCRestringe el acceso al API solo a usuarios logueados y whitelisted.F	forbiddenokerrori  emailr   N)r   is_authenticatedr   getattrr   r!   )r&   allowedr   r   r   restrict_admin_api.   s   r*   c                 C   s"   t j| ddd}|j|j|j fS )z3Ejecuta un comando y devuelve (returncode, output).T)capture_outputtext)
subprocessrun
returncodestdoutstderr)cmdresr   r   r   run_cmd@   s   r4   d   c                 C   s   t j| sdS t| dB}|dt j | }d}d}|dkrH|d|krHt||}||8 }|| |	|| }|dkrH|d|ks(W d   n1 sRw   Y  |j
ddd	 | d S )
u5   Devuelve las últimas n líneas de un archivo de log.Nrbr   i          
zutf-8replace)errors)r   pathexistsopenseekSEEK_ENDtellcountminreaddecode
splitlines)r;   nfsizeblockdatastepr   r   r   tail_logF   s    


rL   z/usr/bin/systemctlz/<service>/startPOST)methodsc                 C   H   | t vrtddddfS tdtdt |  d g\}}t|dk|d	S )
NFunknown servicer#     sudostartr   r   r$   outputSERVICESr   r4   	SYSTEMCTLservicecodeoutr   r   r   start_service[      r]   z/<service>/stopc                 C   rO   )
NFrP   r#   rQ   rR   stopr   r   rT   rV   rY   r   r   r   stop_servicec   r^   r`   z/<service>/statusGETc                 C   sf   | t vrtddddfS t |  d }ttd|g\}}ttd|dd	g\}}t|d
k| |dS )NFrP   r#   rQ   r   z	is-activeshowz6--property=ActiveState,SubState,MainPID,ExecMainStatusz
--no-pagerr   )r$   	is_activedetails)rW   r   r4   rX   r   )rZ   svc_namecode1out1code2out2r   r   r   status_servicek   s   
rj   z/<service>/logsc                 C   s   | t vrtddddfS ttjdd}| dkr@tjdd	d
d }|tvr4tddddfS t	j
td| d}nt |  d }t||}|d u rXtddddfS td|dS )NFrP   r#   rQ   rF   r5   r   symbolr   $r   zinvalid symboli  pred_z.logr	   zLog file not foundT)r$   lines)rW   r   intr   argsgetr9   upperPREDICTOR_SYMBOLSr   r;   joinPREDICTOR_LOG_DIRrL   )rZ   rF   rk   log_pathrn   r   r   r   logs_service   s   
rw   z/token/statusc               
   C   s   d} t j| stddddfS zt| }t|}W d    n1 s&w   Y  W n tyI } ztdt|ddfW  Y d }~S d }~ww dd l	}|j	
|jj}|j	|d }|j	|d	 }d
}d}	||j|d }
||j|	d }td|
|  ||  |
 | dS )Nz"/var/www/tokens_schwab/tokens.jsonFztokens.json not foundr#   rQ   i  r   access_token_issuedrefresh_token_issuedi  i:	 )secondsT)r$   access_expires_inrefresh_expires_inaccess_expires_atrefresh_expires_at)r   r;   r<   r   r=   jsonload	Exceptionstrdatetimenowtimezoneutcfromisoformat	timedeltatotal_seconds	isoformat)r;   rG   rJ   r   r   r   	at_issued	rt_issuedACCESS_TIMEOUTREFRESH_TIMEOUT	at_expire	rt_expirer   r   r   token_status   s6   
"

r   )r5   )flaskr   r   r   r-   r   flask_loginr   r   __name__r   rW   ru   rs   r!   before_requestr*   r4   rL   rX   router]   r`   rj   rw   r   r   r   r   r   <module>   sJ   





