Fm.ZddlZddlZddlmZddlmZmZmZmZddl Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZdd lmZdd lmZmZdd lmZdd lmZm Z m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'ddl(m)Z)dZ*dZ+dZ,dZ-dZ.Gdde/Z0Gdde/Z1GddeZ2dS)Nchoice)DictListOptionalTuple) sessionmaker)ClPwd) NotSupported)NoDBAccessData)ExternalProgramFailed)LveStatsPlugin) proctitle) get_chunks reboot_lock) HtpasswdFile) LiteSpeedLiteSpeedExceptionLiteSpeedInvalidCredentials)Snapshot)MySQLOperationalError SQLSnapshot get_lvepsincidenti, apache litespeedcBeZdZdZdZdZdZedZdZ dS)LitespeedHelperc~d|_d|_d|_d|_||_d|_dS)NFzlve-stats-admin) is_running state_changedforce_litespeedlogingenerate_random_passwordpassword broken_configselfs /builddir/build/BUILDROOT/lve-stats-4.3.2-1.el9.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/plugins/generic/snapshot_saver.py__init__zLitespeedHelper.__init__%sE" $' 5577 "cZtj}||jk|_||_dS)zCheck litespeed stateN)ris_litespeed_runningr#r$)r+litespeed_runnings r,check_litespeed_statez%LitespeedHelper.check_litespeed_state5s+%:<<.$/A+r.c: ttj}n7#t$r*d|_t jdtjYdSwxYw||j|j | t j ddS)NTz8Can't change the password. Please, check the file: '%s'zPassword successfully changed.) rr HTPASSWD_PATH ValueErrorr)loggingwarningupdater&r(savedebug)r+ passwdfiles r, dump_passwdzLitespeedHelper.dump_passwd;s %i&=>>JJ   !%D  OWYbYp q q q FF  $*dm444 677777s0AAct|j|j} ||S#t$r|wxYw)zGet user data proxy method)rr&r( get_user_datarr<)r+usernamers r,r>zLitespeedHelper.get_user_dataFs`dj$-88  **844 4*           s 1 Actjtjzdzdfdt dDS)Nz !@#$%^&*()c36K|]}tVdSNr).0_charss r, z;LitespeedHelper.generate_random_password..Ts)88ve}}888888r.)string ascii_lettersdigitsjoinrange)rFs@r,r'z(LitespeedHelper.generate_random_passwordPsF$v}4|Cww8888eBii888888r.cB|j}|jrdS|j|jS|S)z)Get what we must use: litespeed or apacheF)r#r)r%)r+r0s r,get_use_litespeedz!LitespeedHelper.get_use_litespeedVs4 $   (5  ! -' '##r.N) __name__ __module__ __qualname__r-r2r<r> staticmethodr'rOr.r,r!r!$sz### ,,, 8 8 899\9 $ $ $ $ $r.r!cReZdZdZiZdZeZdZdZ dZ dZ dZ dZ dS)SnapshotHelperNcpd|_d|_d|_d|_t jd|_dS)NF SnapshotSaver)_mysql_snapshots_enabledlitespeed_died_sql_snapshot_supported_no_operational_errorr6 getLoggerlogr*s r,r-zSnapshotHelper.__init__hs8(,%#'+$%)"$_55r.c||_dSrC)rY)r+mysql_snapshots_enableds r, set_configzSnapshotHelper.set_configos(?%%%r.cf |j|S#tj$rgcYSwxYwrC)clpwd get_namesr NoSuchUserException)r+lve_ids r,rdzSnapshotHelper.get_namesrsD :''// /(   III s 00cV|j|idi}g}g}||D]}||j|gz }|}|r} |||z }P#t $rV}|jstj d|d|_|tj |z }Yd}~d}~wwxYw|tj |z }|||fS)NTIDz3Error during getting information from Litespeed: %sT) psgetrdusername_dbquery_maprOr>rrZr6r7r Proctitle) r+rflitespeed_info processesqueriesurlsr? use_litespeedes r,get_snapshot_dataz SnapshotHelper.get_snapshot_dataysLGKK++//r:: v.. F FH t044XrBB BG*<<>>M FJN88BBBDD)JJJ.3(]_`aaa.2+I/11??IIIDDDDDD J +--;;HEEE'4''sB C9#A C44C9cHt|_g}|D]'}||t|z }(|||_ t |_dS#t$r'}|j d|Yd}~dSd}~wwxYw)Nz.An error occurred while getting processes listexc_info) r rcrdintretrieve_queriesrkrrir r^r7)r+ lve_id_list all_usernamesrfrrs r, invalidatezSnapshotHelper.invalidatesWW  ! 9 9F T^^CKK88 8MM  ! !- 0 0 ! [kkDGGG$ [ [ [ H  MXY  Z Z Z Z Z Z Z Z Z [sA00 B!:BB!c|jsiS |j5}||}|js!d|_|jdd|_|cdddS#1swxYwYn#t$r6}|jdvr#d|_|jd|Yd}~nMd}~wttf$r6}|jdvr#d|_|jd|Yd}~nd}~wwxYwiS)NTz)SQL snapshot is supported and operational)NTFz2An error occurred while getting MySQL process listruz3SQL snapshot is not supported by this control panel) rYsql_snaprjr[r^infor\rr7r r )r+ login_names db_requestsresultrrs r,rxzSnapshotHelper.retrieve_queriessz, I a +$553O37D0HMM"MNNN-1*                  % c c c)\99-2*  !U`a bbbn- a a a+|;;/4, S^_ ```  a  sGA1AA% A1%A))A1,A)-A11 C6;,B,,C6,C11C6)rPrQrRrkrircrr}r-rardrsr{rxrTr.r,rVrVbs B E{}}H666@@@(((* [ [ [r.rVceZdZdZeZeZdezZ dZ dZ dZ dZ dZdZd Zd Zd Zdd ZdZdZdZdZdZdS)rXrA<ci|_tjd|_d|_i|_i|_d|_d|_t|_ d|_ d|_ d|_ t|_dS)NrXTr)incidents_last_tsr6r]r^session_snapshots_dataincidents_cache first_runlast_runr!rmsnapshots_enabledr` compresslevelrV_helperr*s r,r-zSnapshotSaver.__init__sx!#$_55 !! -//!%'+$%'' r.c N|d|j|_t|d|j|_t|d|j|_dt|dt z|_|||j_ | d|dd  d k|_ |d d  d k|_ ttt|d d dd |_|j|j dS)N server_idperiod_between_incidentsmax_snapshots_per_incidentrsnapshots_per_minuteT)force_webserver_messagedisable_snapshotsfalsetruedisable_mysql_snapshotsrr )rjrrwrrDEFAULT_SNAPSHOTS_PER_MINUTE_period_get_webserver_optionrmr%setup_litespeedlowerrr`maxminrrra)r+configs r,razSnapshotSaver.set_configsVK@@(+FJJ7QSWSp,q,q(r(r%*-fjj9UW[Wv.w.w*x*x'S,BD`!a!abbb .2.H.H.P.P+ T:::!',?!I!I!O!O!Q!QU[!['-zz2KW'U'U'['[']']ag'g$ SOQ)G)G%H%H!!L!LaPP  <=====r.cZd|vr&|d}|dvrdS|dvrdSdS)z Check which webserver we must force to use: Apache or Litespeed :return: None if webserver autodetect False if apache should be used True if litespeed should be used r)on1T)off0FN)r)r+roptions r,rz#SnapshotSaver._get_webserver_optionsJ & K(..00F$$t%%utr.c|jttj|jktjdS)zBGenerate sqlalchemy Query instance for select incomplete incidentsN)rqueryrfilterrincident_end_timeis_r*s r,_incomplete_incidents_queryz)SnapshotSaver._incomplete_incidents_querysM|!!(++22  $. 0(2L2P2PQU2V2V   r.cH|tj|j|jz k}|tjtji}|j d||j dS)Nz%%i old incidents period was finalized) rrr dump_timenowrr8rr^r:rcommit)r+not_finalize_incidents_queryfinalized_numbs r,finalize_incidentsz SnapshotSaver.finalize_incidentss'+'G'G'I'I'P'P  D,I!I I( ( $6<XZbZl=mnn >OOO r.c fdtjD}|r jt t jjkt j dt j t|  D]}||j |_ jnX#t$rK}jjdt'|Yd}~nd}~wwxYwt| D]I}j| j|8#t,$rYDwxYwdSdS)NcBi|]\}}|jjz k||SrT)rr)rDuidtsr+s r, z4SnapshotSaver.save_old_incidents..s=   R2PTPX[_[xPxKxKxCKxKxKxr.z"Unable to save old incidents: (%s))listritemsrrrrrrrrin_keysallr Exceptionrollbackr^errorstrpoprKeyError)r+ old_incidents_incrrrs` r,save_old_incidentsz SnapshotSaver.save_old_incidentss    #'(>(D(D(F(F#G#G      &L&&x00V *dn< 266t<< ((m.@.@.B.B)C)CDD SUU E ED.;48-DD** E ##%%%%  M M M %%'''CSVVLLLLLLLL M M..0011  &**3///(,,S1111D+  "  s+CD E/$AE**E/0G  GGch|tj|k}|sYt||j|jdd}|j||j d||j|j|j |<|S)Nrrincident_start_timersnapshot_countrz>New incident-period for uid %s started; incident_start_time=%i) rrrrfirstrrraddr^r:r)r+rrs r, get_incidentzSnapshotSaver.get_incidents//11889LMMSSUU $(H. "& D L  T " " " HNNP    '+hs# r.c|jr?t|j|_|d|_dSdS)N)bindF)rr enginerrr*s r, init_sessionzSnapshotSaver.init_session(sO > #9  a%6 a _```%2> IJJJC HMM#       r.c|jsdS||t|di}|di}|j||||j |j z |j kr|j |_ t5| ||||t|D]\}}||| dddn #1swxYwYi|d<i|_dSdS)N lve_usager)rrrrrjrrr{cache_snapshotsrrrrr_insert_new_incidents_increment_snapshot_countrrr)r+lve_datalve_ids lve_faultsrfrs r,executezSnapshotSaver.executeUs%  F  x||K4499;;<<\\(B//  ((( Z((( 8dm #t| 3 3 HDM 5 5'')))**:666..z:::&*:+;+;+=+=&>&>55NFF$$VV44445  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 "$HX #%D  4 3sASQUQY]][[qv L   ! ! ! !  " "r.cfdt|D}|rj|dt|D} j|jdS#t$r3}j dt|Yd}~dSd}~wwxYwdS)Nc Ni|]!\}}|jv||jjddd"S)rNr)rrr)rDrfrEr+s r,rz7SnapshotSaver._insert_new_incidents..ysV    T111 '+x!^"#%) 211r.c3.K|]}tdi|VdS)NrTr)rDrs r,rGz6SnapshotSaver._insert_new_incidents..s0UU8++d++UUUUUUr.z Unable to save new incidents: %s) rrrr8valuesradd_allrrr^rr)r+r new_incidents insert_listrrs` r,rz#SnapshotSaver._insert_new_incidentsws      "*"2"2"4"455      &  ' ' 6 6 6UU]=Q=Q=S=S8T8TUUUK & $$[111 ##%%%%% K K KA3q66JJJJJJJJJ K & &s7B,, C)6(C$$C)ct|D]3}||jvr(|j||j|j|<4dSrC)rrrrrsrm)r+rrfs r,rzSnapshotSaver.cache_snapshotssc:??,,-- k kFT111/3|/M/MfVZVi/j/j$V, k kr.c |d}|j|iggf\}}}t||j}|dt |j|j|d||||d} ||n>#t$r1} |j t| Yd} ~ nd} ~ wwxYw|dxxdz cc<dS)Nrr)rrrr snap_procsnap_sql snap_http snap_faultsrr) rrjrrrwrrr9IOErrorr^rr) r+ _incidentrrfrnrorp snapshot_datarrs r,rzSnapshotSaver.save_snapshots5!#'#7#;#;FRRL#Q#Q 7DY(:;; U#TX#,-B#C"!    # NN4  # # # HNN3q66 " " " " " " " " #"###q(#####s/B C'B;;CN)F)rPrQrRr DEFAULT_PERIOD_BETWEEN_INCIDENTSr"DEFAULT_MAX_SNAPSHOTS_PER_INCIDENTrrrr-rarrrrrrrrrrrrrrTr.r,rXrXsI?!C00G ( ( ( > > >"   :(### SSS. &&&. " " "&&&4kkk )))))r.rX)3r6rIrandomrtypingrrrrsqlalchemy.orm.session sqlalchemysqlalchemy.ormr clcommon.clpwdr clcommon.cpapir clcommon.cpapi.cpapiexceptionsr clcommon.utilsr lvestats.core.pluginrlvestats.lib.commonsrlvestats.lib.commons.funcrrlvestats.lib.commons.htpasswdrlvestats.lib.commons.litespeedrrrlvestats.lib.snapshotrlvestats.lib.ustaterrrlvestats.orm.incidentrrrrrrobjectr!rVrXrTr.r,rs ............'''''' ''''''999999000000//////******========666666eeeeeeeeee******MMMMMMMMMM******#&  %'"   ;$;$;$;$;$f;$;$;$|OOOOOVOOOdv)v)v)v)v)Nv)v)v)v)v)r.