
    i                        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Zej                  j                  ej                  j                  e            Zej                  j                  eddd      Zej                  j                  ed      Zej                  j                  ed      Zd	Zdd
Zd Zd Zd Zd Zd Zedk(  r e        yy)u   
SILENT MONITOR - Surveillance silencieuse des services
Vérifie en continu que tous les composants sont actifs
Redémarre automatiquement les composants défaillants
    N)datetimez.venvScriptsz
python.exezsilent_monitor.logzmonitor_status.json<   c                     t        j                         j                  d      }d| d| d|  d}	 t        t        dd      5 }|j                  |       d	d	d	       y	# 1 sw Y   y	xY w#  Y y	xY w)
z,Enregistre un message dans le log silencieuxz%Y-%m-%d %H:%M:%S[z] [z] 
autf-8encodingN)r   nowstrftimeopenMONITOR_LOGwrite)messagelevel	timestamp	log_entryfs        ./silent_monitor.pylog_messager      sp    ''(;<II;c%7)26I+sW5 	GGI	 	 	s)   A* AA* A'#A* 'A* *A.c                     	 t        j                         j                         | d<   t        t        dd      5 }t        j                  | |d       ddd       y# 1 sw Y   yxY w#  Y yxY w)u%   Met à jour le fichier de statut JSON
last_checkwr
   r      )indentN)r   r   	isoformatr   STATUS_FILEjsondump)status_datar   s     r   update_statusr#   "   s\    $,LLN$<$<$>L!+sW5 	0IIk1Q/	0 	0 	0s(   7A' AA' A$ A' $A' 'A+c                 l    	 t        j                  g d      D ]g  }	 |j                  d   rUd|j                  d   j                         v r6|j                  d   }|r%t	         fd|D              r|j                  d   c S i 	 y# t         j
                  t         j                  f$ r Y w xY w#  Y yxY w)uJ   Vérifie si un processus Python exécutant un script spécifique est actif)pidnamecmdliner&   pythonr'   c              3   &   K   | ]  }|v  
 y w)N ).0argscript_names     r   	<genexpr>z%is_process_running.<locals>.<genexpr>2   s     &Mc{c'9&Ms   r%   N)psutilprocess_iterinfoloweranyNoSuchProcessAccessDenied)r-   procr'   s   `  r   is_process_runningr7   +   s    
''(BC 	D99V$TYYv5F5L5L5N)N"ii	2G3&MW&M#M#yy//	 	 ((&*=*=> s5   B/ A!B?B/ B/ #B,)B/ +B,,B/ /B3c                    t        d| dd       	 t        j                  j                  t        |       }d}d}t        j                  t        |gt        t
        j                  t
        j                  ||z         t        j                  d       t        |       }|rt        | d| d	d
       yt        d| d       y# t        $ r}t        d| d| d       Y d}~yd}~ww xY w)u!   Démarre un composant défaillantu   Redémarrage de z...WARNINGi      )cwdstdoutstderrcreationflags   u     redémarré avec succès (PID: )SUCCESSTu   Échec redémarrage ERRORFu   Erreur redémarrage z: N)r   ospathjoin
SCRIPT_DIR
subprocessPopenVENV_PYTHONDEVNULLtimesleepr7   	Exception)r-   component_namescript_pathCREATE_NO_WINDOWDETACHED_PROCESSr%   es          r   start_componentrS   :   s    ">"2#6	Bggll:{; &%+&%%%%*-==	
 	

1 ->**J3%qQS\].~.>?I *>*:"QC@'Js   BC 2C 	C'C""C'c                     ddddddd} t        d      }|rd| d<   || d<   n0t        dd	       t        dd
      rd| d<   | dxx   dz  cc<   nd| d<   t        d      }|rd| d<   || d<   n0t        dd	       t        dd      rd| d<   | dxx   dz  cc<   nd| d<   t        d      }|rd| d<   || d<   n0t        dd       t        dd      rd| d<   | dxx   dz  cc<   nd| d<   t        d      }|r
d| d<   || d<   | S )u;   Vérifie tous les services et les redémarre si nécessaireFTr   )	dashboardtrading_botwatchdogauto_updaterall_okrestart_countzdashboard_api_server.pyrU   dashboard_pidu   Dashboard API inactif détectér9   zDashboard APIrZ      rY   ztrading_bot.pyrV   trading_bot_pidu   Trading Bot inactif détectézTrading Botzbot_watchdog.pyrW   watchdog_pidu=   ⚠️ WATCHDOG INACTIF DÉTECTÉ - Redémarrage prioritaire!CRITICALWatchdogzauto_updater_service.pyrX   auto_updater_pid)r7   r   rS   )statusr%   s     r   check_servicesrc   [   sc    F 6
7C
"{"%5yA4oF"&F;?#q(#$F8 -
.C
 $}$' !3Y?+];$(F=!?#q(#$F8 .
/C
!z!$~SU_`,j9!%F:?#q(#$F8 6
7C
!%~%(!"M    c                     t        dd       t        dt         dd       d} d}	 	 t               }| |d<   ||d<   t        |       |d   r%d} |d	   dkD  r`t        |d	    d
d       ||d	   z  }nE| dz  } t        d|  dd       | dk\  r+t        dd       t	        j
                  t        dz         d} t	        j
                  t               # t        $ r t        dd       Y yt        $ r}t        d| d        d}~ww xY w)z-Boucle principale de surveillance silencieuseu    === Silent Monitor démarré ===INFOu   Intervalle de vérification: sr   consecutive_failurestotal_restartsrY   rZ   u'    service(s) redémarré(s) avec succèsrA   r\   u$   Échec vérification (consécutifs: r@   rB   r?   u0   Trop d'échecs consécutifs - attente prolongéer9   r   u(   === Silent Monitor arrêté (Ctrl+C) ===zErreur fatale: N)r   CHECK_INTERVALrc   r#   rK   rL   KeyboardInterruptrM   )rh   ri   rb   rR   s       r   mainrl      sC   2F;//?qA6JN"#%F .BF)*'5F#$&! h'($/*Q.6/#:";;b ceno"f_&==N$)$BCWBXXYZ\cd (1, RT]^JJ~12+,( JJ~&7 :  H>G oaS)73s   B)C D&D.C>>D__main__)rf   )__doc__rC   sysrK   rG   r/   r   r    rD   dirnameabspath__file__rF   rE   rI   r   r   rj   r   r#   r7   rS   rc   rl   __name__r*   rd   r   <module>rt      s    
 
     WW__RWW__X67
ggll:w	<Hggll:';<ggll:'<= 	B8t*X zF rd   