|9eddlmZddlmZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlmZmZddlmZmZddlmZddlmZdd lmZdd lmZdd l m!Z!dd l"m#Z#ddl$Z$ddl%Z&ddl'Z'dd l(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2m3Z3ddl4m5Z5ddl6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?ddl@mAZAmBZBmCZCddlDmEZEddlFmGZGddlHmIZIddlJmKZKmLZLmMZMddlNmOZOmPZPddlQmRZRmSZSddlTmUZUddlVmWZWddlXmYZYddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbddlcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtdd lumvZvdd!lwmxZxmyZymzZzdd"l{m|Z|dd#l}m~Zdd$lmZmZdd%lmZdd&lmZ dd'lmZmZmZmZmZmZdd(lmZdd)lmZdd#lm~Zdd*lmZn#e$renZenZenZenZenZenZenZdZdZdZYnwxYwd+Ze jd,Zd-Zd.Zd/Zd0Zd1Zd2Zd3Zd4ZGd5d6eZd7ed8efd9ZGd:d;eZd<ZdS)=)absolute_import)divisionN)range) lru_cachepartial)Counter defaultdict)groupby iteritems) attrgetter) cpu_count)getfqdn)Path)cpapi)Feature) MySQLGovernor)is_cl_solo_editionis_cl_shared_edition CLEditions is_ubuntuis_secureboot_enabled)is_panel_feature_supported) get_rhn_systemid_value run_commandExternalProgramFailedis_testing_enabled_repois_litespeed_runningget_cl_version get_virt_typegrepis_nginx_running) find_wp_pathsget_wp_cache_plugin get_wp_paths_with_enabled_module)ACCELERATE_WP_INSTALLED_FROM_CM)client_activation_data) SysCtlConf)cagefs_statistics_configdb_governor_libclconfig_utils)print_dictionaryreplace_params)LimitsDataStorageDEFAULTS) EMPTY_LIMITS)LvpMap)parse_cloudlinux_summary_opts)DictOptionalCallableUnionListAnyTupleAnyStr)is_statistic_enabledis_statistic_rpm_enabled set_statistic_collection_enabled$set_statistic_rpm_collection_enabled$write_statistics_send_status_to_file SummaryStatusis_python_selector_installedis_ruby_selector_installedis_nodejs_selector_installedis_php_selector_installeddummy_none_function get_packages_with_lve_extensionsis_sending_process_running$get_statistics_send_status_from_fileget_client_data_from_jwt_tokenget_cl_plus_sender_statusis_active_cloudlinux_license)get_rpm_packages_info)get_cpu_metricsget_memory_metrics NotSupported) ALL_MODULES) PKG_VERSION) CONFIG_PATH_read_config_file)is_email_notification_enabled)get_hidepid_typing_from_mounts)get_versions_statisticsget_native_version_safeget_php_selector_usageiter_server_applicationsget_default_php_versionget_mode_of_php_selector)CloudlinuxSelectorLib)get_default_version) PKG_RELEASEz/var/log/cloudlinux-summary.logzcloudlinux-summaryunknown installed not_installednot_initialized not_selectedenableddisabled-42c JeZdZdZddddgdgddiddiddigd Zd dZd dZd S) StatisticsDictz> Special class to store all metrics before sending it rggE) strintfloatstr_listint_listint_dict float_dictstr_dict rpm_stat_listTc|j|} |}n7#t$r*}|rtd|||}Yd}~nd}~wwxYw|S)a Method for catching any exceptions while calling passed function, logging them and return default result in case if exception is present or return formatted result in case if exception is absent :param log_exception: True - exception will been logged, False - exception won't been logged This flag must be used if param `func` is function, which processes intermediate value, which can equal to -42 (it means that exception was logged in previous moment) and doesn't call external functions or doesn't process another values. In other cases log_exception should be equal True, because in calling of external function or processing of another value can be raised exception, which should be logged. Example: functions `lambda: intermediate_value[0].property` or [len(value) for value intermediate_value.values()] should be used with log_exception equal False, because they only process intermediate value. But function: def some_function(intermediate_value): result = external_function() return len(intermediate_value), result should be used with log_exception equal True z%s. Exception: "%s"N)DEFAULT_RESULTS Exception app_logger exception)selffunctype_of_result log_message log_exceptiondefault_resultresulterrs H/opt/cloudlinux/venv/lib64/python3.11/site-packages/clsummary/summary.pyrun_safe_or_log_errorsz%StatisticsDict.run_safe_or_log_errorss.-n= $TVVFF $ $ $ $$) $FFFFFF $ s  A A  AcB|||||}|||<dS)z Method which call `run_safe_or_log_errors` and save result from it :param log_exception: True - exception will been logged, False - exception won't been logged See method `run_safe_or_log_errors` r}N)r)ryrzr{name_of_metricr|r}rs r format_metriczStatisticsDict.format_metrics<,,   ' -   &^N)T)__name__ __module__ __qualname____doc__rurrrrriris GE 3  5  5 #O($$$$L&&&&&&rri site_dictreturncnttd|dS)zB Checks if wordpress site has at least one enabled module c|dS)Nrer)modules rz*site_has_enabled_modules..s 6),rmodules)anymapvalues)rs rsite_has_enabled_modulesrs=  , , i ' ' ) )    rc eZdZdZdZejgdeje j eje j eje j gZ dZdZdZdZedZed Zed Zed Zed Zed ZdZedZdZdZedZedZedZ dZ!dZ"edZ#dZ$eddZ%dZ&edZ'edZ(ede)e*e*fde+fd Z,d!Z-d"Z.ed#e/d$e0ddfd%Z1d&e)e0e/fd'e0d(e+ddfd)Z2d*Z3ed+Z4d,Z5d-Z6ed.Z7d/Z8dd0Z9ed1Z:d2Z;ed3Zd6Z?ed7Z@d8ZAd9ZBd:ZCd;ZDd<ZEd=ZFd>ZGd?ZHd@ZIedAeJdBeKfdCZLdeMeKeNeKeNe)eJe/fffdDZOdEeJdFeJdGe)eJeJfde)eJePeKeJfffdHZQdIeJdeJfdJZReeSdKdLZTdMZUdNZVedOZWedPZXedQZYedRZZedSZ[edTZ\dUZ]edVZ^edWZ_dXZ`edYZaedZZbd[Zced\Zdd]Zeed^Zfd_Zged`ZhedaZiedbZjede+fdcZkede+fddZlede/fdeZmedeJfdfZnedgZodhZpdiZqdje0dere/fdkZsdlZtdmZudnZvdoZwede)fdpZxdqZydrZzdeMe/e/e/ffdsZ{edeMe/eJffdtZ|duZ}dvZ~dwZdxZdyZdzZed{Zd|Zed}Zed~ZedZdZdZdZeddZeddZedZedZedZedZedZedZedZedeJde/fdZedZdZedZdS)CloudlinuxSummaryz/var/lve/dashboard_certificatez/etc/cl_plus/.disabled)pythonrubynodejsz-https://stat-api.cloudlinux.com/api/clos-statz-https://stat-api.cloudlinux.com/api/rpm-statsz6https://repo.cloudlinux.com/static/cl-settings-v1.jsonct|_d|_t|_d|_d|_||_d|_ t|_ dSN) dict_opts_security_tokenri statistics_lvpmap _system_id_is_process_not_limitedis_process_not_limitedpackages_by_lenr(sysctlrys r__init__zCloudlinuxSummary.__init__s[VV #(** &*&B&B&D&D## ll rcttjd}ttjd}| o| S)zm Return true if process is running outside LVE or it's not running by utility `nice` RUNNING_BY_NICERUNNING_IN_LVE)boolosenvironget)is_running_by_niceis_running_in_lves rrz)CloudlinuxSummary._is_process_not_limited sP ""*..1B"C"CDD 0@!A!ABB%%?.?*??rcD|jt|_|jS)z. Load lvpmap only when needed )r _get_lvpmaprs rlvpmapzCloudlinuxSummary.lvpmaps < &==DL|rcF|jtd|_|jS)N system_id)rrrs rrzCloudlinuxSummary.system_id!s# ? "4[AADOrc&trdndS)Nubuntu rhel_like)rrrr _get_platformzCloudlinuxSummary._get_platform)s$;;7xxK7rc:trtntSr)rENABLEDDISABLEDrrr_detect_securebootz$CloudlinuxSummary._detect_secureboot-s/11?wwx?rctjtjzdfdt dD}|S)Nc3@K|]}tjVdSr)randomchoice).0_range_for_random_choices r z=CloudlinuxSummary._generate_security_token..4s. [ [A/F!G!G [ [ [ [ [ [r@)string ascii_lettersdigitsjoinr)security_tokenrs @r_generate_security_tokenz*CloudlinuxSummary._generate_security_token1sI"("6"F [ [ [ [QVWYQZQZ [ [ [[[rci}|j3d}t||d|id|jz}t||j|jd}d} tj|j|d}n\#tj $rJ}t|}t||d|iYd}~nd}~wwxYw|j sQd |j |j}t||d|itd |d}t!|dt"r-|d|td n#t(t*f$r6d }t||d|iYnct,$rW}td t||j|dd t0ziYd}~nd}~wwxYw|S) NzSecurity token is emptyrz!Getting statistics from server %s)rr<)paramstimeout*Server answer is: HTTP code {}; Reason: {}z!Received response from the serverz,SUCCESS: received statistics from the serverz Can't parse api response to jsonz=Invalid json response from server, field %s not found in "%s"z1Invalid response from server. See %s for details.)rrwerror_error_and_exit SUMMARY_URLinforrequestsrRequestExceptionrkokformat status_codereasonjson isinstancerupdate_get_smart_advice_statistics TypeError ValueErrorKeyErrortextLOG_FILE)ry stat_datamessagerresponsees r_get_remote_dataz"CloudlinuxSummary._get_remote_data7s   &/G   W % % %  (G!4 5 5 558HH   "1   6|D$4VRPPPHH( 6 6 6!ffG   W % % %  (G!4 5 5 5 5 5 5 5 5 6 { 6BII$G OOG $ $ $  (G!4 5 5 5;<<< L 1I)H-t44 P(#**4+L+L+N+NOOO OOJ K K K K:& 6 6 68G   W % % %  (G!4 5 5 5 5 5 = = =   /03A  G G G  02:;"< = = = = = = = =  =s:3BC)AC$$C)A"GAJ" J+A I==Jc |j|jStj|jr||_n2|}||r|nd|_|jSr)rrpathisfileDASHBOARD_CERTIFICATE_read_token_from_filer_write_token_to_file)rytokens rrz CloudlinuxSummary.security_tokenns   +' ' 7>>$4 5 5 W#'#=#=#?#?D 1133E,0,E,Ee,L,L#V55RVD ##rcN t|jd5}||dddn #1swxYwYtj|jddS#t t f$r3}tdt|Yd}~dSd}~wwxYw)z Write security token to file and return success/fail status :param token: generated security token :return: T/F status wNiTz,Error while writing secure token to file: %sF) openrwriterchmodIOErrorOSErrorrwrrk)ryrfrs rrz&CloudlinuxSummary._write_token_to_filezs  d0#66 !                HT/ 7 7 74!      KSQRVV T T T55555 s4A 9 A =A =A B$1(BB$c> t|j5}|pdcdddS#1swxYwYdS#tt f$r3}t dt|Yd}~dSd}~wwxYw)Nz.Error while reading file with secure token: %s) rrreadstriprrrwrrk)ryrrs rrz'CloudlinuxSummary._read_token_from_files d011 0Qvvxx~~''/4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0!      MsSTvv V V V44444 s9A(A  A AAAAB)(BBcFtjtjdddS)z Detect old LVE limits integration presence according to https://docs.cloudlinux.com/index.html?lve_limits_with_packages.html :return: True/False - present/absent CUSTOM_GETPACKAGE_SCRIPT=F) file_name param_name separator default_val)detectget_boolean_paramCL_CONFIG_FILErrr_detect_old_lve_integrationz-CloudlinuxSummary._detect_old_lve_integrations-'+1     rc@tjdS)zO Detects presence/absence of lsapi :return: True/False /usr/bin/switch_mod_lsapirrexistsrrr_is_lsapi_presentz#CloudlinuxSummary._is_lsapi_presents w~~9:::rc8|dkrtstSnY|dkrtrtntS|dkrt stSn|dkrt stSt |}|tS|dvr@ |drtntS#t$r tcYSwxYw|dkr"| rtntStd |) zP Get selector status for nodejs, python, ruby and php selectors rrrphpN)rrselector_enabledzUnknown interpreter: {}) rB NOT_INSTALLEDrCrrDrEr]get_selector_statusrrphp_selector_is_disabledrr) interpreterlibs r_get_status_of_selectorz)CloudlinuxSummary._get_status_of_selectors> ( " "/11 %$$ % F " "8::M77 M H $ $/11 %$$ % E ! !*C*E*E ! #K00 ; . . . %"%"9"9";";>+ , , 4"2:>>2B#C#CDD  4,,T->??  5 5$_5oFMO,Y7]D'A C99C>c"t|dS)Nrl) hash_servers r _to_numberzCloudlinuxSummary._to_numbers;###rc|jdStj|jdd}||d|zzdkS)NTr)rhashlibsha256encode hexdigestr))ryurl_numr(s rr!zCloudlinuxSummary._match_serversa > !4nT^%:%:%<%<==GGII#2#N  ,,qG|;AArrNcd}|r9ts/|dz}tjd|rt)dSdSdSdS)zC Wait for running background process of cl-summary 2r2g?N)rHtimesleep)retriess r_wait_for_background_processz.CloudlinuxSummary._wait_for_background_processsu  8::  qLG JsOOO 8::         rc* |jds |jdrBt|jdtjdd}t|ddS|jds |jdrBt |jdtjdd}t|ddS|jdrkt rd nd }tj|dd }|d tit|dtd |j dr7| }| |t|j drts3|j ds|ddid ||j dr=||j|jdt&dnt|jddS|sIt,jdtjd}t1||ddid |j dr|j dsWtsIt,jdtjd}t1||ddid |jkd}t&|t,jdt6ztjd}t1||d|i|j d rt rtjd dd }not1t,jtjdd!t;jd"dd#$|tjdd}t|dtd |jdr|j rHt d%r8tjd dd }t|dtd dSt1t,jtjdd!dSdS)&Nenabledisablesuccess timestamprT enable-rpm disable-rpmstatus collectingready)r=r@rsending_statusr get-remote)datar< rpm-packagesrrz\Sending RPM statistics is disabled by admin. Use --force-collect to ignore admin`s settings.) error_code--sendFsummaryurl save_statuszRPM statistics sentzkStatistics collection is disabled globally. Please, try again later or contact support if it happens again.)rrr=zYCollecting statistics is disabled globally. Use --force-collect to ignore global settingsz_Statistics collection is disabled by admin. Run `cloudlinux-summary enable` and then try again.zXSending statistics is disabled by admin. Use --force-collect to ignore admin`s settings.z8Statistics was not sent, because security token is emptyzWe are not able to collect statistics because we are not able to make a security token. Check %s for details or contact support.--async)rr=rz9/usr/sbin/cloudlinux-summary --send --json &> /dev/null & /bin/bash)shell executable) acquire_lock)!rr>r4r,r?rHrrIexitrr_print_result_and_exitr<r=r_get_rpm_packages_summary _send_statistics_and_save_statusrRPM_PACKAGES_URLrwrr$rAFAILEDr@rrr IN_PROGRESS subprocessrunr7r)ryrEr@r status_dictrs r&_actions_before_run_process_as_limitedz8CloudlinuxSummary._actions_before_run_process_as_limitedso :h  4:i#8  ,TZ-A B B B!% BBD T4 ( ( ( F :l # tz-'@  0L1I J J J!% BBD T4 ( ( ( F :h  %?%A%AN\\wF!%)TTD KK "F"H"H    T4 ( ( ( GGG :>>, ' ' b**,,F  ' 'VJ^J`J` ' a a a :>>. ) ) +-- 3djnnEV6W6W 3$$h1b&c01%333  * * , , ,z~~h'' 855 O- %6  56666 $777 F**,, /%2%9&g(, 55K 1 = = =  (-\"],- ! / / / :>>( # # ::>>"344 3=Q=S=S 3)6)=*_,0IKK99 5[AAA$$h1b&c01%333"*T  ))))6)=*KMU*V-1IKK 99 5[AAA$$h%8999 :>>) $ $ )++ G&*Y[[LT]^^ 5"/";%)Y[["&Z%)kCCCC11333%)Y[[IFF T4 ( ( ( GGG :h  * /IW[/\/\/\  &*Y[[LT]^^ t,,,Q5"/";%)Y[["&  rc tjddd}tj|5}|dt |gt jddt |dg|zttj d tj tj   cd d d S#1swxYwYd S) z Run same command in lve and set environ RUNNING_IN_LVE=1 in order to check it in child process. :return: ri@)ls_cpuls_cpus ls_memory_phy--lve-idz/bin/lve_suwrapper-n/usr/sbin/cloudlinux-summary1)rCPU_DATAenvN) lvectllibmake_liblve_settings temporary_lveextendrkrYcallrrrrdumps CPUINFO_DATA)argsrlve_ids r_run_self_in_lvez"CloudlinuxSummary._run_self_in_lves1*     $X . . & KKS[[1 2 2 2?%tS[[/1378Js"Z (>?? AAA                     sBB==CCcjtjgd|zttjdS)z Run same command using utility `nice` and set environ RUNNING_BY_NICE=1 in order to check it in child process. :return: )z /usr/bin/nicerc19rdre)rrg)rYrmrrr)rps r_run_self_by_nicez#CloudlinuxSummary._run_self_by_nicesN - - -/3 4 #    roptsc|tfddDrdStfddDrdSdS)zK Check that passed command should run as unlimited process c3(K|] }|V dSrrroptionrvs rrzECloudlinuxSummary._should_run_as_unlimited_process..s7  tF|      r)rFr@rDr9r:r>r?Tc3(K|] }|V dSrrrys rrzECloudlinuxSummary._should_run_as_unlimited_process..s7  tF|      r)rHrM--jsonrF)r)rvs`r _should_run_as_unlimited_processz2CloudlinuxSummary._should_run_as_unlimited_processs     +      4     +        5urc|||_|jr|||jrt ddSt tjs&| |}t |dS | |}t |dS#tj $r^}d|z}t|tjt }||dt dYd}~dSd}~wwxYw||jrXd}t%j|d}t&||jt+|dt d |dS) Nrz$failed to run task in lve, error: %sT)exc_infoz|You shouldn't use env var "RUNNING_IN_LVE" or "RUNNING_BY_NICE" for run of any command except collection of main statistics.r<)extrar2) _parse_argsrrr\r}rRrrLVErurrri PyLveErrorprintlogging getLoggerrrxr4rwrr,run_get_summary)ryargvrcr error_msglogerr_msgrEs rrZzCloudlinuxSummary.runs%%d++  && #  7 7 9 9 944TZ@@ Q/ << ++D11R..t44BHHHHH + F JI)$$$!+H55CMM)dM;;;HHHHHHHHH 44TZ@@ 0 "&%    ;;; t,,,Q  " " " " "s"$CD5AD00D5ctj}|tj|z }||jd<|jdr0|jt |j|ddd|jdr>||j|j dt d dSt|jddS) Ncl_summary_execution_timerbrkcl_summary_max_mem_usedz,Can't get memory usage by cloudlinux-summaryrHTrIzMain statistics sent) r4 _get_summaryrrrr_get_max_memoryrrUrrwrr,)ry start_time running_times rrz!CloudlinuxSummary.run_get_summarysY[[   j0 7C34 :j !  O ) ),l;;)?     :>>( # # 4  1 1$  2    OO2 3 3 3 3 3 T_d 3 3 3 3 3rr=summary_resultcvtj|d}|dkr||d<tj|d<t|dS)z@ Save status of sending statistics to json file rr=r;rrN)rASUCCESSrWr@)r=rr[s r _save_statuszCloudlinuxSummary._save_statussJ "/!6YOO Y & &$2K !$1$8K !,[99999rrJrKrLcttj}||d<|||}||d}t|d|r|||dSdS)zH Send statistics data to server and save status to file r=)rKrTN)rlr4_send_statisticsr,r)ryrJrKrLr=s_resultrs rrUz2CloudlinuxSummary._send_statistics_and_save_statuss $$ ( ((c(::$9==&&&            rc8|dz }|dkrdSdddt|jdddd d tt j|g} t |d \}}}n3#t$r&}t d |Yd}~dSd}~wwxYw|dkrLtj |} td|dDS#ttf$rYdSwxYwtd||dS)Nrr2z/usr/sbin/lveinfor|z--idrbz--show-columnsmPMemz--periodz{}mTreturn_full_outputz Unable to run lveinfo, error: %srcg|] }|d S)rr)rxs r z5CloudlinuxSummary._get_max_memory..1sDDD1AgJDDDrrEz-lveinfo failed with exit code: %i, output: %s)rkrrrlmathceilrrrwwarningrloadsmaxrrr) ryr time_minutescmdrjson_strrr parsed_datas rrz!CloudlinuxSummary._get_max_memory sY#b( !  4"Hs4:j1225<<DIl,C,C(D(DEEG )#$GGGOB!!$      A1 E E E44444  77*X..K DD F0CDDDEEE)   tt 6798 E E Ets*#A99 B)B$$B)C&&C;:C;cd} d|z}t|tjd}t dD]P} tj||d}n7#tj$r#}|}tjd|zYd}~Id}~wwxYw||j d krtd n:d |j |j }t|nE#tj$r3}t|}t |Yd}~nd}~wwxYw|S) z Sends statistics to server :param data: Statistics data dict :return: string - message for JSON 'result' key r;zSending statictics to server %sz*Unknown exception while sending statisticsr)rrNzSending statictics OKr)rwrrrrpostConnectionErrorr4r5rrrrkr)rErK out_messager expected_errirrs rrz"CloudlinuxSummary._send_statistics8s}  *7#=G OOG $ $ $#4<L1XX # #'}StRHHHH E  /'''#&LJqAv&&&&&&&&' #"#s** 78888JQQ(O  ,,,( * * *c((K   [ ) ) ) ) ) ) ) ) *sCAC: A" C:"B1B C:BA%C::D< )D77D<cdtjd}||j||SNr2)versionr=)r4_prepare_cl_normal_statisticsrrryrs rrzCloudlinuxSummary._get_summary`sI&& **,,, v&&& rcdtjd}||j||Sr)r4'_fill_dict_with_rpm_packages_statisticsrrrs rrTz+CloudlinuxSummary._get_rpm_packages_summaryhsI&& 44666 v&&& rc@tjtjS)z/ Get version of control panel )rgetCP CP_VERSIONrrr_get_panel_versionz$CloudlinuxSummary._get_panel_versionps    rc|jtjdd}|H||jd<|jdddd|jddd d dSt |jd <dS) zN Fill dict with statistics by statistics about MySQL governor rkzCan't get MySQL governor modeNmysql_governor_modecBtSr)rget_governor_versionrrrrzCCloudlinuxSummary._fill_mysql_governor_statistics..s <<>>rmysql_governor_versionz Can't get MySQL governor versioncNtdSNr)rget_governor_statusrrrrzCCloudlinuxSummary._fill_mysql_governor_statistics..s ;;==a@rmysql_governor_statuszCan't get MySQL governor status)rrr*get_gov_mode_operationrr)rymysql_gov_modes r_fill_mysql_governor_statisticsz1CloudlinuxSummary._fill_mysql_governor_statisticszs ??  2  ,    %5CDO1 2 O ) )>>(3     O ) )@@'2      8EDO3 4 4 4rc"|jtjddd|jdddd|j|jddd |j|jdd d |jt d d d|jdd ddtjtjkr$|j|j d dddSdS)zM Fill dict with statistics by statistics about control panel rkcontrol_panel_namezCan't get control panel namec`dtjDS)Ncg|] \}}|| Srr)rname is_supporteds rrzVCloudlinuxSummary._fill_control_panel_statistics....s#nnn0dLamnTnnnr)rget_supported_cl_featuresitemsrrrrzBCloudlinuxSummary._fill_control_panel_statistics..s*nnE4S4U4U4[4[4]4]nnnrrnsupported_cl_featuresz8Can't get list of supported cl features by control panelcontrol_panel_versionzCan't get control panel versioncontrol_panel_apachezCan't get control panel apacherl nginx_runningzCan't get control panel nginxcBttjSr)lenrcpusersrrrrzBCloudlinuxSummary._fill_control_panel_statistics..sC ((r users_totalzCan't get amount of usersinstalled_via_plesk_extz8Can't determine if CL was installed from Plesk ExtensionN) rrr getCPNamer_get_control_panel_apacher"r PLESK_NAME_is_installed_via_plesk_extrs r_fill_control_panel_statisticsz0CloudlinuxSummary._fill_control_panel_statisticssU %%    +    %% n n  # G    %%  #  # .     %%  *  " -    %%    ,    %% ( (   (       !1 1 1 O ) )0)K       2 1rcPd}d}tj|rd}|S)aV cldeploy-plesk-ext.log is always created by cldeploy-precheck when it downloads cldeploy script, if it exists it means there was an attempt to launch a cldeploy from Plesk Extension. Since this function is in package lve-utils, which depends from lve, it means that current os is CloudLinux, therefore conversion was successful. Possible false positives: - if there was failed attempt to convert os from Plesk Ext, and then it was successfully converted after manual run of cldeploy, it will be considered as CLOS installed via Plesk extension - if user has CL already installed and goes to CLOS Plesk Ext and tries to run conversion from there Possible false negatives: - if /var/log/cldeploy-plesk-ext.log was deleted or renamed/archived (e.g. via logrotate) Fz/var/log/cldeploy-plesk-ext.logTr )rext_logs rrz-CloudlinuxSummary._is_installed_via_plesk_exts.3 7>>' " " F rctr/tjrd}nDtjrd}n.d}n+|jddkrtjrdnd}nd}|S) z Wrapper to retrieve control panel Apache version: EA3 or EA4 for cPanel, native otherwise :return: EA3|EA4|native litespeed openlitespeedunknown_litespeedrcPanelEA4EA3native)rrdetect_enterprise_litespeeddetect_open_litespeedris_ea4rs rrz+CloudlinuxSummary._get_control_panel_apaches~ ! ! 133 -$-// -(- _1 2h > >$moo8UU5FFF rctj}||Stjttjt dt dti}||dS)z Wrapper to convert internal values from cagefs_statistics_config.get_cagefs_status function to values for statistics :return: NEnabledDisabledUnknown) r)get_cagefs_statusCAGEFS_STATUS_NOT_INSTALLEDrCAGEFS_STATUS_NOT_INITIALIZEDNOT_INITIALIZEDrrr) cagefs_statuscagefs_status_maps r_cagefs_status_wrapperz(CloudlinuxSummary._cagefs_status_wrappersX1BDD   $ @- $ BO w    !$$]I>>>rc|j|jddd|jdttfvr d|jd<n'|jt jddd|jtt jdddd |jtt jd dd d dS) zF Fill dict with statistics by statistics about CageFS rkrzCan't get CageFS statusNcagefs_user_modezCan't get CageFS user modeTcagefs_enabled_quantityz/Can't get quantity of users with enabled CageFSFcagefs_disabled_quantityz0Can't get quantity of users with disabled CageFS) rrrrrr)get_cagefs_user_moder get_quantityrs r_fill_cagefs_statisticsz)CloudlinuxSummary._fill_cagefs_statisticss %%  '   &    ?? + /O O O26DO. / / O ) )(="-     %% ,94 @ @  % >    %% ,95 A A  & ?      rcD td|jD}n#tj$rYdSwxYwt |jjtfd| DS)zJ Get amount of end-users which belong to active resellers c3,K|]\}}|dk |VdSrNrrrlvps rrzLCloudlinuxSummary._get_amount_of_endusers_under_resellers..)2YY3QTWXQXQXQXQXQXQXYYrNc3 K|]}|vV dSrr)rlvp_idenabled_lvp_ids rrzLCloudlinuxSummary._get_amount_of_endusers_under_resellers..-s(OO6^+OOOOOOr) rr lve_lvp_pairsrrPsetname_mapid_listsumelements)ry lvp_countr s @r'_get_amount_of_endusers_under_resellersz9CloudlinuxSummary._get_amount_of_endusers_under_resellers#s  YY$+2K2K2M2MYYYYYII!   44 T[199;;<<OOOO):L:L:N:NOOOOOOs04AAc td|jD}n#tj$rYdSwxYwt |S)z/ Get total amount of end-users c3,K|]\}}|dk |VdSrrrs rrzBCloudlinuxSummary._get_total_amount_of_endusers..5rrN)rrr rrPrr)ryrs r_get_total_amount_of_endusersz/CloudlinuxSummary._get_total_amount_of_endusers/sr  YY$+2K2K2M2MYYYYYII!   44 9##%%&&&s03AAcp ttjS#tj$rYdSwxYw)z) Get amount of resellers N)rr resellersrPrrr_get_amount_of_resellersz*CloudlinuxSummary._get_amount_of_resellers:sB  u(()) )!    DD s "55cjtjjdddjtjjdddjtjjdddjfddd d jjdd d jjdd djj dddjfddddjdr jdddddSdjd<djd <djd<dS)zP Fill dict with statistics by varied statistics about resellers rl reseller_limits_supported_kernelz8Can't detect status of support reseller limits by kernel'reseller_limits_supported_control_panelz?Can't detect status of support reseller limits by control panelreseller_limits_enabledz1Can't detect status of support of reseller limitsc8dSr#get_users_and_resellers_with_faultsrsrrz>CloudlinuxSummary._fill_resellers_statistics..`D<<>>qArusers_with_faultsz6Can't get amount of users with faults for the past 24hresellers_totalz#Can't get total amount of resellers(resellers_endusers_under_reseller_limitsz>Can't get amount of end-users which belong to active resellersresellers_endusers_totalz#Can't get total amount of end-usersc8dSNr2rrsrrz>CloudlinuxSummary._fill_resellers_statistics..xr rresellers_with_faultsz:Can't get amount of resellers with faults for the past 24hc\tttjSr)rlistrilvp_listrrrrz>CloudlinuxSummary._fill_resellers_statistics..sD!3!5!56677rresellers_activez$Can't get amount of active resellersN) rrrilveis_lve10is_panel_supportedreseller_limit_supportedrrrrs`r_fill_resellers_statisticsz,CloudlinuxSummary._fill_resellers_statisticsEs %% M "  . G    %% M ,  5 N    %% M 2  & @     %% A A A A   E    %%  )   2    %%  8  6 M    %%  .  & 2    %% A A A A  # I    ?4 5 < O ) )77"7      37DO. /JNDOF G7;DO3 4 4 4rc|jt|jjt jjt jddd|jt|jjt jddd|jfdddd |jfd dd d |jfd ddd|jfdddd|jfdddd|jt|j jt j ddd|jt|j jt j ddddS)zN Fill dict with statistics by statistics about default limits rldefault_limit_speedzCan't get default speed limitrkdefault_limit_cpu_origin_unitsz+Can't get cpu origin units of default limitc2jtjSr)defaultsr/ncpuxml_cfg_providersrrzCCloudlinuxSummary._fill_default_limits_statistics..$-h7<rdefault_limit_ncpuzCan't get default ncpu limitc2jtjSr)r5r/ior7srrzCCloudlinuxSummary._fill_default_limits_statistics..$-h7:rdefault_limit_iozCan't get default io limitc2jtjSr)r5r/nprocr7srrzCCloudlinuxSummary._fill_default_limits_statistics..s$-h7=rdefault_limit_nproczCan't get default nproc limitc2jtjSr)r5r/epr7srrzCCloudlinuxSummary._fill_default_limits_statistics..r=rdefault_limit_epzCan't get default ep limitc2jtjSr)r5r/iopsr7srrzCCloudlinuxSummary._fill_default_limits_statistics..r9rdefault_limit_iopszCan't get default iops limitdefault_limit_vmem_mbzCan't get default vmem limitdefault_limit_pmem_mbzCan't get default pmem limitN) rrr_cpu_limit_to_percentsr5r/cpur6_get_cpu_limit_units_mempages_to_mbvmempmemryr8s `r_fill_default_limits_statisticsz1CloudlinuxSummary._fill_default_limits_statisticss %% + )(37 )(38    ! ,  %% D-/?/H/R/V W W  , :    %% < < < <  +    %% : : : :   )    %% = = = =  ! ,    %% : : : :   )    %% < < < <  +    %% D(*:*CH*M*R S S  # +    %% D(*:*CH*M*R S S  # +      rc|jfdddd|jfdddd|jfddd d d S) z Fill dict with statistics by other statistics about limits: packages_total, users_total, amount users/packages with custom limits c,tjSr)rpackagesr7srrzACloudlinuxSummary._fill_other_limits_statistics..sC(122rrlpackages_totalz"Can't get total amount of packagescFtSr)rget_packages_with_custom_limitsr7srrzACloudlinuxSummary._fill_other_limits_statistics..sC(HHJJKKrpackages_with_custom_limitsz/Can't get amount of packages with custom limitscFtSr)rget_users_with_custom_limitsr7srrzACloudlinuxSummary._fill_other_limits_statistics..sC(EEGGHHrusers_with_custom_limitsz,Can't get amount of users with custom limitsN)rrrPs `r_fill_other_limits_statisticsz/CloudlinuxSummary._fill_other_limits_statisticss %% 2 2 2 2   1    %% K K K K  ) >    %% H H H H  & ;      rctddD]}jtj||dd|zdSjfddd|zd|zd jfd d d |zd|zd jfdd d|zd|zd jfddd|zd|zd jfdd d|zd|zd jfdd d|zd|zd jfdd d|zd|zd jfdd d|zd |zd jfd!d d"|zd#|zd jfd$d d%|zd&|zd jfd'd d(|zd)|zd dS)*zV Fill dict with statistics by statistics about top packages on server r2rrkz!Can't get top %s package by usersNcdjSr&)r top_resultsrrzACloudlinuxSummary._fill_top_packages_statistics..s 1 *rztop_%s_package_namez1Can't get package name of top %s package by usersFrc.tdSrr'r_srrzACloudlinuxSummary._fill_top_packages_statistics..sJqM**rrlztop_%s_package_users_numz4Can't get amount of users in top %s package by userscdjptjdjptjSr&)rJlimitsr0rKr6ryr`srrzACloudlinuxSummary._fill_top_packages_statistics..s;33])9\>])9\?rztop_%s_package_limit_speedz0Can't get speed limit of top %s package by usersc\djptjSr&)rLrcr0rKrdsrrzACloudlinuxSummary._fill_top_packages_statistics..s)11])9\>rz%top_%s_package_limit_cpu_origin_unitsz>Can't get cpu origin units of limit of top %s package by usersc6djptjSr&)rcr0r6r_srrzACloudlinuxSummary._fill_top_packages_statistics..A-=Crztop_%s_package_limit_ncpuz/Can't get ncpu limit of top %s package by usersc6djptjSr&)rcr0r<r_srrzACloudlinuxSummary._fill_top_packages_statistics.."A-=Arztop_%s_package_limit_ioz-Can't get io limit of top %s package by usersc6djptjSr&)rcr0r@r_srrzACloudlinuxSummary._fill_top_packages_statistics..)sA-=Drztop_%s_package_limit_nprocz0Can't get nproc limit of top %s package by usersc6djptjSr&)rcr0rCr_srrzACloudlinuxSummary._fill_top_packages_statistics..0rirztop_%s_package_limit_epz-Can't get ep limit of top %s package by usersc6djptjSr&)rcr0rFr_srrzACloudlinuxSummary._fill_top_packages_statistics..7rgrztop_%s_package_limit_iopsz/Can't get iops limit of top %s package by usersc\djptjSr&)rMrcr0rNrdsrrzACloudlinuxSummary._fill_top_packages_statistics..>$,,jm.B.Rl-XYYrztop_%s_package_limit_vmem_mbz/Can't get vmem limit of top %s package by usersc\djptjSr&)rMrcr0rOrdsrrzACloudlinuxSummary._fill_top_packages_statistics..Frnrztop_%s_package_limit_pmem_mbz/Can't get pmem limit of top %s package by users)rrrr#_get_top_package_by_number_of_usersr)ryr8rr`s` @r_fill_top_packages_statisticsz/CloudlinuxSummary._fill_top_packages_statisticss{ q!b b A??@!EUVV4q8J! O ) )****%)DqH# *    O ) )*****Q.G!K# *    O ) ),q0CaG# *    O ) )7!;QTUU# *    O ) )CCCC+a/BQF# *    O ) )AAAA)A-@1D# *    O ) )DDDD,q0CaG# *    O ) )AAAA)A-@1D# *    O ) )CCCC+a/BQF# *    O ) )YYYYY.2BQF# *    O ) )YYYYY.2BQF# *    wb b rct}||||||dS)zN Fill dict with statistiscs by varied statistics about limits N)r.rQr\rqrPs r_fill_limits_statisticsz)CloudlinuxSummary._fill_limits_statisticsNsU -.. ,,-=>>> **+;<<< **+;<<<<.dsv.x8rlsapi_criu_service_statusz Can't get status of criu serviceFrc ddS)Nrvrrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..ksv.y9rlsapi_criu_service_versionz!Can't get version of criu servicec ddS)N lsapiConf lsapi_criurrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..rs{3LArlsapi_option_criuzCan't get state of criuc ddS)Nr}lsapi_with_connection_poolrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..ys{34PQrlsapi_option_connection_poolz,Can't get state of mod_lsapi connection poolcdS)N libVersionrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics.. |4rlsapi_lib_versionz"Can't get version of mod_lsapi libcdS)N modStatusrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..s {3rlsapi_mod_statuszCan't get mod_lsapi statuscdS)N modVersionrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..rrlsapi_mod_versionzCan't get mod_lsapi versioncdS)N totalDomainrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..s }5rrllsapi_total_domain_countz5Can't get total amount of domains which use mod_lsapicdS)N domainStatrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..rrrplsapi_domain_statz.Can't get statistics of domains with mod_lsapicdS)N controlPanelrrwsrrz:CloudlinuxSummary._fill_lsapi_statistics..s ~6rlsapi_apache_environmentzCan't get apache environment)rrget_raw_lsapi_inforr)ryrxs @r_fill_lsapi_statisticsz(CloudlinuxSummary._fill_lsapi_statisticsXs ??  #  +    % O ) )8888+3# *    O ) )9999,4# *    O ) )AAAA#*# *    O ) )QQQQ.?# *    O ) )4444#5# *    O ) )3333"-# *    O ) )4444#.# *    O ) )5555*H# *    O ) )4444#A# *    O ) )6666*/# *     3@DO. / / /rcJ|j|jddddS)Nrr wmt_configz!Cant get status of wmt_api_config)rr_get_wmt_api_configrs r_fill_wmt_settings_statisticsz/CloudlinuxSummary._fill_wmt_settings_statisticss5 %%  $   /      rc |\}nF#t$r9}tdt |ggic}Yd}~nd}~wwxYwt t t |z } ||\nD#t$r7}tdt |iicYd}~nd}~wwxYw|r$dt|i|j fdddd|j fdd d d |j fd d d d|j fdddd|j fdddd|j fdd dddS)Nz+Error while getting WordPress statistics %sz3Error while getting WordPress plugins statistics %scloudlinux_wpos_object_cachec"tSrr) all_wp_pathssrrz7CloudlinuxSummary._fill_wp_statistics..sC %%rrlwordpress_installed_totalz,Can't get total count of installed wordpresscSrrobject_cache_pluginssrrz7CloudlinuxSummary._fill_wp_statistics..s(rrpwordpress_object_cache_pluginsz&Can't get WP object cache plugins infocSrradvanced_cache_pluginssrrz7CloudlinuxSummary._fill_wp_statistics..s*r wordpress_advanced_cache_pluginsz(Can't get WP advanced cache plugins infocFtSrrrrsrrz7CloudlinuxSummary._fill_wp_statistics..sC,335566r$wordpress_object_cache_plugins_totalz,Can't get WP object cache total plugins infocFtSrrrsrrz7CloudlinuxSummary._fill_wp_statistics..sC.557788r&wordpress_advanced_cache_plugins_totalz.Can't get WP advanced cache total plugins infocSrr)wp_php_versionssrrz7CloudlinuxSummary._fill_wp_statistics..sOrwordpress_php_versionszCan't get WP php version info) _prepare_wp_statisticsrvrwrrkr)r _prepare_wp_plugins_statisticsrrrr)rypaths_with_wpos_object_cacherwithout_wpos_object_cacherrrrs @@@@r_fill_wp_statisticsz%CloudlinuxSummary._fill_wp_statisticss UJNJeJeJgJg GL6 U U U   JCPQFF S S SJLbRT GL6 U%)\):):SA]=^=^)^$_$_! B334MNN 9 "8"8 B B B   RTWXYTZTZ [ [ [;=r 8 "8"8"8"8"8"8 B (  ' '.4P0Q0Q)    %% % % % %  ' ;    %% ( ( ( (  , 5    %% * * * *  . 7    %% 6 6 6 6  2 ;    %% 8 8 8 8  4 =    %% # # # #  $ ,      s, A"/AA"B++ C,5-C''C,cb|d|}|d|}||fS)zq Prepares dict with plugin-counter pairs e.g: {'w3-total-cache': 4, 'redis': 1, 'ls': 2} z object-cachezadvanced-cache)_get_plugin_info)rywp_pathsrrs rrz0CloudlinuxSummary._prepare_wp_plugins_statisticss= $44^XNN!%!6!67G!R!R#%;;;r plugin_typercttdfd|D}tt}|D]}||xxdz cc<|S)Nc0g|]}t|Sr)r$)rrrs rrz6CloudlinuxSummary._get_plugin_info..s:2H2H2H6:3FdK2X2X2H2H2Hrr2)r)filterr rl)rrrobject_plugin_counter_pairsplugins` rrz"CloudlinuxSummary._get_plugin_infos#F42H2H2H2H>F2H2H2H%I%I J J&1#&6&6#* 5 5F ' / / /1 4 / / / /**rcjgg}}tt}tj}|D]} tj|}n#t $rY%wxYwtt }|D]?\}} tj | r||  |@|D]~} | || |} | d} | d} | | | | d| r#| dkr|| xxt| z cc<|||fS)z Return Wordpress absolute paths, paths with install WPOS object cache module and counter of php versions that are used by these Wordpresses. r php_version'wp_paths_with_enabled_wpos_object_cache undefined)r rlrr userdomainsrvr)rrrappend_get_docroot_wp_inforlr) ryr$paths_with_enabled_wpos_object_cache php_versions panel_usersuser domains_infodocroot_domains_mapdomaindocroot docroot_infodocroot_wp_pathsdocroot_php_versions rrz(CloudlinuxSummary._prepare_wp_statisticss >@: "3'' moo  O OD $066     #.d"3"3 #/ @ @7>>'**@'077???. O O#88wH[\\ #/ #; &2=&A###$45554;; !JK$O(;{(J(J !4555=M9N9NN555 OA<OOsA AArrrcggdd}fdtD}|s|Sfd|D|d<fdt||D|d<D]$}||}|dkr||d<n%|S) zM Return data about docroot's WP paths and used php versions. r)rrrcg|]J}tj|ks"tj|vH|KSr)rrr)rwp_pathrrs rrz:CloudlinuxSummary._get_docroot_wp_info..3sZ   w||GW--88',,w008KKK KKKrcTg|]$}t|%Srrjoinpathrrrs rrz:CloudlinuxSummary._get_docroot_wp_info..=s-#V#V#VTDMM$:$:4$@$@#V#V#VrrcXg|]&}|t|'Srrrs rrz:CloudlinuxSummary._get_docroot_wp_info..>s@C C C -1 MM " "4 ( (rrr)r#r%_get_php_version_for_domain)ryrrrrrrrs `` rrz&CloudlinuxSummary._get_docroot_wp_info#s79&       #0#9#9     #V#V#V#VX#V#V#V Z C C C C 5UVZ\d5e5eC C C >? *'2  F::6BBKk)).9 ]+*rrctjtjtjtjfvrdS|\}}}||i}|dd}tjtjkr||kr|S|D],\}}||vr#|dkrd| dd} | cS-tjtjkrd| dd} | StjtjkrE|dd} |d t|   d } | pdS|S) z Return php version that is used for specified domain. Determine whether of MultiPHP Manager or PHP Selector is used. rphp_version_idrzalt-php.rzda-php handler_typeN-) rrr CPANEL_NAMEDIRECTADMIN_NAMEr_get_system_php_inforrreplacerr) ryrsystem_default_php_versiondomains_php_infoselector_php_infophp_infomulti_php_versionrdomainsalt_php_versionda_php_versionhandlerrs rrz-CloudlinuxSummary._get_php_version_for_domainKs    e&79OQVQa%b b b;JNJcJcJeJeG"$46G$''33$LL)9;GG    !2 2 2.2CCC$ $!2 7 7 9 9 ' ' GW  W%8%8"FGOOC,D,D"F"F&&&&    !7 7 7J&7&?&?R&H&HJJN! !    !1 1 1ll>266G+Nc'll]N;AA#FFK-+ -  r)maxsizec tjd}n#t$rd}YnwxYwtj}t }| |d}ni}|||fS)z Return info about: - system_php_version (implemented only on cPanel) - domains_php_info (php versions and handlers turned on in MultiPHP) - selector_php_info (php version used by panel users via PHP Selector) default_version_idNdomains_by_php_version)rget_system_php_inforvget_domains_php_inforY)system_php_versionrphp_selector_usagers rrz&CloudlinuxSummary._get_system_php_infors &!&!:!. (+rrr ssa_configzCan't get SSA configcdS)Nrrrsrrz8CloudlinuxSummary._fill_ssa_statistics..s ),r ssa_versionzCan't get version of SSAcdS)Nr@rrsrrz8CloudlinuxSummary._fill_ssa_statistics..rr ssa_statuszCan't get state of SSAcdS)N agent_statusrrsrrz8CloudlinuxSummary._fill_ssa_statistics..s .1rssa_agent_statuszCan't get state of SSA agentc ddS)N autotracingr@rrsrrz8CloudlinuxSummary._fill_ssa_statistics..s -0:rautotracing_statusz"Can't get state of SSA Autotracingc ddS)Nrdisabled_users_quantityrrsrrz8CloudlinuxSummary._fill_ssa_statistics..s -01JKrrl#autotracing_disabled_users_quantityz1Can't get state of SSA Autotracing disabled usersc ddS)Nr rules_versionrrsrrz8CloudlinuxSummary._fill_ssa_statistics.. -0Arautotracing_rules_versionz'Can't get SSA Autotracing rules versionc ddS)Nrurls_processedrrsrrz8CloudlinuxSummary._fill_ssa_statistics..s -01ABrautotracing_urls_processedz.Can't get SSA Autotracing processed URLs countc ddS)Nr urls_selectedrrsrrz8CloudlinuxSummary._fill_ssa_statistics..r rautotracing_urls_selectedz-Can't get SSA Autotracing selected URLs countc ddS)Nrrejectsrrsrrz8CloudlinuxSummary._fill_ssa_statistics..s -0;rrpautotracing_rejectsz!Can't get SSA Autotracing rejects)rr get_ssa_statsrr)ryrs @r_fill_ssa_statisticsz&CloudlinuxSummary._fill_ssa_statisticss6 O::    '   O ) )++++'     O ) ),,,,+     O ) )++++)     O ) )1111"/     O ) )::::$5     O ) )KKKK5D     O ) )AAAA+:     O ) )BBBB,A     O ) )AAAA+@     O ) );;;;%4      -:DOL ) ) )rc|jddd}||jt|jdddd|jt|j|t d d d d |jt|j|td ddd |jtddd|jtddd|jtdj ddd|jtddd|jtddd|jd<d|jd<dS|jfddddd |jfddddd dSt|jd<dS) zS Fill dict with statistics by varied statistics about PHP selector c tdS)Nr)rWrrrrzACloudlinuxSummary._fill_php_selector_statistics..s+E22rrlz+Can't get statistics about PHP interpretersNrrkselector_php_statusz Can't get status of PHP selectorrnselector_php_versions_installedz8Can't get list of versions of installed PHP interpretersFrselector_php_versions_enabledz6Can't get list of versions of enabled PHP interpretersselector_php_version_defaultz,Can't get default version of PHP interpreterselector_php_version_nativez+Can't get native version of PHP interpreterselector_php_enabled_uiz%Can't get state of UI of PHP selectorselector_php_modezCan't get mode of PHP selectorz'Can't get summary usage of PHP selector'selector_php_num_domains_by_interpreter%selector_php_num_users_by_interpretercLddDS)Nc4i|]\}}|t|Srrrvrs r zUCloudlinuxSummary._fill_php_selector_statistics....s$sssGQG sssrrrphp_usage_summarysrrzACloudlinuxSummary._fill_php_selector_statistics..s)ss?PQi?j?p?p?r?rsssrrpzBCan't get amount of domains which use PHP selector per PHP versioncLddDS)Nc4i|]\}}|t|Srrr%s rr'zUCloudlinuxSummary._fill_php_selector_statistics....s$qqqGQG qqqrusers_by_php_versionr(r)srrzACloudlinuxSummary._fill_php_selector_statistics..s)qq?PQg?h?n?n?p?pqqqrz@Can't get amount of users which use PHP selector per PHP version)rrrrr"_get_list_versions_of_interperters INSTALLEDrr[rXr]php_selector_is_enabledr\rYr)ryphp_interpretersr*s @r_fill_php_selector_statisticsz/CloudlinuxSummary._fill_php_selector_statisticssl  ?AA 2 2  :    ' O ) )4e<<%3     O ) )?AQS\]]1K# *    O ) )?AQSZ[[/I# *    O ) )'.?     O ) )'->     O ) )%e,,D)8     O ) )(#1     !% F F&:!!  !(MQ IJKO GHHH--ssss=Y"' .--qqqq;W"' .6CDO1 2 2 2rc(|dks|dkrdS||zS)z Get average amount of applications per domain :param total_apps: total amount of applications :param amount_of_apps_per_domain: amount of applications per domain r2Nr) total_appsamount_of_apps_per_domains r_get_average_apps_per_domainz.CloudlinuxSummary._get_average_apps_per_domain(s) >>6::4666rc(|dks|dkrdS||zS)z Get average amount of applications per user :param total_apps: total amount of applications :param amount_of_apps_per_user: amount of applications per user r2Nr)r4amount_of_apps_per_users r_get_average_apps_per_userz,CloudlinuxSummary._get_average_apps_per_user5s) >>4q884444rc4td|DS)z Get amount of running applications on server :param apps: list of applications for something selector c6g|]}|j |jdk|S)started) app_status)rapps rrz@CloudlinuxSummary._get_amount_of_runned_apps..Js,ZZZC3>ZcnPY>Y>YC>Y>Y>Yrr)appss r_get_amount_of_runned_appsz,CloudlinuxSummary._get_amount_of_runned_appsBs!ZZ4ZZZ[[[rct}|D]}||jxxdz cc<|dpdg}|ddS)z Get maximum amount of applications per domain :param apps: list of applications for something selector r2rrr)rdoc_root most_common)r?apps_per_domainr> most_commonss r_get_max_apps_per_domainz*CloudlinuxSummary._get_max_apps_per_domainLsh")) / /C CL ) ) )Q . ) ) ) )'22155A& Aq!!rct}|D]}||jxxdz cc<|dpdg}|ddS)z~ Get maximum amount of applications per user :param apps: list of applications for something selector r2rBr)rrrD)r? apps_per_userr>rFs r_get_max_apps_per_userz(CloudlinuxSummary._get_max_apps_per_user]sh  ) )C #( # # #q ( # # # #%0033?x Aq!!rcVt}|D]}||jxxdz cc<|S)z Get Counter object which contains amount applications per version of interpreter :param apps: list of applications for something selector r2)rr)r?apps_per_versionr>s r_get_counter_apps_per_versionz/CloudlinuxSummary._get_counter_apps_per_versionnsD#99 / /C S[ ) ) )Q . ) ) ) )rcx||}|dpdg}|ddS)z Get maximum amount of applications per version of interpreter :param apps: list of applications for something selector r2rBr)rMrD)ryr?rLrFs r_get_max_apps_per_versionz+CloudlinuxSummary._get_max_apps_per_version|sC ==dCC(33A66B6( Aq!!rczt}|D]}||jt|S)zz Get amount of domains with applications :param apps: list of applications for something selector )r addrCr)r?rr>s r _get_amount_of_domains_with_appsz2CloudlinuxSummary._get_amount_of_domains_with_appss?%% & &C KK % % % %7||rczt}|D]}||jt|S)zx Get amount of users with applications :param apps: list of applications for something selector )r rQrr)r?usersr>s r_get_amount_of_users_with_appsz0CloudlinuxSummary._get_amount_of_users_with_appss?  C IIch    5zzrcJ||}t|S)z Get amount of applications per each versoin of interpeters :param apps: list of applications for something selector )rMr)ryr?rLs r4_get_amount_of_apps_per_each_version_of_interpreterszFCloudlinuxSummary._get_amount_of_apps_per_each_version_of_interpreterss' ==dCC$%%%rc:fdt|DS)z Get list of versions of interpreters on server :param interpreters_stats: dict with varied statistics about each version of interpeters :param state: state of interpeters (installed, enabled) c*g|]\}}| |Srr)rinterpreter_statsstatstates rrzHCloudlinuxSummary._get_list_versions_of_interperters..s,nnn&=&7bfglbmn!nnnrr )interpreters_statsr\s `rr.z4CloudlinuxSummary._get_list_versions_of_interperterss)onnnK]A^A^nnnnrc^t|}|t|StS)zI Get list of apllications on server for defined selector )rZr))r iter_appss r_get_list_of_applicationsz+CloudlinuxSummary._get_list_of_applicationss,-[99   ?? "66Mrc  |jD]}|jtt|dd|}|t |jd|zdz<]|jt|j|dd|zdzd||jt|j |tdd|zd zd |d |jt|j |tdd|zd zd|d |jt|j |dd||jfddd|zdzd|d |jd|zdzdk|jd|zdz<|jt|j dd|zdzd|d |jtt|dd|}|||jd|zdz<|jt|jdd|zdzd||jt|jdd|zdzd||jt|jdd|zdzd||jt|jdd|zdzd ||jt|j|jd|zdz|jd|zdzdd!|}|||jd|zd"z<|jt|j|jd|zdz|jd|zdzdd#|}|||jd|zd$z<|jt|jd%d|zd&zd'|dS)(zc Fill dict with statistics by varied statistics about ruby/nodejs/python selectors rlz*Can't get statistics about {} interpretersN selector__statusrkzCan't get status of {} selectorrn_versions_installedz7Can't get list of versions of installed {} interpretersFr_versions_enabledz5Can't get list of versions of enabled {} interpretersz!Can't get list of {} applicationsc"tSrr)interpreter_appssrrz>CloudlinuxSummary._fill_selectors_statistics..s,--r_applications_amountz)Can't get total amount of {} applicationsr_used_applications_runningz6Can't get amount of runned application for {} selectorz(Can't get default version of {} selector_default_version_max_applications_per_domainz8Can't get max applications per domain for {} interpreter_max_applications_per_userz6Can't get max applications per user for {} interpreter_num_users_with_appsz=Can't get amount of users with applications for {} interpeter_num_domains_with_appsz?Can't get amount of domains with applications for {} interpeterzFCan't get average amount of applications per domain for {} interpreter _average_applications_per_domainzDCan't get average amount of applications per user for {} interpreter_average_applications_per_userrp _num_applications_by_interpreterzDCan't get amount of applications per each version of {} interpreters) SELECTORSrrrrWrrrrr.r/rr`r@r^rGrJrUrRr6r9rW)ryselectorr]default_version_of_selectoraverage_apps_per_domainaverage_apps_per_userrgs @r_fill_selectors_statisticsz,CloudlinuxSummary._fill_selectors_statisticss n n H!%!G!G/::=DDXNN""  ")FS h 6 BC O ) )4h??h&2299(CC     O ) )?ASU^__h&)>>JQQRZ[[# *    O ) )?ASU\]]h&)<<HOOPXYY# *    $EE6AA4;;HEE    O ) )----h&)??<CCHMM# *    h 69O OPSTT OK(2W< = O ) )79IJJh&)@@IPPQYZZ# *   +//*P*P+X66;BB8LL++ ' +6Oj h 69K KL O ) )57GHHh&)GGKRRS[\\     O ) )35EFFh&)EEIPPQYZZ     O ) );=MNNh&)??PWWX`aa     O ) )=?OPPh&)AARYYZbcc     '+o&L&L5OK($:=S$STOK($:=U$UV Y``aijj'' #'2+ h 69[ [\$(O$J$J3OK($:=S$STOK($:=S$ST W^^_ghh%% !%0) h 69Y YZ O ) )QScddh&)KKW^^_ghh     Sn n rc6ddg}t|d\}}}|dkrt|tj|}t }|d|d<d|dD}t D]#}||t|d |z<$|S) zA Get wizard status and list of installed modules z/usr/sbin/cloudlinux-wizardr@Trr wizard_statusc,i|]}|d|dS)rr@r)rrs rr'z.Qs#```v&.&*:```rrwizard_module_)rrrrrrQr NOT_SELECTED)rret_codestd_outstd_err parsed_jsonwizard_statisticsparsed_modulesrs r_get_wizard_statisticsz(CloudlinuxSummary._get_wizard_statistics?s *  &1%N%N%N"'7 q=='00 0j))  FF-8-I/*``U^I_```! d dF;I;M;MfVb;c;c .7 8 8  rc |j|jdd|jfdddddtD];|jfddd zd d.ds %o6rrzz%Can't get status of cloudlinux-wizardFrcdzS)Nr|r)rrsrrz;CloudlinuxSummary._fill_wizard_statistics..ls)*:V*CDrr|z;Can't get statistics about module "{}" of cloudlinux-wizardN)rrrrrQr)ryrrs @@r_fill_wizard_statisticsz)CloudlinuxSummary._fill_wizard_statisticsWs !OBB  '  ;   %% 6 6 6 6   4 &   "  F O ) )DDDDD 6)NUUV\]]# *      rct}g}|D],}|t||z }-|S)zH Returns list of implemented scripts in integration.ini )rTr)keys)rscriptssections r$_get_implemented_integration_scriptsz6CloudlinuxSummary._get_implemented_integration_scriptsssL #$$ 4 4G tF7O002233 3GGrcdgd}tjts|Sd|d<||d<|S)zh Checks integration script exists and if exists get list of implemented scripts F)integration_scripts_usedintegration_scripts_specifiedTrr)rrrrSrrs r_get_integration_infoz'CloudlinuxSummary._get_integration_info~sT /4VXYYw~~k** M-1)*262[2[2]2]./ rcddl}d}|}t|j|z }t|j|z }||fS)zG Gets memory usage: total and used memory in megabytes rNi)psutilvirtual_memoryrmtotalused)r bytes_in_mbmem mem_totalmem_useds r_get_memory_usedz"CloudlinuxSummary._get_memory_usedsT   ##%%#)$${2 ??[0(""rcBtj}d}d}ttjrlt j|rMt|5}| }dddn #1swxYwY||fS)za Gets kernel info release and module version (starting from 7h) :return: z/sys/module/kmodlve/versionN) platformreleaserrrrrrrrr)kernel_releasekmodlve_version_filekmodlve_versionrs r_get_kernel_infoz"CloudlinuxSummary._get_kernel_infos ")++< %gk 2 2 3rw~~FZ7[7[ 3*++ 3q"#&&((.."2"2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3..s'BBBc8ttS)zp Gets info about lve extensions usage Calculates amount of packages with lve extensions )rrGrrr#_get_lve_extensions_packages_amountz5CloudlinuxSummary._get_lve_extensions_packages_amounts 355666rcd}tj|sdSt|5}|}dddn #1swxYwYt t|S)zk Reads /proc/sys/fs/datacycle/enable in order to check datacycle enabled parameter z/proc/sys/fs/datacycle/enableFN)rrrrrrrrl)datacycle_filerrEs r$_is_kernel_datacycle_enabled_in_filez6CloudlinuxSummary._is_kernel_datacycle_enabled_in_files 9w~~n-- 5 . ! ! $Q6688>>##D $ $ $ $ $ $ $ $ $ $ $ $ $ $ $CIIs'A&&A*-A*cd\}}tj|sdSt|5}|d}dddn #1swxYwY||vS)zR Checks if datacycle parameter was given for current boot )z /proc/cmdline datacycleF N)rrrrrrsplit) cmdline_filerrrEs r_is_datacycle_param_was_passedz0CloudlinuxSummary._is_datacycle_param_was_passeds $@ jw~~l++ 5 ,   /16688>>##))#..D / / / / / / / / / / / / / / /T!!s:A<<BBctj}d}|D]&}|ttj|z }'|S)z= Returns general amount of domains on server r)rrrr) cpusers_list domains_countrs r_get_total_domains_amountz+CloudlinuxSummary._get_total_domains_amountsH }    : :D S!24!8!899 9MMrct}tt|d}tt|d}|r|rdS|rdS|rdSdS)zi Returns is links traversal protection enabled on server (symlinks or hardlinks) zfs.protected_symlinks_createzfs.protected_hardlinks_createall symlinks_onlyhardlinks_onlyno)r(rrlr)rsymlink_protection_enabledhardlink_protection_enableds r%_is_link_traversal_protection_enabledz7CloudlinuxSummary._is_link_traversal_protection_enableds %)#fjj9W.X.X*Y*Y%Z%Z"&*3vzz:Y/Z/Z+[+[&\&\# % *E 5 ' "? ( ##4rcd}d}d}tjdstjdr|Stjdr|S|S)Nisocldeployqcow2z/etc/cl-convert-savedz/var/log/cldeployz/etc/cloudlinux-qcow2-installr )rrrs r_get_cl_installation_sourcez-CloudlinuxSummary._get_cl_installation_sourcesd 7>>1 2 2 bgnnEX6Y6Y O W^^; < < LJrcttjrjjjddddjjdddd jfd dd d dtd s$jtdddd jtddddjtddddjj dddjj dddjfdddddjfdddddjfddd d!djfd"d#d$d%djfd&d#d'd(djjdd)d*d ttjr"jfd+dd,d-d jt"dd.d/d jt$dd0d1d jjdd2d3d dS)4Nrllve_extension_packages_amountz"Can't get lve extension usage infoFrrk!link_traversal_protection_enabledz5Can't get link traversal protection enabled parameterTcdSr&r kernel_infosrrz;CloudlinuxSummary._fill_system_statistics.. s Arinstalled_kmod_lve_versionz)Can't get installed kmod-lve version infoskip_jwt_checkcldiag_cron_check_enabledz&Can't get is cldiag cron check enabled cpu_amountzCan't get cpu amounttesting_repository_enabledz#Can't get testing repository status base_distrozCan't detect platform for CLOSsecureboot_statusz+Can't detect whether secure boot is enabledcdSrrrsrrz;CloudlinuxSummary._fill_system_statistics..8 s KNrrzCan't get kernel release infocdS)Nrrvendor_integration_infosrrz;CloudlinuxSummary._fill_system_statistics..@ s+,FGrrz'Can't get integration_scripts_used infocdS)Nrrrsrrz;CloudlinuxSummary._fill_system_statistics..G s+,KLrrnrz-Can't get integrations scripts specified infocdSrr memory_usagesrrz;CloudlinuxSummary._fill_system_statistics..P LOrrmmemory_total_mbzCan't get total memory infocdSr&rrsrrz;CloudlinuxSummary._fill_system_statistics..W rrmemory_used_mbzCan't get used memory info domains_totalzCan't get domains amountcTpSr)rrrsrrz;CloudlinuxSummary._fill_system_statistics..g s*AACC>;;==rkernel_datacycle_usage_enabledz,Can't get kernel datacycle enabled parameter virt_typez!Can't get the virtualization typehostnamezCan't get the hostnamecloudlinux_installation_sourcezCan't get installation source)rrrrrrrrrrUrrrrrrrr rr)ryrrrs`@@@r_fill_system_statisticsz)CloudlinuxSummary._fill_system_statisticss"++-- %gk 2 2  O ) )8/5# *    O ) ):3H" *    O ) )&&&&,<# *   "666  O ) )-+9" *    %%    # &    %% #  ( 2 &    %%     -     %%  #   :     %% " " " "   , &   #'"<"<">"> %% G G G G  & 6 &    %% L L L L  + < &   ,,..  %% # # # #   * &    %% # # # #   ) &    %%  *   ' &    &gk 2 2  O ) )>>>>0?" *    %%    0 &    %%    % &    %%  ,  , , &     rcjfddddjtdddjtddd dS) Nc jptSrrUNKNOWN_RHN_IDrsrrzKCloudlinuxSummary._fill_dict_with_rpm_packages_statistics.. DN4nrrkrCan't get system ID os_versionzCan't get version of OSrsrTz*Can't get info about client's rpm packages)rrrrMrs`rrz9CloudlinuxSummary._fill_dict_with_rpm_packages_statistics s %% 4 4 4 4   "    %%    &    %% !   :      rparamcZtj|j|S)z Retrieve data from proc/mounts for param :return: param_value - Optional[int], if there is no value - None )r+ str_to_intrr)ryrs r_get_proc_paramz!CloudlinuxSummary._get_proc_param s# ()?)?@@@rc pdg}ttjr|gd|D][}|jt |j|d|ddd |d\|jtdd d dd S) z Filling stats about mounting - mount params from parameters list - separate hidepid getting, since it is more complicated than other mounting params zkernel.memcg_oom_disable) zfs.enforce_symlinksifownerzfs.symlinkown_gidzfs.protected_symlinks_allow_gidz fs.protected_hardlinks_allow_gidzfs.global_root_enablezfs.proc_can_see_other_uidzfs.proc_super_gidzfs.xfs.cap_res_quota_disablezubc.ubc_oom_disablezfs.process_symlinks_by_taskrlrrz Can't get {0}TrhidepidzCan't get hidepid valueN) rrrrlrrrrrrrVry parametersps r_fill_proc_params_statisticsz.CloudlinuxSummary._fill_proc_params_statistics s '  &gk 2 2            A O ) ),a00 #s## ''**" *     %% *   & &     rc d}|D];}|jt|j|dd|d|dd. s!DLDD)T**rrlrzCan't get cl_plus informationc8dnddS)N client_idrrsrrz=CloudlinuxSummary._fill_cln_jwt_information.. s!DLDD+t,,rrzCan't get client_id valuec8dnddS)Nis_awp_premium_allowedrrsrrz=CloudlinuxSummary._fill_cln_jwt_information.. s"DLDD2D99rjwt_is_awp_premium_allowedz&Can't get is_awp_premium_allowed valuec8dnddS)Nis_awp_cdn_allowedrrsrrz=CloudlinuxSummary._fill_cln_jwt_information.. s"DLDD.55rjwt_is_awp_cdn_allowedz"Can't get is_awp_cdn_allowed valuelicense_activezCan't get license status valueN)rJrrrrL)ryrEs @r_fill_cln_jwt_informationz+CloudlinuxSummary._fill_cln_jwt_information s4 .uEEE %% + + + +   ,     %% - - - -   (     %% : : : :  ( 5     %% 6 6 6 6  $ 1     %% 0$ 7 7   -      rcjfddddjtddddS) za Filling stats centralized management - centralized management existence cLtjjSr)rrrCL_PLUS_CM_DISABLED_PATHrsrrzKCloudlinuxSummary._fill_centralized_management_statistics.. sBGNN4#@AArrlcentralized_management_disabledzCan't check CM disabling statusrkcl_plus_sender_service_statusz)Can't check cl plus sender service statusN)rrrKrs`r'_fill_centralized_management_statisticsz9CloudlinuxSummary._fill_centralized_management_statistics sf %% A A A A  - .     %% %  + 8      rcJt} t}|D]H}|D]1\}}|d|g|2In9#t t f$r%}td|Yd}~nd}~wwxYw|S)a Prepare list of dicts with CPU metrics Method get_cpu_metrics returns data in following format: [ { "id": 0, "model": "QEMU Virtual CPU version 2.5+" }, { "id": 0, "model": "QEMU Virtual CPU version 2.5+" } ] This helper produces a dict, where each key - metric_name, value - list of values for all CPUs "cpu_model": [ "QEMU Virtual CPU version 2.5+", "QEMU Virtual CPU version 2.5+" ], "cpu_id": [ 0, 0 ] cpu_zCPU metrics getting error: %sN) rrNr setdefaultrrrPrwr)r cpu_corescpu_coremetricvalueexs rmake_flat_cpu_metricsz'CloudlinuxSummary.make_flat_cpu_metrics s: B'))I% I I%-^^%5%5IIMFE%%oVoor::AA%HHHHI I& B B B   PTeo)q)q)q$r$r +./?+@+@(#'-k:>PTeo)q)q)q$r$r ),-=)>)>&#'-k:>PTeo)q)q)q$r$r ,/0@,A,A)),-()*&,-)+-CE^^ ^! ! ! ! == !sC C C"!C"cBt}|dvrd}nOtjtjdz }|d}d|d}t j|ddd t jt j }|j |j fS) z Scan /var/log/messages for all needed "Act like CageFS is disabled ..." messages for yesterday :return: Tuple (ret code, std_out string) )cl7cl7hcl8za/usr/bin/journalctl --since yesterday --until today | /usr/bin/grep 'Act like CageFS is disabled'r2)daysz%Y-%m-%dz/usr/share/cloudlinux/logs-at z< /var/log/messages | /bin/grep 'Act like CageFS is disabled'TrN)rrOrPr-stderr) rdatetimedatetoday timedeltastrftimerYrZPIPEDEVNULLr,r-)os_types_cmdyesterday_date date_to_scanrs rr+z$CloudlinuxSummary._get_data_from_log s !"" , , ,wEE &]0022X5GQ5O5O5OON)22:>>L\E N5t4K",/*:L N N N|QX%%rcttjr"jjdddt jd<jttj dddd jj dd d jj dd d jj dddjfddddjfddddt0t)dttjd<n djd<dS)Nrlold_way_of_integration_used*Can't detect old LVE integration mechanismlve_utils_versionF) verify_exprk cl_editionzCan't get CloudLinux editionis_solo_meta_file_presentz$Can't detect solo meta file presenceis_admin_meta_file_presentz%Can't detect admin meta file presenceis_container_meta_file_presentz)Can't detect container meta file presencecjSrrrsrrzACloudlinuxSummary._prepare_cl_normal_statistics.. D'rr$Can't get or generate security tokenc jptSrrrsrrzACloudlinuxSummary._prepare_cl_normal_statistics.. rrrr{}-{}lvemanager_version)rrrrrr LVE_UTILS_PKG_VERSIONrrget_cl_edition_is_solo_marker_exists_is_admin_marker_exists_is_container_marker_existsLVEMANAGER_PKG_VERSIONLVEMANAGER_PKG_RELEASEr_fill_dict_with_statisticsrs`rrz/CloudlinuxSummary._prepare_cl_normal_statistics s %gk 2 2  O ) )0-=     0E+, %% J-% @ @ @   +    %%  '  ' 3    %%  (  ( 4    %%  ,  , 8    %% ' ' ' '   3     %% 4 4 4 4   "    " -&24;NN&&55DO0 1 1 59DO0 1 '')))))rc d dd d d d}tj sdSGdd t fd } d d d i}d tj D}||D]/} |||#$rYt $r |D]}d ||<Y,wxYw| |j <| |j <| |j <tjdr d|j|<dStjdr d|j|<dSd|j|<dS)z Filling stats lvemanager - number of visits on X-Ray tab - number of X-Ray installation - number of LVEManager opens z/var/log/cloudlinux/iQlve_number_of_opensxray_number_of_installationxray_number_of_visitsxray_advanced_metrics_statusNceZdZdS)ECloudlinuxSummary._fill_lvemanager_statistics..BreakOuterLoopN)rrrrrrBreakOuterLooprb s Drrcctj}t |zd}d}|D]} d|ddd}tj|d}| z |cxkr|krnnd|ddd}|dkr| xxdz cc<n0|dkr| xxdz cc<n|d kr|xxdz cc<nd }#ttf$rYwxYw|r dS) NrFrr,z%Y-%m-%d %H:%M:%S,%fzlvemanager-openedr2zxray-install-startedzxray-tab-clickedT) r9nowr=rrrstrptimerrAttributeError)statsfilecurrent_date_timestamprbreak_outer_looplinelog_timelog_date_timestamprrcCOLLECTING_PERIOD LOG_FOLDERLVE_NUMBER_OF_OPENSXRAY_NUMBER_OF_INSTALLSXRAY_NUMBER_OF_VISITSs rfill_statisticszFCloudlinuxSummary._fill_lvemanager_statistics..fill_statistics s%-%6%:%:%<%<%F%F%H%H "Z$&,,A$   "xx 3(;<>>!"9:::a?::::$(:::!"7888A=888+/("N3H %$$ % %s C>E  E"!E"rc<g|]}tjd||S)z^lvemanager\.log(\.\d{1,2})?$)rematch)rrs rrzACloudlinuxSummary._fill_lvemanager_statistics.. s;   x8$??    rrz./opt/alt/php-xray/php/advanced_metrics.enabledrez//opt/alt/php-xray/php/advanced_metrics.disabledrfnone) rrisdirrvlistdirsortrrr) ryXRAY_ADVANCED_METRICS_STATUSrur log_fileslog_filer[rcrprqrrrsrts @@@@@@r_fill_lvemanager_statisticsz-CloudlinuxSummary._fill_lvemanager_statistics s, %3"? 7'E$w}}Z((  F     Y    % % % % % % % % % %0  !1 #Q   Z 33    ! * *H * H5555!    * * *&**D')Jt$$** *2<U3V/0/9:M/N+, 7>>J K K C.F rOrrkrrPc jptSrrrsrrz7CloudlinuxSummary._prepare_statistics..L rrrrrGrRrSrlrErF)rrrTrYrZrr r[rs`r_prepare_statisticsz%CloudlinuxSummary._prepare_statisticsC s %% ' ' ' '   3     %% 4 4 4 4   "    0E+, ! -2H2T4;NN&&55DO0 1 1 59DO0 1 %%  ,  ) 9    '')))))rcttjr|ttjr(||ttjr|ttj r(| | ttj r| ttjs2ttjsttjr|t%ds|ttjr|ttjr|||||||||| |!|"dS)NTr)#rrGOVERNORrCAGEFSrr%RESELLER_LIMITSr0rrsr PHP_SELECTORr2 RUBY_SELECTORPYTHON_SELECTORNODEJS_SELECTORrxrr LSAPIrWIZARDr_fill_wpos_statisticsrrrrrrrrrrrs rr[z,CloudlinuxSummary._fill_dict_with_statisticsa sc %g&6 7 7 3  0 0 2 2 2 %gn 5 5 8  ( ( * * *  5 5 7 7 7 %g&= > > .  + + - - - %gk 2 2 3  ( ( * * *  0 0 2 2 2 %g&: ; ; 1  . . 0 0 0 %g&; < < .-g.EFF .-g.EFF .  + + - - -!666 ;  8 8 : : : %gm 4 4 *  ' ' ) ) ) %gn 5 5 +  ( ( * * * ""$$$ &&((( ++--- $$&&& ))+++ &&((( **,,, !!### ((***   """ ##%%%%%rc8|j|jdd|jtdd|jfdddd|jd dd d t t r}d d kred |jfddddd |jfdddd|jfdddd|jfdddddr |jfdddddD]-dkr |jfddd zd.d!gD]&|jfd"dd#zd'd$D]-dkr |jfd%dd&zd.d'gD]&|jfd(dd)zd'd*gD]&|jfd+dd,zd'dgD]-dkr |jfd-dd.zd.d/iD]\}||jd0z<|jfd1dd2d|jfd3dd4d|jfd5dd6d7|jfd8dd9d:|jfd;dddd?d@|jfdAddBdCdSdSdS)DNrkz!Can't get AccelerateWP statisticsrpz,Can't get AccelerateWP activation statisticsc.dS)Naccelerate_wp_free_activater)client_activationsrrz9CloudlinuxSummary._fill_wpos_statistics.. s%))*GHHrrl&cmt_accelerate_wp_free_activated_in_uiz;Can't get statistic of AccelerateWP CMT activation selectedcJtjtSr)rrrr&rrrrz9CloudlinuxSummary._fill_wpos_statistics.. sBGNN#BCCr.cmt_is_accelerate_wp_free_activation_completedz2Can't get statistic of AccelerateWP CMT activationrr;features_visible_by_defaultcdS)Nrr wpos_statssrrz9CloudlinuxSummary._fill_wpos_statistics.. J'DErrn wpos_features_visible_by_defaultz*Can't get statistic of using AccelerateWP.features_allowed_by_defaultcdS)Nrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rr wpos_features_allowed_by_defaultc ddS)N enabled_sitesrrrsrrz9CloudlinuxSummary._fill_wpos_statistics..  ?3G<rsites_count_with_enabled_wposc ddS)N allowed_usersrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rrusers_count_with_allowed_wpos visible_usersc ddS)Nrrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. sJ7@rusers_count_with_visible_wposrrc dS)Nrrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. J7?rsites_count_with_enabled_ enabled_usersc dS)Nrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rrusers_count_with_enabled_rc dS)Nrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rrusers_count_with_allowed_allowed_suitesc dS)Nrrsuitersrrz9CloudlinuxSummary._fill_wpos_statistics.. J'78?rusers_count_with_allowed_suite_enabled_suitesc dS)Nrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rrusers_count_with_enabled_suite_c dS)Nrrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rrusers_count_with_visible_ upgrade_urls upgrade_url_cdS)N4accelerate_wp_suite_enabled_premium_suite_disallowedrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. s #YZrrcdS)N1accelerate_wp_suite_enabled_premium_suite_visiblerrsrrz9CloudlinuxSummary._fill_wpos_statistics.. s #VWrrc.dS)Nis_accelerate_wp_flag_enabledrrsrrz9CloudlinuxSummary._fill_wpos_statistics..  'FGGrrz1Can't get statistic of AccelerateWP feature flag.c.dS)Nis_accelerate_wp_icon_enabledrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. rrrz0Can't get statistic of AccelerateWP icon status.c.dS)N%is_smart_advice_notifications_enabledrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. s 'NOOrrzJCan't get statistic of AccelerateWP is_smart_advice_notifications_enabled.c.dS)N!is_smart_advice_reminders_enabledrrsrrz9CloudlinuxSummary._fill_wpos_statistics.. s 'JKKrrzFCan't get statistic of AccelerateWP is_smart_advice_reminders_enabled.c.dS)Nis_object_cache_banners_enabledrrsrrz9CloudlinuxSummary._fill_wpos_statistics.." s 'HIIrrzDCan't get statistic of AccelerateWP is_object_cache_banners_enabled.) rrget_wpos_statsr'rrrrr)ry upgrade_urlrrrrs @@@@rrz'CloudlinuxSummary._fill_wpos_statistics s_;;    0  !OBB "  ;   %% H H H H  4 I     %% C C  < @     j$ ' 'B JNN8,D,D ,Q,Q~~;<<H--EEEE6@  ~~;<<H--EEEE6@  O ) )<<<</<     O ) )<<<</<     ~~o.. --@@@@3@  %_5  W$$--?????/&8@  %.."==  --?????/&8@  %_5  W$$--?????/&8@  $(8"==  --?????5=@  $(8"==  --?????5=@ %.."==  W$$--?????/&8@ (2~~nb'I'I'O'O'Q'Q G G# ;F 788 O ) )ZZZZF<     O ) )WWWWC<     O ) )GGGG/C     O ) )GGGG/B     O ) )OOOO7\     O ) )KKKK3X     O ) )IIII1V      {B B ,Q,Qrcdg|z} t|d\}}}n3#t$r&}td|Yd}~dSd}~wwxYw|dkr|Std||dS)z Run cloudlinux-statistics using subprocess and handle errors. :type args: list[str] :rtype: str or None z/usr/sbin/cloudlinux-statisticsTrz.Unable to run cloudlinux-statistics, error: %sNrz;cloudlinux-statistics failed with exit code: %i, output: %s)rrrwrr)rprrrrrs r_run_cloudlinux_statisticsz,CloudlinuxSummary._run_cloudlinux_statistics( s11D8 )#$GGGOB!!$      OQR S S S44444  77O6798 E E Ets AA  AcZ|gd}|dS tj|}|d}|d}nM#ttt f$r3}t dt|Yd}~dSd}~wwxYwt|t|fS)zp Get number of users and resellers with faults for the past 24h :rtype: tuple[int, int] )z --by-faultrr|z --period=1dN)NNrrTzISomething really bad happened to cloudlinux-statistics, The reason is: %s) rrrrrrrwrrkr)ryr json_datarrTrs rrz5CloudlinuxSummary.get_users_and_resellers_with_faults< s 223a3a3abb  :  8,,I!+.Ig&EE*i0      $%(VV - - -:::::   5zz3y>>))s$AB (BB c|dS|}|drdS|drdS|drdS|rdSd|zS)zGet config cpu limit formatN%speedmhzghzold_cpu_formatz unknown: %s)lowerendswithisdigit)clsrKunits rrLz&CloudlinuxSummary._get_cpu_limit_unitsQ s ;4yy{{ ==   '7 ]]5 ! ! '5 ]]5 ! ! '5 \\^^ '## 3& &rc|dSd|zdzS)z/Convert memory limit from mempages to megabytesNrir)rs rrMz!CloudlinuxSummary._mempages_to_mbc s =45yD  rch|dStj||pd}|dSt|dz dS)z,Convert cpu and ncpu to percents of one coreNr)lncpugY@r2)riconvert_to_kernel_formatround)rKr6rs rrJz(CloudlinuxSummary._cpu_limit_to_percentsj sL ;42 tyq""" =4UU]A&&&rc|jttd|jDt d}g}t |t dD]8\}}tt|}|||f9| d||_|jS)zC Return list of tuples [users_in_package, package] Nc32K|]}|jj|VdSr)packager)rrs rrz>CloudlinuxSummary.get_users_amount_per_plan..} s9!|(44444rr)keyT)reverse) rsortedr)rTrr r rrr|)ryr8users_sorted_by_packagerrgroup num_userss rget_users_amount_per_planz+CloudlinuxSummary.get_users_amount_per_planu s   '&,%5%;%B%B%D%Dy)) ''' #!O")+I1F1F#H#H#H = =U ,, && 7';<<<<   . . .#2D ##rcb |||dz S#t$rYdSwxYwr&)r IndexError)ry number_of_topr8s rrpz5CloudlinuxSummary._get_top_package_by_number_of_users sI 112BCCMTUDUV V   44 s  ..crt|\}}|s"|t||S)z% Parse CLI arguments )r3rr-)ryrr@rEs rrzCloudlinuxSummary._parse_args s>5T::  7  !5!5 6 6 6 rr;rc|tj|d}|||d<t|dtj|dS)z? Print data in default format for web and exit )rr=rENstatistic_enabledT)r4r,sysrR)rrE exit_coder<rs rrSz(CloudlinuxSummary._print_result_and_exit sX   ++?G' ($''' rr2c|dtjit|dtj|dS)z Print error and exit :param dict message: Dictionary with keys "result" as string and optional "context" as dict r=TN)rr4r,rrR)rrGs rrz!CloudlinuxSummary._error_and_exit sG  TY[[1222$''' rctjdrGtjddgdtjtj}t j|jSdS)zD Return mod_lsapi info from switch_mod_lsapi script r z--statTrr-r8N) rrrrYrZr>rrr-rs rrz$CloudlinuxSummary.get_raw_lsapi_info sd 7>>5 6 6 ( ;XF$(&0o&0o777A:ah'' '  ( (rcbd}tr|dz }tj|rzt j|dgdtjtj}tj|j  d}d| D}|SdS) zd Return wmt-api config if is_solo_edition True, run wpt-api-solo is command z-/usr/share/web-monitoring-tool/wmtbin/wmt-apiz-soloz --config-getTrrc4i|]\}}|t|Sr)rk)rkr&s rr'z9CloudlinuxSummary._get_wmt_api_config.. s$%[%[%[DAqaQ%[%[%[rN) rrrrrYrZr>rrr-rr)commandrwmt_api_config_summarys rrz%CloudlinuxSummary._get_wmt_api_config s B     w G 7>>' " " *8tJOdndstttA%)Z%9%9%=%=h%G%G "%[%[>>rc@tjdS)Nz/etc/cloudlinux-containerrrrrrXz-CloudlinuxSummary._is_container_marker_exists sw~~9:::rctjdr2tjddgdd}t j|jSdS)zL Return statistics from cloudlinux-ssa-manager get-stat API z /usr/sbin/cloudlinux-ssa-managerget-statTrcapture_outputNrrrrYrZrrr-rs rrzCloudlinuxSummary.get_ssa_stats s] 7>>< = = ( BJO$(.2444A:ah'' '  ( (rcd}d}tj|r*d}tt ||ddd}|sd}nd }|S) z; Return statistics from Leapp upgrade logs z /var/log/leapp/leapp-upgrade.logrzHAn upgrade inhibitor detected\|Workflow interrupted due to the FailPhaseTF)r(r)Nr,r2)rrrnextr!) leapp_logfilergrep_strgrep_ress rrz!CloudlinuxSummary.get_leapp_stats sg ;  7>>- ( ( !bHD=t]bccceijjH !  rrcd}t||}|sdS|}|dkrdS|dkrdSt d|d|d ) z Get kmodlve parameter value: -1 - not supported (parameter file doesn't exist); 0 - disabled; 1 - enabled z/sys/module/kmodlve/parametersrYr2NrzUnable to interpret "z" kmodlve parameter value: "")rr read_textrrv)r params_dir param_file param_values rrz*CloudlinuxSummary._get_kmodlve_param_value s6 *j11   "" 2 **,,2244 #  1 C  1< <<-8<<<== =rcd}tj|rEtj|dgdd}t j|jdSdS)E Return statistics from cl-smart-advice counters API z/usr/sbin/cl-smart-advicecountersTr rEN) rrrrYrZrrr-rutilrs rget_smart_advice_statsz(CloudlinuxSummary.get_smart_advice_stats so + 7>>$   4z"#%%%A:ah''++F33 3  4 4rcNtdd}tds|j|jdd}|` t|d|dS#t $r5}t d t|||cYd}~Sd}~wwxYw|S) z= Construct dict with Smart Advice statistics N)smart_advice_totalsmart_advice_appliedT)skip_marker_checkrrz!Can't get Smart Advice statisticsrappliedzAUnexpected json response from server, field %s is missing in "%s") rrrrr!rrwrxrk)ryrsa_statsrs rrz.CloudlinuxSummary._get_smart_advice_statistics, s #!%   $d;;; "==+4H # "+3G+<-5i-@ """((89>$   (z"#%%%A:ah'' '  ( (r)rN)r;NrN)r2)rrrrr itertoolscompressrrrrrrrsrrVr r staticmethodrpropertyrrrrrrrrrr rrrr$r)r!r7r\rrrur4r9rr}rZrrlr;rrUrrrrTrrrrrrrrrrr0rQr\rqrsrrrrrkr8rr:rrr7rrrrrr2r6r9r@rGrJrMrOrRrUrWr.r`rxrrrrrrrrrrrrrrr5rrrrr rrr%r$r+rrrrr[rrr classmethodrLrMrJrrprrSrrrrVrWrXrrrr!rrrrrrrs <7" "$$$ )()@AA(()>??(()@AAIBKFKL###@@\@XX88\8@@\@\ 555n $ $X $      \  ;;\;HH\H<   555($$\$BBB\@@@H\0   \  tCH~$\.)#)#)#V4440 : :V : : : :\ : VS[8I PV ei nr    0%%\%N!!\!EEE80000d\$(??\?"    D P P P ' ' '\B<B<B>\>??\?;;\; ( (\ (\*=S=S===\=( 4 4\ 4@ ( (\ ( ( (rrcTt}|j|Sr)r1r  link_xml_node)rs rrr[ s$ XXF O!!### Mr) __future__rrr)rYbuiltinsrr-rrrrrrrr4r9rrw functoolsrr collectionsrr r future.utilsr operatorr multiprocessingrsocketrpathlibrr cldetectlibrriclcommonrclcommon.constr clcommon.librclcommon.lib.cleditionrrrrrclcommon.cpapirclcommon.utilsrrrrrrr r!r"clcommon.clwpos_libr#r$r%clcommon.lib.constsr&clcommon.lib.cmt_utilsr'clcommon.sysctlr(clconfigr)r*r+ cli_utilsr,r-cllimitslib_v2r.r/ clveconfigr0lveapir1cl_summary_arg_parser3typingr4r5r6r7r8r9r:r;clsummary.cl_summary_utilsr<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrL!clsummary.rpm_packages_statisticsrMclsummary.hardware_statisticsrNrOrPclwizard.modulesrQ lve_utilsrRrTvendors_api.configrSrT cldiaglibrUcl_proc_hidepidrVclselect.clselectstatisticsrWrXrYrZr[r\clselector.selectorlibr]clselect.clselectctlr^ lvemanagerrYr_rZ ImportErrorrrrwrr/rrr}rrERRORrrirrobjectrrrrrrZs'&&&&&   ((((((((,,,,,,,,""""""%%%%%%""""""&&&&&&655555                      eddddddddd??????999999&&&&&&NNNNNNNNNN6666666666666666######??????LLLLLLLLLLLLLLLLLLLL& )(((((::::::========333333::::::"=<<<<<888888@@@@@@@@@@@@@ " " "221-110 !! " - W 3 4 4    #   O&O&O&O&O&TO&O&O&d      f1(f1(f1(f1(f1(f1(f1(f1(Rcs:(F##F?>F?