Y0}ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z ddlm Z mZddlmZdZdaGdd eZd Zd Zd Zd ZdZdZdZdZdZdZdZdZ dS)N) reboot_lock)configdbengine)LVEVersionErrorget_lve_version) setup_loggingz /dev/nullceZdZfdZxZS)EnvironmentExceptioncVt||_dS)N)super__init__message)selfr __class__s /builddir/build/BUILDROOT/lve-stats-4.3.2-1.el9.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/lib/lvestats_server.pyrzEnvironmentException.__init__s$  )__name__ __module__ __qualname__r __classcell__)rs@rr r s8rr ctrtjtr t tdd5}t |}tj|d|cdddS#1swxYwYdS#ttf$rYdSwxYwdSdS)z Check if lvestats already running :return int|None: None - if no process found; pid - if some lvestats-server found rutf-8encodingrN) PIDFILEospathisfileopenintreadstripkillIOErrorOSError)fpids rget_process_pidr* s  27>>'** gsW555 !&&((..**++Q                  !   44  s6B(A B B(BB("B#B((B=<B=c$ d}dtdtjf fd }dtjf fd }dtjf fd }t id  t }|d }n*tj|}|d }td 5|D]6}tj |j r||j tj 7tj |d|\}} | D]} || j tj tj |d|\}} ||tj tjd| D]}||j tj dddn #1swxYwY|S)Nr_pid_signalc tj||dS#ttf$rd|YdSwxYw)z6Kill process by pid by sending a specific signal to itz%Process with pid '%d' is already deadN)rr%r'ProcessLookupErrorinfo)r,r-logs r kill_processz!stop_server..kill_process2sd D GD' " " " " "+, D D D HH.on_sigusr29 =uEEEEErc4d|dS)r5z*Signal 'SIGTERM' sent to child process: %sNr6r7s r on_terminatez!stop_server..on_terminate=r9r stop_server) caller_nameT) recursiveiX)timeout)r@callbackg333333?)r"signalSignalspsutilProcessrr*childrenr pid_existsr)SIGUSR2 wait_procsSIGTERMtimesleepSIGKILL) exit_coder2r8r;r)processchildschild_alivepr1s @rr<r</sDID3DDDDDDDF&.FFFFFFFFNFFFFFF  6 6 6C   C { .%%!!D!11  ) ) ) 8 8 < <$UY//< LFN;;;(ZPPPHAu 4 4 QUFN3333(\RRRHAu Lfn - - - Jt    8 8 UY7777 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 s CFF  F c$d}|t_dS)Nc"tj}tj||d|d}t j|t |||tj |||dS)N)filezUncaught exception z message='%s' :%s) ioStringIO tracebackprint_tbloggingerrorstrgetvalueclosesys__excepthook__)_type_ex_tracesiomsgs rhookz*setup_default_exception_hook..hookZs}kmm6,,,,>E>>> c3s88S\\^^444  5#v.....r)rb excepthook)ris rsetup_default_exception_hookrkYs///CNNNrcDddlm}||||||dS)Nr)main)lvestatsrm)cnf singleprocessplugins profiling_logtimes_rms rrun_mainrtes4IIc='=&AAAAArctjd}|dtjddS)Nsigterm_handlerzSIGTERM handler. Shutting Down.r)r] getLoggerr0r_exit)signumframer1s rrvrvjs7  - . .CHH .///HQKKKKKrc|d tj|}|dtj|}|ds|drt jddSdS#t$rU}d}|t|| |td|d|d|d}~wwxYw) z Check whether database connection can be established and db schema is ok. Raises exception if database is broken. :type cnf: dict :type log_: logging.Logger :raises: EnvironmentException zCheck for running SQL serverz SELECT 1; column_error table_errorr>z/Error occurred during connecting to SQL server: N) debugrmake_db_engineexecutevalidate_databaserbexit Exceptionfatalr_ exceptionr )rolog_engine validationexrhs r_check_db_connectionrps JJ-... ?(--{###/77 n % M)B  HQKKKKK   ???? 3r77 r"#5#5#5r#5#5#566B> ?sA!A<< CACCc|dt}|dkr*d}|dtd|ddS)z Check for possible misconfiguration if cpu speed is reported as 0 with /proc/cpuinfo and lve version <= 4. Raises exception, if so. :type log_: logging.Logger :raises: EnvironmentException zCheck for valid LVE versionzLVE version <= 4z!LVE version <= 4. Please, update.r~N)rrrr )r lve_versionrhs r_check_valid_lve_versionrsc JJ,---!##Ka  6777"<<<<000rc|dt}|r*d|d}||t|dS)z Check if another instance of lve-stats is already running. Raises exception, if so. :param log_: logging.Logger :raises: EnvironmentException z!Check for running lvestats-serverz)Lvestats-server already running with pid z . ExitingN)rr*warningr )rrcrhs r_check_running_processrsd JJ2333   B (G"GGG S"3''' ((rc t|t||t|nZ#t$rM}tj|jtjYd}~dSd}~wwxYwdS)z Checks whether system environment works fine. Return True if ok, False otherwise. :type cnf: dict :type log_: logging.Logger :rtype: bool NFT) rrrr rbstderrwriterflush)rorrs r_is_environment_okrst$$$S$''' &&&&  $$$ uuuuu 4s.1 BABBcd}t|tjttjd}t ||st jd|d|}|r>|d|tj dtj dtj tjtjt |}|r|d |t"rl|d t"t%t"d d 5}|t)|dddn #1swxYwY|dtj dtjdtjtjdtjd} t jt jt%t8d} t%t8d} t%t8d} tj| t jtj| t jtj| t j| dtj| tC|||||dS)Nc tjS#t$r%}t|jd|jd|d}~wwxYw)Nz [])rforkr' RuntimeErrorstrerrorerrno)es rrzdaemonize..forks\ C799  C C C!*:::::;; B Cs A ?A) console_levelserverr>zStarting serverzFirst fork, pid=%dg?rzSecond fork, pid=%dzWriting pid to file %swrrzChild daemon fork ok /rza+zStarting main() in daemon)"rr]CRITICALrkrwrrbrrrLrMrrxsetsidrCrKrvrr!rr_nicesetpgrpchdirumaskstdoutrrDEV_NULLdup2filenostdinr0rt) rorprqrrtimesrrr)pidfileprevious_umasksisoses r daemonizersCCC #W%56666 """  X & &D c4 ( (  JJ !!! $&&C  '--- 3  IKKK M&./222 $&&C  (#...  ( JJ/ 9 9 9gsW555 ( c#hh''' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )***  GBKKKJLLLHSMMMXa[[NJJ h  B h  B h  BGBIIKK))++,,,GBIIKK**,,---GBIIKK**,,---II)***H^ S--?????s#FF  F c |jdkr"tjtdS|jdkr2tt ||j|j|j|dS|jdkr|jrc|j r tj n tj }t|||tt||j|j|j|dSt ||j|j|j|dSdS)Nstoprestartstart)r file_level)actionrbrr<rrprqrrnodaemon debug_moder]DEBUGINFOrrkrt)ro_opts_timesrs r process_optsrs |v   " " #u*EM5;NPVWWWWW  > \*/*:L J #ZJ O O O O ( * * * S%-u}e>QSY Z Z Z Z Z c5. u?RTZ [ [ [ [ [ ! rc|js$tdtjdn|jad}|jrt |j}d} tj}n0#tj $r}| Yd}~nd}~wwxYw t|||dS#t$rK}tj t|tjdYd}~dSd}~wwxYw)Nz--pidfile should be specifiedr>)rprintrbrrrr"r read_config ConfigError log_and_exitrrr1r^r_)optsrcfgce lve_errors rrmrm s < -...  , E z DJ C ""   S$&&&&&  Y(((  s1A''B6BBB++ D5AC;;D)!rYr]rrCrbrLr[rElvestats.lib.commons.funcr lvestats.librrrrlvestats.lib.commons.logsetuprrrrr r*r<rkrtrvrrrrrrrmrrrs   111111))))))))FFFFFFFF777777  9   '''T   BBB  ???0111" ( ( ( (9@9@9@x \ \ \ r