
    Pkjj                        U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZ ddd	d
Zded<   h dZh dZh dZd-dZd.dZd/d0dZd1dZd2d Zd3d!Zd4d#Zddd$d%d5d'Zddd(d)d6d,ZdS )7    )annotationsN)datetimetimezone)Path)Any)find_repo_rootload_settingszscripts/restart_backend.shzscripts/restart_frontend.shzscripts/restart_dashboard.sh)backendfrontend	dashboarddict[str, str]ALLOWED_ACTIONS>   restart_backend.shrestart_frontend.shrestart_dashboard.shrestart_vue_dashboard.sh>   HOMELANGPATHUSERSHELLLC_ALLJARVIS_FINANCE_RUNTIME_DIR>
   erroractionstatusmessage	component
started_atfinished_atreturn_codelog_availableworker_startedreturnstrc                 b    t          j        t          j                                                  S N)r   nowr   utc	isoformat     )src/jarvis_finance/services/system_ops.py_nowr.   "   s     <%%//111r,   portintboolc                   t          j         t           j        t           j                  5 }|                    d           |                    dt          |           f          dk    cd d d            S # 1 swxY w Y   d S )Ng333333?z	127.0.0.1r   )socketAF_INETSOCK_STREAM
settimeout
connect_exr0   )r/   socks     r-   
_port_openr9   &   s    	v~v'9	:	: >dSYY788A=> > > > > > > > > > > > > > > > > >s   =A44A8;A8	repo_rootPath | Noner   c                R    t          | pt                                j        j        S )Nr:   )r	   r   runtime_pathsbase_dirr=   s    r-   _runtime_dirr@   ,   s$    9#@0@0@AAAOXXr,   runtime_dirc                    d t           j                                        D             }t          |           |d<   d|d<   d|d<   d|d<   d	|d
<   |S )Nc                ,    i | ]\  }}|t           v ||S r+   )_ALLOWED_ENV).0kvs      r-   
<dictcomp>z_safe_env.<locals>.<dictcomp>1   s(    
D
D
DDAq!|2C2C1a2C2C2Cr,   r   http://100.85.29.67:8000VITE_API_BASE_URLz0.0.0.0BACKEND_HOST8000BACKEND_PORT5173FRONTEND_PORT)osenvironitemsr%   )rA   envs     r-   	_safe_envrT   0   sd    
D
DBJ,,..
D
D
DC(+K(8(8C$%9C#C C!CJr,   entrydict[str, Any]Nonec                   | dz  }|                     dd           t          |          }|dz                      dd          5 }|                    t	          j        |dd	          d
z              d d d            d S # 1 swxY w Y   d S )NlogsTparentsexist_okops_actions.jsonlautf-8)encodingF)ensure_ascii	sort_keys
)mkdir_sanitize_ops_entryopenwritejsondumps)rA   rU   log_dir
safe_entryfhs        r-   _write_ops_logrm   :   s    F"GMM$M...$U++J
'
'	-	-cG	-	D	D T
JUdKKKdRSSST T T T T T T T T T T T T T T T T Ts   .BBBc                >    d |                                  D             S )Nc                ,    i | ]\  }}|t           v ||S r+   )_SAFE_OPS_KEYS)rE   keyvalues      r-   rH   z'_sanitize_ops_entry.<locals>.<dictcomp>C   s(    PPP:3#:O:OC:O:O:Or,   )rR   )rU   s    r-   re   re   B   s    PPPPPPr,   dict[str, Any] | Nonec                   | dz  dz  }|                                 sd S 	 d |                    dd                                          D             }|r't          t	          j        |d                             nd S # t          $ r Y d S w xY w)NrY   r]   c                :    g | ]}|                                 |S r+   )strip)rE   lines     r-   
<listcomp>z$_last_ops_action.<locals>.<listcomp>K   s*    qqq$dhdndndpdpqqqqr,   r_   ignore)r`   errors)exists	read_text
splitlinesre   rh   loads	Exception)rA   pathliness      r-   _last_ops_actionr   F   s    "55D;;== tqq$..'(."S"S"^"^"`"`qqq=BL"4:eBi#8#8999L   tts   AA> >
BBrI   )rA   r:   api_urlr   c           
     Z   |pt                                                      }| pt          |                                          }|dz  dz  }dd||                                ||j        vo||k    t          d          rdndddt          d	          rdndd	dt          |          d
S )Ndatazfinance.sqlite3system_ops_status_v1oki@  runningoffline)r   r/   i5  )purposer   r   runtime_db_availableruntime_outside_repor
   r   last_restart)r   resolver@   r|   r[   r9   r   )rA   r:   r   reporuntimedb_paths         r-   system_statusr   Q   s    )))2244D0l40099;;G!22G) ' 0 0 $GO ; O4+5d+;+;JiiTXYY,6t,<,<Kyy)UYZZ(11	 	 	r,      )rA   r:   timeoutr   r   c          	        | t           vrt          d          |pt                                                      }|pt	          |                                          }t           |          }||z                                  }t                      }d|  | |d}	||j        vs|j        t          vrt          d          |	                                s)i |	dddt                      d}
t          ||
           |
S |d	z  }|                    d
d
           |d|  dz  }dt          |          }|                    d          5 }t          j        ddd|gt          |          t!          |          |t          j        d
          }d d d            n# 1 swxY w Y   i |	dt                      |                                  dd |j        dk    d
d}
t          ||
           |
S )Nunsupported_system_actionrestart_)r   r   r   script_not_allowedr   zRestart-Script fehlt.script_missing)r   r   r   r    rY   TrZ   z.logzsleep 1; exec abz/usr/bin/envbashz-lc)cwdrS   stdoutstderrstart_new_session	scheduleduC   -Restart wurde gestartet. Bitte in wenigen Sekunden erneut prüfen.r   )r   r    r   r!   r#   r"   )r   
ValueErrorr   r   r@   r.   r[   name_ALLOWED_SCRIPT_NAMESr|   rm   rd   r%   rf   
subprocessPopenrT   STDOUTtitlepid)r   rA   r:   r   r   r   
script_relscript_pathr   baseresultrj   
worker_logworker_commandlog_fhworkers                   r-   restart_system_componentr   a   s   _$$4555)))2244D0l40099;;G (J*$--//KJ%V%%  D
 ;&&&+*:BW*W*W-...  CD  CG8OZj{  |B  |B  C  C  Cw''' GMM$M...2f2222J:c+&6&6::N			 
&!VUN;D		'""$"
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

vvllnniii *q.  F 7F###Ms   AFFF)r$   r%   )r/   r0   r$   r1   r'   )r:   r;   r$   r   )rA   r   r$   r   )rA   r   rU   rV   r$   rW   )rU   rV   r$   rV   )rA   r   r$   rs   )rA   r;   r:   r;   r   r%   r$   rV   )
r   r%   rA   r;   r:   r;   r   r0   r$   rV   )
__future__r   rh   rP   r3   r   r   r   pathlibr   typingr   jarvis_finance.config.settingsr   r	   r   __annotations__r   rD   rp   r.   r9   r@   rT   rm   re   r   r   r   r+   r,   r-   <module>r      s   " " " " " " "  				      ' ' ' ' ' ' ' '             H H H H H H H H ,-/# #    
 zyy ```  2 2 2 2> > > >Y Y Y Y Y   T T T TQ Q Q Q    15td~        IMgk|~ / / / / / / / /r,   