o
    hJ                     @   sJ  d dl Z d dlmZmZmZ d dlT d dlmZ d dlZd dl	Z	d dl
Z
d dlZe	jjdd D ]Ze	je q0e	jdddZee	j ee	d e	je e	je	j eeZd	ed
efddZdd Zdd Zdd Zeddd Z ejddgddd Z!ejddgddd Z"edkrej#dd d!d" dS dS )#    N)Flaskjsonifyrender_template)*)	timedeltaz"/var/log/monitor_uptime/uptime.logutf-8encodingz)%(asctime)s - %(levelname)s - %(message)sipreturnc              
   C   s   z4t   dkrdnd}d|ddd| g}t   dkr%d|ddd| g}tj|tjtjd	}|jd
kW S  tyS } ztj	
d|  d|  W Y d}~dS d}~ww )u;   Verifica a conectividade com um host usando um único ping.windowsz-nz-cping1z-Wz-w1000)stdoutstderrr   zErro ao executar o ping para : NF)platformsystemlower
subprocessrunDEVNULL
returncode	Exceptionapploggererror)r
   paramcommandresponsee r"   /var/www/monitor_uptime/app.pycheck_host_connectivity'   s   r$   c               
   C   s   z t dddd} t| W  d   W S 1 sw   Y  W dS  ty1   tjd i  Y S  tjyN } ztjd|  i W  Y d}~S d}~ww )u<   Carrega a configuração dos hosts a partir do arquivo YAML.z	hosts.ymlrr   r   Nu6   ARQUIVO DE CONFIGURAÇÃO 'hosts.yml' NÃO ENCONTRADO.u-   ERRO DE FORMATAÇÃO NO ARQUIVO 'hosts.yml': )openyaml	safe_loadFileNotFoundErrorr   r   r   	YAMLError)filer!   r"   r"   r#   load_config9   s   (r,   c                 C   st   | du rdS t | d }t|d}|jd|j}}}t|d\}}t|d\}}| d|d	d
|d	d|d	dS )uX   Converte o valor de timeticks (centésimos de segundo) do SNMP para um formato legível.NzN/Ad   )secondsr   i  <   z dias, 02dzh zm s)intr   daysr.   divmod)	timetickstotal_secondstdr3   hours	remainderminutesr.   r"   r"   r#   format_uptime_from_timeticksE   s   
"r;   c           
   
   C   sH  t jd|  d|  tt t|ddt| dfdddt tt	|}zXt
|\}}}}|rCt jd	|  d
|  dt|iW S |rk|  d|rV|t|d  d pWd }t jd	|  d
|  d|iW S t jd|  d d|d d iW S  ty }	 zt jd|  d
|	  dd|  diW  Y d}	~	S d}	~	ww )uC   Executa la consulta SNMP para obter um valor de um OID específico.zIniciando consulta SNMP para z	 com OID    )mpModel         )timeoutretrieszFalha SNMP para r   r   z at r   ?zConsulta SNMP para z bem-sucedida.valuez1Timeout ou erro inesperado na consulta SNMP para zNenhuma resposta SNMP de uQ   . Verifique comunidade, firewall e se o serviço SNMP está ativo no dispositivo.N)r   r   infogetCmd
SnmpEngineCommunityDataUdpTransportTargetContextData
ObjectTypeObjectIdentitynextr   strprettyPrintr2   r   )
r
   	communityoiditeratorerror_indicationerror_statuserror_index	var_bindserror_messager!   r"   r"   r#   
query_snmpO   s0   

*
rX   /c                   C   s   t dS )Nz
index.html)r   r"   r"   r"   r#   indexk   s   rZ   z/api/routersGET)methodsc                  C   s    t  } dd |  D }t|S )Nc                 S   s"   g | ]\}}|| d |dqS )displayName)keyr]   )get).0r^   detailsr"   r"   r#   
<listcomp>r   s   " zget_routers.<locals>.<listcomp>)r,   itemsr   )configrouter_listr"   r"   r#   get_routerso   s   rf   z/api/uptime/<router_key>c                 C   s   t  }|| }|stddidfS |d|d|d}}}t|||gs2tddidfS tjd	| d
 t|sRtjd| d tddidfS t	|||}d|v rftd|d idfS t
|d}t|d| |dS )Nr   u+   Roteador não encontrado na configuração.i  r
   rP   rQ   u:   Configuração incompleta para este roteador no hosts.yml.i  zVerificando conectividade com z...zHost u'    inacessível (não respondeu ao ping).u*   Host inacessível (não responde ao ping).rD   r]   )routeruptime)r,   r_   r   allr   r   rE   r$   warningrX   r;   )
router_keyrd   host_configr
   rP   rQ   resulthuman_readable_uptimer"   r"   r#   
get_uptimeu   s&   
"
ro   __main__z0.0.0.0i  T)hostportdebug)$r'   flaskr   r   r   pysnmp.hlapidatetimer   socketloggingr   r   roothandlershandlerremoveHandlerFileHandlerapp_handlersetLevelINFOsetFormatter	Formatter
addHandler__name__r   rN   boolr$   r,   r;   rX   routerZ   rf   ro   r   r"   r"   r"   r#   <module>   s>   	



