H:ju#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-5.0.4-1.el8.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-8)encodingrN) 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)r4z*Signal 'SIGTERM' sent to child process: %sNr5r6s r on_terminatez!stop_server..on_terminate=r8r stop_server) caller_nameT) recursiveiX)timeout)r?callbackg333333?)r!signalSignalspsutilProcessrr)childrenr pid_existsr(SIGUSR2 wait_procsSIGTERMtimesleepSIGKILL) exit_coder1r7r:r(processchildschild_alivepr0s @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)ra excepthook)rhs rsetup_default_exception_hookrjYs///CNNNrcDddlm}||||||dS)Nr)main)lvestatsrl)cnf singleprocessplugins profiling_logtimes_rls rrun_mainrses4IIc='=&AAAAArctjd}|dtjddS)Nsigterm_handlerzSIGTERM handler. Shutting Down.r)r\ getLoggerr/r_exit)signumframer0s rrurujs7  - . .CHH .///HQKKKKKrc|d tj|}|dtj||tj|}|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_engineexecutenormalize_sqlite_journal_modevalidate_databaseraexit Exceptionfatalr^ exceptionr )rnlog_engine validationexrgs r_check_db_connectionrps  JJ-...?(--{### .vt<<</77 n % M)B  HQKKKKK   ???? 3r77 r"#5#5#5r#5#5#566B> ?sA6B C0AC++C0c|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)r~rrr )r lve_versionrgs 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)r~r)warningr )rrcrgs 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 rastderrwriterflush)rnrrs r_is_environment_okrst$$$S$''' &&&&  $$$ uuuuu 4s.1 BABBcd}t|tjttjd}t ||st jd|d|}|r>|d|tj dtj dtj tjtjt |}|r|d |t"r|d t"tjt"tjtjztjztjzd } tj|t1|d tj|n#tj|wxYw|d tj dtjdtjtjdtjd} t j t j! t%tDd} t%tDd} t%tDd} tj#| $t j%$tj#| $t j$tj#| $t j!$|&dtj| tO|||||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 %sirzChild daemon fork ok /rza+zStarting main() in daemon)(rr\CRITICALrjrvrrarr~rKrLrrwsetsidrBrJrurr O_WRONLYO_CREATO_TRUNC O_NOFOLLOWrr^encoder`nicesetpgrpchdirumaskstdoutrrDEV_NULLdup2filenostdinr/rs) rnrorprqtimesrrr(fdprevious_umasksisoses r daemonizersCCC #W%56666 """  X & &D c4 ( (  JJ !!! $&&C  '--- 3  IKKK M&./222 $&&C  (#...   JJ/ 9 9 9"+ ":RZ"G"-"WY^__B SXX__W55666   )***  GBKKKJLLLHSMMMXa[[NJJ h  B h  B h  BGBIIKK))++,,,GBIIKK**,,---GBIIKK**,,---II)***H^ S--?????s 5GG-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)actionrarr;rrorprqnodaemon debug_moder\DEBUGINFOrrjrs)rn_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=)pidfileprintrarrrr!r read_config ConfigError log_and_exitrrr0r]r^)optsrcfgce lve_errors rrlrls < -...  , E z DJ C ""   S$&&&&&  Y(((  s1A''B6BBB++ D5AC;;D)!rXr\rrBrarKrZrDlvestats.lib.commons.funcr lvestats.librrrrlvestats.lib.commons.logsetuprrrrr r)r;rjrsrurrrrrrrlrrrs   111111))))))))FFFFFFFF777777  9   '''T   BBB  ???8111" ( ( ( (<@<@<@~ \ \ \ r