§ ½@¾jýæã ó¬—ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZddlmZmZddlmZmZddlmZddlmZddlmZddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(Z)ddl*Z*ddl+Z+ddl,Z,dd l-m.Z.dd l/m0Z0dd l1m2Z2m3Z3m4Z4dd l5m6Z6dd l7m8Z8m9Z9ddl:m;Z;ddlZ>m?Z?ddl@mAZAddlBmCZCddlDmEZEddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQddlRmSZSmTZTmUZUddlVmWZWddlXmYZYmZZZddl[m\Z\m]Z]ddl^m_Z_ddl`maZaddlbmcZdddlemfZfddlgmhZhmiZiddljmkZlddljmmZnddlompZpdd lqmrZrdd!lsmtZumvZvdd"lwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZm€Z€m�Z�m‚Z‚mƒZƒm„Z„m…Z…m†Z†m‡Z‡mˆZˆdd#l‰mŠZŠm‹Z‹mŒZŒdd$l�mŽZŽd%d&l�m�Z�d%d'l‘m’Z’ dd(l“m”Z”dd)l•m–Z–m—Z—m˜Z˜m™Z™mšZšm›Z›dd*lœm�Z�dd+lžmŸZ ddlžmcZ¡n#e¢$reyZ›eyZ—eyZ–eyZ”eyZšeyZ˜eyZ™dZ�dZ¡dZ YnwxYw dd,l£m¤Z¤n #e¢$rdZ¤YnwxYw dd-l•m¥Z¥n #e¢$rdZ¥YnwxYw dd.l¦m§Z§n#e¢$rd/„Z§YnwxYw dd0l¨m©Z©mªZªn#e¢$r d1„Z©d2„ZªYnwxYwd3Z«ej¬d4¦«Z­d5Z®d6Z¯d7Z°d8Z±d9Z²d:Z³d;Z´dZ·d?Z¸d@Z¹dAZºdBZ»e¸e¹eºe»fZ¼dCZ½dDZ¾dEZ¿dFZÀdGZÁdHZÂdIZÃdJZÄdKZÅe jÆdLe jÇe jÈz¦«ZÉe jÆdMe jÇe jÈz¦«ZÊdNZËdOZÌdPZÍdQZÎdRZÏdSZÐdTeÑdUeÒeÑeÑffdV„ZÓdWedUe%eÔfdX„ZÕdYeÔdZeÑdUe%eÔfd[„ZÖdYeÔd\eÑd]eÔdUe&e%eÑe×ffd^„ZØdYeÔd\eÑdUe×fd_„ZÙd`e%eÑdUe×fda„ZÚdbeÔdUejÛeÑfdc„ZÜddeÝdUe×fde„ZÞGdf„dg¦«Zßdh„ZàdS)iéN)Údeepcopy)ÚCounterÚ defaultdict)Ú lru_cacheÚpartial)Ú cpu_count)ÚPath)Úgetfqdn)ÚAnyÚAnyStrÚCallableÚDictÚListÚOptionalÚTupleÚUnion)Úget_hidepid_typing_from_mounts)Úcpapi)Ú find_wp_pathsÚget_wp_cache_pluginÚ get_wp_paths_with_enabled_module)ÚFeature)Úis_panel_feature_supportedÚis_wp2_environment)Ú MySQLGovernor)Ú CLEditionsÚis_cl_shared_editionÚis_cl_solo_edition)Úclient_activation_data)ÚACCELERATE_WP_INSTALLED_FROM_CM)Ú SysCtlConf) ÚExternalProgramFailedÚget_cl_versionÚget_rhn_systemid_valueÚ get_virt_typeÚgrepÚis_litespeed_runningÚis_nginx_runningÚis_secureboot_enabledÚis_testing_enabled_repoÚ is_ubuntuÚ run_command)Úcagefs_statistics_configÚclconfig_utilsÚdb_governor_lib)Úis_email_notification_enabled)Úprint_dictionaryÚreplace_params)ÚDEFAULTSÚLimitsDataStorage)Ú EMPTY_LIMITS)Ú ALL_MODULES)Ú PKG_VERSION)ÚLvpMap)Ú CONFIG_PATHÚ_read_config_file)Úconfig)Ú id_registry)ÚWebsiteCollector)ÚFeatureManager)Ú METRIC_NAMESÚcollect_net_acct_metrics)Ú SummaryStatusÚdummy_none_functionÚget_cl_plus_sender_statusÚget_client_data_from_jwt_tokenÚ get_packages_with_lve_extensionsÚ$get_statistics_send_status_from_fileÚis_active_cloudlinux_licenseÚis_nodejs_selector_installedÚis_php_selector_installedÚis_python_selector_installedÚis_ruby_selector_installedÚis_sending_process_runningÚis_statistic_enabledÚis_statistic_rpm_enabledÚ set_statistic_collection_enabledÚ$set_statistic_rpm_collection_enabledÚ$write_statistics_send_status_to_file)Ú NotSupportedÚget_cpu_metricsÚget_memory_metrics)Úget_rpm_packages_infoé)Úparse_cloudlinux_summary_opts)ÚStatisticsDict)Úget_default_version)Úget_default_php_versionÚget_mode_of_php_selectorÚget_native_version_safeÚget_php_selector_usageÚget_versions_statisticsÚiter_server_applications)ÚCloudlinuxSelectorLib)Ú PKG_RELEASE)Úget_shared_node_modules_summary)Ú*get_nodejs_applications_and_shared_summary©Úlist_flags_infocó—gS©N©rhóúpy/clsummary/summary.pyrere§ó€Øˆ ri)Ú(is_website_isolation_allowed_server_wideÚ#users_with_enabled_domain_isolationcó—dS©NFrhrhrirjrlrl°s€Øˆuricó—iSrgrhrhrirjrmrm³rkriz/var/log/cloudlinux-summary.logzcloudlinux-summaryÚunknownÚ installedÚ not_installedÚnot_initializedÚ not_selectedÚenabledÚdisabledÚ unsupportedz-42)Úmultisite_statusÚautoupdate_statusÚmaxcache_statusÚmaxcache_directive_statusÚmod_rewrite_statusÚlogged_user_cache_statusÚlogged_common_user_cache_statusÚmobile_cache_statusÚ!mobile_separete_cache_file_statusÚtablet_as_mobile_statusÚssl_separate_cache_file_statusÚhas_dynamic_cookies_statusÚhas_mandatory_cookies_statusÚwebp_enabled_statusÚdomain_lve_allowed_users_totalÚdomain_lve_enabled_users_totalÚ'domain_lve_default_limits_domains_totalÚ&domain_lve_custom_limits_domains_totalgð?Ú!wp_rocket_plugin_maxcache_enabledÚ"wp_rocket_plugin_maxcache_disabled)ú wp-contentÚpluginsz wp-rocket)ÚincÚAddonÚMaxCachez MaxCache.phpz wp-rocket.php)r�úwp-rocket-configiz#^\s*z^\s*MaxCache\s+On\s*$éÚw3tc_plugin_maxcache_enabledÚw3tc_plugin_maxcache_disabled)r�rŽzw3-total-cachezw3-total-cache.phpzExtension_MaxCache_Core.phpÚ status_keyÚreturncó–—|dkrdS|dkrdS| d¦«}|dvr| d¦«}d|›d �d|›d �fS) a| Return (enabled_name, disabled_name) for a given AccelerateWP plugin status key. Default mapping: - awp_plugin__enabled / awp_plugin__disabled Special cases for reporting readability: - mod_rewrite_status -> awp_plugin_mod_rewrite_block_enabled/disabled - maxcache_directive_status -> awp_plugin_maxcache_directives_present/absent r})Ú$awp_plugin_mod_rewrite_block_enabledÚ%awp_plugin_mod_rewrite_block_disabledr|)Ú&awp_plugin_maxcache_directives_presentÚ%awp_plugin_maxcache_directives_absentÚ_status)Úhas_dynamic_cookiesÚhas_mandatory_cookiesÚhas_Ú awp_plugin_Ú_enabledÚ _disabled)Ú removesuffixÚ removeprefix)r–Úbases rjÚ!accelerate_wp_plugin_metric_namesr§+s|€ðÐ)Ò)Ð)Ø`Ð`àÐ0Ò0Ð0ØbÐbà × "Ò " 9Ñ -Ô -€DØ Ð?Ð?Ð?Ø× Ò  Ñ(Ô(ˆØ (˜$Ð (Ð (Ð (Ð*G¸Ð*GÐ*GÐ*GÐ HÐHriÚwp_rootcó˜— tj|tjtjztjz¦«S#t $rYdSwxYw)z¸ Open a WordPress root as a directory descriptor, or None. Follows a symlinked root, as find_wp_paths() hands them out that way; below it _open_subdir_nofollow() does not. N)ÚosÚopenÚO_RDONLYÚ O_DIRECTORYÚ O_NONBLOCKÚOSError)r¨s rjÚ _open_wp_rootr°BsK€ð ÝŒw�w¥¤ ­b¬nÑ <½r¼}Ñ LÑMÔMÐMøÝ ððð؈tˆtðøøøs‚8;» A ÁA Údir_fdÚnamescó0—d}|}|D]Ž} tj|tjtjztjztjz|¬¦«}n(#t $r|�tj|¦«YdSwxYw|�tj|¦«|}|}Œ�|S)z° Descend one component at a time from an open directory, refusing any symlink. Not one open: O_NOFOLLOW covers only a path's *last* component. Caller owns the fd. N©r±)rªr«r¬r­Ú O_NOFOLLOWr®r¯Úclose)r±r²ÚopenedÚcurrentÚnameÚnxts rjÚ_open_subdir_nofollowr»Ms¿€ð !€FØ€Gàððˆð Ý”'ØÝ” �bœnÑ,­r¬}Ñ<½r¼}ÑLØðñôˆCˆCøõ ð ð ð ØÐ!Ý”˜Ñ Ô Ð Ø�4�4�4ð øøøð Ð Ý ŒH�VÑ Ô Ð ØˆØˆˆà €MsŠAAÁ A8Á7A8r¹Ú max_bytescó— tj|tjtjztjz|¬¦«}n#t $rYdSt $rYdSwxYw tjtj |¦«j ¦«s |dkrtj |¦«dSdStj |d¦«5}d}|  |dz¦«}ddd¦«n #1swxYwYn-#t $r Y|dkrtj |¦«dSdSwxYw|dkrtj |¦«n #|dkrtj |¦«wwxYwt|¦«|krdS| d d ¬ ¦«d fS) aM Read one file from an open directory as root. Returns (text, readable). O_NOFOLLOW refuses a symlink, O_NONBLOCK a FIFO, S_ISREG the rest; binary because the cap is in bytes. Absent is (None, True) and an answer, refused is (None, False) and is not - confusing them publishes "could not look" as "not serving". r´)NTrorÚrbéÿÿÿÿrVNúutf-8Úreplace)ÚerrorsT)rªr«r¬rµr®ÚFileNotFoundErrorr¯ÚstatÚS_ISREGÚfstatÚst_moder¶ÚfdopenÚreadÚlenÚdecode)r±r¹r¼ÚfdÚfÚraws rjÚ_read_bounded_atrÏjsã€ðÝ ŒW�T�2œ;­¬Ñ6½¼ÑFÈvÐ VÑ VÔ VˆˆøÝ ððð؈zˆzÝ ððð؈{ˆ{ðøøøð ÝŒ|�BœH R™LœLÔ0Ñ1Ô1ð Øð �Š7ˆ7Ý ŒH�R‰LŒLˆLˆLˆLð ˆ7õ ŒY�r˜4Ñ Ô ð ( A؈BØ—&’&˜ Q™Ñ'Ô'ˆCð (ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (øøõ ðððØà �Š7ˆ7Ý ŒH�R‰LŒLˆLˆLˆLð ˆ7ðøøøð �Š7ˆ7Ý ŒH�R‰LŒLˆLøøð �Š7ˆ7Ý ŒH�R‰LŒLˆLˆLð øøøõ ˆ3�x„x�)ÒÐØˆ{Ø �:Š:�g iˆ:Ñ 0Ô 0°$Ð 6Ð6si‚;>¾ AÁ AÁAÁ+C.Â&C.Â;C"à C.Ã"C&Ã&C.Ã)C&Ã*C.Ã-D6Ã. DÃ8D6ÄDÄD6Ä6Ecó‚— tjtj||d¬¦«j¦«S#t$rYdSwxYw)z] Whether one name in an open directory is a plain file, without following a symlink. F)r±Úfollow_symlinks)rÄrÅrªrÇr¯)r±r¹s rjÚ_is_regular_file_atrÒŠsM€ðÝŒ|�BœG D°ÈÐOÑOÔOÔWÑXÔXÐXøÝ ððð؈uˆuðøøøs ‚-0° >½>Úhtaccesscóz—|€dSt |¦«duot |¦«duS)z:Whether a site's .htaccess hands its domains to MAx Cache.NF)ÚMAXCACHE_BLOCK_REÚsearchÚMAXCACHE_ON_RE)rÓs rjÚ_maxcache_is_servingrØ”s@€àÐØˆuÝ × #Ò # HÑ -Ô -°TÐ 9Ð i½n×>SÒ>SÐT\Ñ>]Ô>]ÐeiÐ>iÐiriÚ config_fdc#óLK—dtjtjdtjt fd„} tj|¦«5}tjt||¦«¦«}ddd¦«n #1swxYwYn#t$rYdSwxYw|Ed{V—†dS)a^ Yield one site's per-domain config file names, in name order, bounded in count. A dot before ".php" is how the plugin names one, and requiring it keeps status.php and a host's stray index.php from becoming a domain that dedup then claims server-wide. nsmallest and not sorted(), so the owner's directory size is not our memory. Úentriesr—c3ó¾K—|D]W}| d¬¦«r?|j d¦«r%d|j d¦«vr |jV—ŒXdS)NF)rÑú.phpú.)Úis_filer¹Úendswithr¤)rÛÚentrys rjÚ candidatesz0_iter_wp_rocket_config_names..candidates¤syèè€Øð !ð !ˆEà— ’ ¨e� Ñ4Ô4ð !à”J×'Ò'¨Ñ/Ô/ð !ð˜5œ:×2Ò2°6Ñ:Ô:Ð:Ð:à”jÐ Ð Ð øð  !ð !riN) ÚtypingÚIterablerªÚDirEntryÚIteratorÚstrÚscandirÚheapqÚ nsmallestÚ#WP_ROCKET_MAX_CONFIG_FILES_PER_SITEr¯)rÙrârÛr²s rjÚ_iter_wp_rocket_config_namesrì›sèè€ð!�FœO­B¬KÔ8ð!½V¼_ÍSÔ=Qð!ð!ð!ð!ðÝ ŒZ˜ Ñ "Ô "ð ^ gÝ”OÕ$GÈÈÐT[ÑI\ÔI\Ñ]Ô]ˆEð ^ð ^ð ^ñ ^ô ^ð ^ð ^ð ^ð ^ð ^ð ^øøøð ^ð ^ð ^ð ^øøå ðððØˆˆðøøøðÐÐÐÐÐÐÐÐÐs5»B Á$A?Á3 B Á?BÂB ÂBÂB  BÂBÚ site_dictcón—ttd„|d ¦«¦«¦«S)zB Checks if wordpress site has at least one enabled module có—|dS)Nrvrh)Úmodules rjúz*site_has_enabled_modules..ºs € &¨Ô"3€riÚmodules)ÚanyÚmapÚvalues)rís rjÚsite_has_enabled_modulesrö¶s1€õ �sÐ3Ð3°Y¸yÔ5I×5PÒ5PÑ5RÔ5RÑSÔSÑ TÔ TÐTric óò—eZdZUdZdZdddddœZejee e fe d<d Z eje e d <d Z eje e d <e jgd ¢ejej¦«ejej¦«ejej¦«g¦«ZdZdZdZdZd„Zed„¦«Zed„¦«Zede fd„¦«Zed„¦«Z ed„¦«Z!ed„¦«Z"defd„Z#ed„¦«Z$d„Z%d„Z&ede'fd„¦«Z(ed„¦«Z)ed e de fd!„¦«Z*d"„Z+d#„Z,d$„Z-ed%„¦«Z.dÝd'„Z/edÞd(„¦«Z0d)„Z1ed*„¦«Z2ed+„¦«Z3ed,e4e5e5fde'fd-„¦«Z6d.„Z7d/„Z8ed0e9d1e:dd&fd2„¦«Z;d3e4e:e9fd4e:d5e'dd&fd6„Zd9„Z?d:„Z@d;„ZAede fd<„¦«ZBdÞd=„ZCdÞd>„ZDed?„¦«ZEed@„¦«ZFdA„ZGedB„¦«ZHdÞdC„ZIdÞdD„ZJde4e e9ffdE„ZKedFe9de'fdG„¦«ZLedFe9dHe4e e9fde9fdI„¦«ZMdÞdJ„ZNdeOe9fdK„ZPdeOe9fdL„ZQedeOe9fdM„¦«ZRdÞdN„ZSdOeTdd&fdP„ZUdOeTdd&fdQ„ZVdOeTdd&fdR„ZWdÞdS„ZXdÞdT„ZYdU„ZZdV„Z[dWeOe\e]dd&fdX„Z^e_dWe\e]de4e e9ffdY„¦«Z`e_dZe]d[e4e e9fd\eae dd&fd]„¦«Zbed^e9de'fd_„¦«ZcdWeOe\e]d`e4e]e\e fdd&fda„Zde_dWe\e]d`e4e]e\e fde4e e9ffdb„¦«Zee_dZe]dce\e d[e4e e9fd\eae dd&f dd„¦«Zfed^e9de'fde„¦«Zgede9fdf„¦«ZhedWe\e]de4e e9ffdg„¦«Zidh„Zjdi„Zkedje dWe\fdk„¦«Zldeme\e]e\e]e4e e9fe4e]e\e fffdl„Zndemeae eae ffdm„Zodne doe dpe4e e fde4e epe\e fffdq„Zqdre de fds„Zreesd&¬t¦«du„¦«¦«ZtdÞdv„ZudÞdw„ZvdÞdx„Zwede4e e9ffdy„¦«Zxedze9d{e9deOe9fd|„¦«Zyedze9d}e9deOe9fd~„¦«Zzede{de9fd€„¦«Z|ede{de9fd�„¦«Z}ede{de9fd‚„¦«Z~ede{defdƒ„¦«Z€de{de9fd„„Z�ede{de9fd…„¦«Z‚ede{de9fd†„¦«Zƒde{defd‡„Z„edˆed‰e de{e fdŠ„¦«Z…ed e de{fd‹„¦«Z†dÝdŒe{d&zdd&fd�„Z‡deˆfdŽ„Z‰dÝd�eˆd&zdd&fd�„ZŠd‘e dd&fd’„Z‹edefd“„¦«ZŒdÞd”„Z�ed•„¦«ZŽd–„Z�ed—„¦«Z�ed˜„¦«Z‘ed™„¦«Z’ede'fdš„¦«Z“ede'fd›„¦«Z”ede9fdœ„¦«Z•ede fd�„¦«Z–edž„¦«Z—dŸ„Z˜d „Z™d¡e:deOe9fd¢„Zšd£„Z›d¤„Zœd¥„Z�d¦„Zžd§„ZŸede4fd¨„¦«Z d©„Z¡dª„Z¢deme9e9e9ffd«„Z£edeme9e ffd¬„¦«Z¤d­„Z¥d®„Z¦dÞd¯„Z§dÞd°„Z¨dÞd±„Z©d²„Zªd³„Z«d´„Z¬dµ„Z­d¶„Z®ed·„¦«Z¯d¸„Z°deOe9fd¹„Z±deOe9fdº„Z²e_d»„¦«Z³ed¼„¦«Z´ed½„¦«ZµdOeTde{eˆe9e fd¾ffd¿„Z¶dÀe9dOeTdeOeme9e ffdÁ„Z·d„Z¸e dßdÅe dÆe¹d&zdÇe9dÈe'd&zdejºf dÉ„¦«Z»edàdËedÌe9deOd&fdÍ„¦«Z¼edeOe4fd΄¦«Z½edÏ„¦«Z¾edЄ¦«Z¿edÑ„¦«ZÀedÒ„¦«ZÁedeOe4fdÓ„¦«ZÂedefdÔ„¦«ZÃedÕe de9fdÖ„¦«ZÄedeOe4fdׄ¦«ZÅde4fdØ„ZÆdeOe4fdÙ„ZÇedeOe4fdÚ„¦«ZÈedeOe4fdÛ„¦«ZÉede fdÜ„¦«ZÊd&S)áÚCloudlinuxSummaryz/var/lve/dashboard_certificatez/etc/cl_plus/.disabledÚapplications_amountÚ users_amountÚstorage_allocated_bytesÚestimated_saved_bytes)Ú'shared_node_modules_applications_amountÚ shared_node_modules_users_amountÚ+shared_node_modules_storage_allocated_bytesÚ)shared_node_modules_estimated_saved_bytesÚSHARED_NODE_MODULES_METRICSÚ+shared_node_modules_poisoned_entries_amountÚ+SHARED_NODE_MODULES_POISONED_ENTRIES_METRICÚ%shared_node_modules_measurement_staleÚ,SHARED_NODE_MODULES_MEASUREMENT_STALE_METRIC)ÚpythonÚrubyÚnodejsz-https://stat-api.cloudlinux.com/api/clos-statz/https://stat-api.cloudlinux.com/api/clos-uploadz-https://stat-api.cloudlinux.com/api/rpm-statsz6https://repo.cloudlinux.com/static/cl-settings-v1.jsoncóØ—i|_d|_t¦«|_d|_d|_| ¦«|_d|_t¦«|_ d|_ dSrg) Ú_optsÚ_security_tokenrXÚ statisticsÚ_lvpmapÚ _system_idÚ_is_process_not_limitedÚis_process_not_limitedÚpackages_by_lenr!ÚsysctlÚremote_settings©Úselfs rjÚ__init__zCloudlinuxSummary.__init__Øsa€ØˆŒ Ø#ˆÔÝ*8Ñ*:Ô*:ˆŒØˆŒ ؈ŒØ&*×&BÒ&BÑ&DÔ&DˆÔ#Ø#ˆÔÝ ‘l”lˆŒ Ø#ˆÔÐÐricó¾—ttj d¦«¦«}ttj d¦«¦«}| o| S)zm Return true if process is running outside LVE or it's not running by utility `nice` ÚRUNNING_BY_NICEÚRUNNING_IN_LVE)ÚboolrªÚenvironÚget)Úis_running_by_niceÚis_running_in_lves rjrz)CloudlinuxSummary._is_process_not_limitedãsP€õ "¥"¤*§.¢.Ð1BÑ"CÔ"CÑDÔDÐÝ ¥¤§¢Ð0@Ñ!AÔ!AÑBÔBÐà%Ð%Ð?Ð.?Ð*?Ð?ricóD—|j€t¦«|_|jS)z. Load lvpmap only when needed )r Ú _get_lvpmaprs rjÚlvpmapzCloudlinuxSummary.lvpmapîs€ð Œ<Ð Ý&™=œ=ˆDŒLØŒ|Ðrir—cóF—|j€td¦«|_|jS)NÚ system_id)rr$rs rjr#zCloudlinuxSummary.system_id÷s#€ð Œ?Ð "Ý4°[ÑAÔAˆDŒOØŒÐricó&—t¦«rdndS)NÚubuntuÚ rhel_like)r+rhrirjÚ _get_platformzCloudlinuxSummary._get_platformþs€å$™;œ;Ð7ˆxˆx¨KÐ7ricó:—t¦«rtntSrg)r)ÚENABLEDÚDISABLEDrhrirjÚ_detect_securebootz$CloudlinuxSummary._detect_secureboots€å/Ñ1Ô1Ð?�wˆwµxÐ?ricó–‡—tjtjzŠd ˆfd„t d¦«D¦«¦«}|S)NÚc3ó@•K—|]}tj‰¦«V—ŒdSrg)ÚsecretsÚchoice)Ú.0Ú_Úrange_for_random_choices €rjú z=CloudlinuxSummary._generate_security_token.. s.øèè€Ð \Ð \ÈQ¥¤Ð0GÑ!HÔ!HÐ \Ð \Ð \Ð \Ð \Ð \rié@)ÚstringÚ ascii_lettersÚdigitsÚjoinÚrange)Úsecurity_tokenr3s @rjÚ_generate_security_tokenz*CloudlinuxSummary._generate_security_tokensIø€å"(Ô"6½¼Ñ"FÐØŸšÐ \Ð \Ð \Ð \ÕRWÐXZÑR[ÔR[Ð \Ñ \Ô \Ñ\Ô\ˆØÐricóô—i}|j€3d}t |¦«| d|i¦«d|j›�}t |¦«|j|jdœ}d} tj|j|d¬¦«}n\#tj $rJ}t|¦«}t |¦«| d|i¦«Yd}~nd}~wwxYw|j sCd|j ›d|j ›�}t |¦«| d|i¦«t d ¦« | ¦«d}t|dt ¦«r-|d | ¦«¦«t d ¦«nª#t&t(f$r6d }t |¦«| d|i¦«Yndt*$rX}t d t|¦«|j¦«| dd t.›d�i¦«Yd}~nd}~wwxYw|S)NzSecurity token is emptyÚresultzGetting statistics from server )r#r;é<)ÚparamsÚtimeoutú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"z"Invalid response from server. See z for details.)r;Ú app_loggerÚerrorÚ_error_and_exitÚ SUMMARY_URLÚinfor#ÚrequestsrÚRequestExceptionrçÚokÚ status_codeÚreasonÚjsonÚ isinstanceÚdictÚupdateÚ_get_smart_advice_statisticsÚ TypeErrorÚ ValueErrorÚKeyErrorÚtextÚLOG_FILE)rÚ stat_dataÚmessager@ÚresponseÚes rjÚ_get_remote_dataz"CloudlinuxSummary._get_remote_data s¸€àˆ à Ô Ð &Ø/ˆGÝ × Ò ˜WÑ %Ô %Ð %Ø × Ò  (¨GÐ!4Ñ 5Ô 5Ð 5àF°DÔ4DÐFÐFˆÝ�Š˜Ñ Ô Ð àœØ"Ô1ð ð ˆðˆð 6Ý”| DÔ$4¸VÈRÐPÑPÔPˆHˆHøÝÔ(ð 6ð 6ð 6ݘ!‘f”fˆGÝ × Ò ˜WÑ %Ô %Ð %Ø × Ò  (¨GÐ!4Ñ 5Ô 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5øøøøð 6øøøð Œ{ð 6Øf°XÔ5IÐfÐfÐU]ÔUdÐfÐfˆGÝ �OŠO˜GÑ $Ô $Ð $Ø × Ò  (¨GÐ!4Ñ 5Ô 5Ð 5å�ŠÐ;Ñ<Ô<Ð<ð LØ Ÿ š ™œ¨Ô1ˆIõ˜) HÔ-­tÑ4Ô4ð Pؘ(Ô#×*Ò*¨4×+LÒ+LÑ+NÔ+NÑOÔOÐOõ �OŠOÐJÑ KÔ KÐ KÐ Køõ�:Ð&ð 6ð 6ð 6Ø8ˆGÝ × Ò ˜WÑ %Ô %Ð %Ø × Ò  (¨GÐ!4Ñ 5Ô 5Ð 5Ð 5Ð 5Ýð nð nð nÝ × Ò Ð\Õ^aÐbcÑ^dÔ^dÐfnÔfsÑ tÔ tÐ tØ × Ò  (Ð,kÕT\Ð,kÐ,kÐ,kÐ!lÑ mÔ mÐ mÐ mÐ mÐ mÐ mÐ møøøøð nøøøð Ðs:Á3BÂC)ÂAC$Ã$C)ÅA"GÇAI5È I5ÈAI0É0I5có —|j�|jStj |j¦«r| ¦«|_n2| ¦«}| |¦«r|nd|_|jSrg)r rªÚpathÚisfileÚDASHBOARD_CERTIFICATEÚ_read_token_from_filer<Ú_write_token_to_file)rÚtokens rjr;z CloudlinuxSummary.security_token;s�€à Ô Ð +ØÔ'Ð 'Ý Œ7�>Š>˜$Ô4Ñ 5Ô 5ð WØ#'×#=Ò#=Ñ#?Ô#?ˆDÔ Ð ð×1Ò1Ñ3Ô3ˆEØ,0×,EÒ,EÀeÑ,LÔ,LÐ#V 5 5ÐRVˆDÔ ØÔ#Ð#ricóÆ— tj|jtjtjztjzd¦«}tj|d¦«tj|dd¬¦«5}| |¦«ddd¦«n #1swxYwYdS#ttf$r3}t  dt|¦«¦«Yd}~dSd}~wwxYw) z˜ Write security token to file and return success/fail status :param token: generated security token :return: T/F status i€ÚwrÀ©ÚencodingNTz,Error while writing secure token to file: %sF)rªr«r`ÚO_WRONLYÚO_CREATÚO_TRUNCÚfchmodrÈÚwriteÚIOErrorr¯rDrErç)rrcrÌrÍr[s rjrbz&CloudlinuxSummary._write_token_to_fileGs€ð  õ ”˜Ô3Ýœ¥r¤zÑ1µB´JÑ>ÀñGôGˆBå ŒI�b˜%Ñ Ô Ð Ý”˜2˜s¨WÐ5Ñ5Ô5ð ¸Ø—’˜‘”�ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�4øÝ�Ð!ð ð ð Ý × Ò ÐKÍSÐQRÉVÌVÑ TÔ TÐ TØ�5�5�5�5�5øøøøð øøøs<‚A+BÁ-B BÂBÂBÂBÂBÂC Â-(CÃC cóD— t|jdd¬¦«5}| ¦« ¦«pdcddd¦«S#1swxYwYdS#tt f$r3}t  dt|¦«¦«Yd}~dSd}~wwxYw)NÚrrÀrfz.Error while reading file with secure token: %s) r«r`rÉÚstriprmr¯rDrErç)rrÍr[s rjraz'CloudlinuxSummary._read_token_from_file]sé€ð Ý�dÔ0°#ÀÐHÑHÔHð 0ÈAØ—v’v‘x”x—~’~Ñ'Ô'Ð/¨4ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0øå�Ð!ð ð ð Ý × Ò ÐMÍsÐSTÉvÌvÑ VÔ VÐ VØ�4�4�4�4�4øøøøð øøøs:‚A™(AÁ AÁAÁAÁAÁAÁBÁ,(BÂBcóF—tjtjddd¬¦«S)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)ÚdetectÚget_boolean_paramÚCL_CONFIG_FILErhrirjÚ_detect_old_lve_integrationz-CloudlinuxSummary._detect_old_lve_integrationes-€õÔ'ÝÔ+Ø1ØØð  ñ ô ð ricó@—tj d¦«S)zO Detects presence/absence of lsapi :return: True/False ú/usr/bin/switch_mod_lsapi©rªr^ÚexistsrhrirjÚ_is_lsapi_presentz#CloudlinuxSummary._is_lsapi_presentts€õ Œw�~Š~Ð9Ñ:Ô:Ð:riÚ interpretercó—|dkrt¦«stSnY|dkrt¦«rtntS|dkrt ¦«stSn|dkrt ¦«stSt |¦«}|€tS|dvr@ | ¦«drtntS#t$r tcYSwxYw|dkr"|  ¦«rtntStd|›�¦«‚) zP Get selector status for nodejs, python, ruby and php selectors rrrÚphpN)rrÚselector_enabledzUnknown interpreter: ) rJÚ NOT_INSTALLEDrKr)rHrIr`Úget_selector_statusr*rUÚphp_selector_is_disabledrT)r�Úlibs rjÚ_get_status_of_selectorz)CloudlinuxSummary._get_status_of_selector|s8€ð ˜(Ò "Ð "Ý/Ñ1Ô1ð %Ý$Ð$ð %à ˜FÒ "Ð "Ý8Ñ:Ô:ÐM•7�7Å Ð MØ ˜HÒ $Ð $Ý/Ñ1Ô1ð %Ý$Ð$ð %à ˜EÒ !Ð !Õ*CÑ*EÔ*EÐ !Ý Ð å# KÑ0Ô0ˆØ ˆ;Ý Ð à Ð.Ð .Ð .ð %Ø"%×"9Ò"9Ñ";Ô";аÐ>Ð>Ñ?Ô?Ð?sÂ'B;Â;CÃCcóÞ—|jr|jS tj|d¬¦« ¦«|_|jS#tj$rW}t  dt|¦«¦«| dt|¦«i¦«Yd}~dSd}~wttf$r3}t  dt|¦«¦«Yd}~dSd}~wwxYw)Né )rAz3Request exception while getting remote settings: %sr>z'Error while parsing remote settings: %s) rrIrrNrJrDrErçrFrTrS)rÚ settings_urlr[s rjÚ_get_remote_settingsz&CloudlinuxSummary._get_remote_settingsšs€Ø Ô ð (ØÔ'Ð 'ð Ý#+¤<° ÀbÐ#IÑ#IÔ#I×#NÒ#NÑ#PÔ#PˆDÔ ØÔ'Ð 'øÝÔ(ð 5ð 5ð 5Ý × Ò ÐRÕTWÐXYÑTZÔTZÑ [Ô [Ð [Ø × Ò  (­C°©F¬FÐ!3Ñ 4Ô 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4øøøøÝ�IÐ&ð ð ð Ý × Ò ÐFÍÈAÉÌÑ OÔ OÐ OØ�4�4�4�4�4øøøøð øøøs$�3AÁC,ÁA B%Â%C,Â9(C'Ã'C,có—|j d¦«rdSttj d¦«¦«}|rdS| |j¦«}|€dS |dd}|ddo| |¦«S#ttf$rW}t  d t|¦«¦«|  d t|¦«i¦«Yd}~dSd}~wwxYw) z- Return cl-statistics status ú--force-collectTÚCL_TEST_SYSTEMNFz cl-statisticsz rollout-grouprvz4Error occurred while trying to get rollout group: %sr>)r rrrªrr�Ú SETTINGS_URLÚ _match_serverrUrSrDrErçrF)rÚis_test_environmentÚsettingsÚ rollout_groupr[s rjÚ_is_statistics_enabledz(CloudlinuxSummary._is_statistics_enabled§s€ð Œ:�>Š>Ð+Ñ ,Ô ,ð Ø�4å"¥2¤:§>¢>Ð2BÑ#CÔ#CÑDÔDÐØ ð Ø�4Ø×,Ò,¨TÔ->Ñ?Ô?ˆØ Ð Ø�5ð 5Ø$ _Ô5°oÔFˆMؘOÔ,¨YÔ7Ð]¸D×._prepare_metadataÀsrø€å  §¢°¸bÑ!AÔ!AÑBÔBÝ  §¢°¸bÑ!AÔ!AÑBÔBÝ*<Ñ*>Ô*>Ð!V  ÅFÔDTÑDVÔDVØ"&×"@Ò"@Ñ"BÔ"Bð ðˆHð ˆOrir�T)rDrÓ)Úserver_metadatarMzFError occurred while trying to get decision for htaccess collection=%sN) rrªrrr>rDÚ get_decisionÚ ExceptionrErç)rrŸr¡r“r Úhtaccess_collectionr[s` rjÚ_website_collector_statusz+CloudlinuxSummary._website_collector_status¼séø€ð ð ð ð ð õ#¥2¤:§>¢>Ð2BÑ#CÔ#CÑDÔDÐØ ð Ø�4à$Ð$ [Ñ1Ô1ˆð Ý"0½JÐ"GÑ"GÔ"G×"TÒ"TÐemØGQð#Uñ#Sô#SÐ Ð øåð ð ð Ý × Ò ÐeÝ  ™VœVñ %ô %ð %àˆIˆIˆIˆIˆIˆIøøøøð øøøð#Ð"sÁ*A.Á. B,Á8)B'Â!B,Â'B,có"—t|d¦«S)Né©Úint)Ú hash_servers rjÚ _to_numberzCloudlinuxSummary._to_numberÙs€å�; Ñ#Ô#Ð#riNcóü—|j€dS|j}|r |j›d|›�}tj| ¦«¦« ¦«dd…}| |¦«d|zzdkS)NTú:éér)r#ÚhashlibÚsha256ÚencodeÚ hexdigestr¬)rÚurl_numÚsaltÚ hash_inputr«s rjr’zCloudlinuxSummary._match_serverÝs…€Ø Œ>Ð !à�4ð”^ˆ Ø ð 4Ø œNÐ3Ð3¨TÐ3Ð3ˆJå”n Z×%6Ò%6Ñ%8Ô%8Ñ9Ô9×CÒCÑEÔEÀcÀrÀcÔJˆ Ø—’  Ñ,Ô,¨q°G©|Ñ;ÀÒAÐAricóˆ—d}|r9t¦«s/|dz}tjd¦«|rt¦«¯)dSdSdSdS)zC Wait for running background process of cl-summary é2rVgš™™™™™¹?N)rLÚtimeÚsleep)Úretriess rjÚ_wait_for_background_processz.CloudlinuxSummary._wait_for_background_processêsu€ð ˆØð Õ8Ñ:Ô:ð Ø �q‰LˆGÝ ŒJ�s‰OŒOˆOðð Õ8Ñ:Ô:ð ð ð ð ð ð ð ð ð ricóL —|jds |jdrBt|jd¦«tj¦«ddœ}t|d¦«dS|jds |jdrBt |jd¦«tj¦«ddœ}t|d¦«dS|jdrpt ¦«rd nd }tj¦«|dd œ}| d t¦«i¦«t|d¦«tj d ¦«|j  d¦«r7|  ¦«}|  |t¦«¬¦«|j  d¦«rÃt¦«s3|j  d¦«s| ddid ¬¦«| ¦«|j  d¦«r=| |j|jd¬¦«t( d¦«nt|jd¦«dS| ¦«sIt.jdtj¦«dœ}t3|¦«| ddid ¬¦«|j  d¦«rä|j  d¦«sWt¦«sIt.jdtj¦«dœ}t3|¦«| ddid ¬¦«|j€ld}t( |¦«t.jdt8›d �tj¦«dœ}t3|¦«| d|i¦«|j  d!¦«rºt ¦«rtj¦«d dd œ}npt3t.jtj¦«dd"œ¦«t=jd#dd$d¬%¦«|  ¦«tj¦«ddœ}t|d¦«tj d ¦«|jdr„|j!rMt d¬&¦«r=tj¦«d dd œ}t|d¦«tj d ¦«dSt3t.jtj¦«dd"œ¦«dSdS)'NÚenableÚdisableÚsuccess©Ú timestampr>Tú enable-rpmú disable-rpmÚstatusÚ collectingÚready)rÃrÆr>Úsending_statusrú get-remote)ÚdatarMú rpm-packagesr�r>z\Sending RPM statistics is disabled by admin. Use --force-collect to ignore admin`s settings.)Ú error_codeú--sendF©ÚsummaryÚurlÚ save_statuszRPM statistics sentzkStatistics collection is disabled globally. Please, try again later or contact support if it happens again.)r>rMrÃ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 emptyz^We are not able to collect statistics because we are not able to make a security token. Check z for details or contact support.ú--async)r>rÃrMz9/usr/sbin/cloudlinux-summary --send --json &> /dev/null &ú /bin/bash)ÚshellÚ executableÚcheck)Ú acquire_lock)"r rOrºr1rPrLrQrFÚsysÚexitrr\Ú_print_result_and_exitrMrNrFÚ_get_rpm_packages_summaryÚ _send_statistics_and_save_statusr ÚRPM_PACKAGES_URLrDrHr–rAÚFAILEDrQr;rErWÚ IN_PROGRESSÚ subprocessÚrunr½r)rrËrÆr>Ú status_dictrYs rjÚ&_actions_before_run_process_as_limitedz8CloudlinuxSummary._actions_before_run_process_as_limitedôsq€Ø Œ:�hÔ ð  4¤:¨iÔ#8ð å ,¨T¬Z¸Ô-AÑ BÔ BÐ Bå!%¤¡¤¸ ÐBÐBˆDÝ ˜T 4Ñ (Ô (Ð (Ø ˆFØ Œ:�lÔ #ð  t¤z°-Ô'@ð å 0°´¸LÔ1IÑ JÔ JÐ Jå!%¤¡¤¸ ÐBÐBˆDÝ ˜T 4Ñ (Ô (Ð (Ø ˆFØ Œ:�hÔ ð å%?Ñ%AÔ%AÐN�\�\ÀwˆFÝ!%¤¡¤¸È)ÐTÐTˆDà �KŠKÐ)Õ+OÑ+QÔ+QÐRÑ SÔ SÐ SÝ ˜T 4Ñ (Ô (Ð (Ý ŒH�Q‰KŒKˆKØ Œ:�>Š>˜,Ñ 'Ô 'ð bØ×*Ò*Ñ,Ô,ˆFà × 'Ò '¨VÕJ^ÑJ`ÔJ`Ð 'Ñ aÔ aÐ aØ Œ:�>Š>˜.Ñ )Ô )ð Ý+Ñ-Ô-ð °d´j·n²nÐEVÑ6WÔ6Wð Ø×$Ò$à ð#Jðð !ð %ñôðð × *Ò *Ñ ,Ô ,Ð ,ØŒz�~Š~˜hÑ'Ô'ð 8Ø×5Ò5Ø œOØÔ-Ø %ð6ñôðõ —’Ð 5Ñ6Ô6Ð6Ð6å  ¤°$Ñ7Ô7Ð7Ø ˆFØ×*Ò*Ñ,Ô,ð å'Ô.ðRå!œY™[œ[ð ðˆKõ 1°Ñ =Ô =Ð =Ø × Ò àðDððð !ñ ô ð ð Œ:�>Š>˜(Ñ #Ô #ð :Ø”:—>’>Ð"3Ñ4Ô4ð Õ=QÑ=SÔ=Sð å+Ô2ðJå!%¤¡¤ð ð� õ 5°[ÑAÔAÐAØ×$Ò$à ð#Jðð !ð %ñôððÔ"Ð*ØT�Ý× Ò  Ñ)Ô)Ð)å+Ô2ð6ÝGOð6ð6ð6õ"&¤¡¤ð ð� õ5°[ÑAÔAÐAØ×$Ò$ h°Ð%8Ñ9Ô9Ð9Ø Œ:�>Š>˜)Ñ $Ô $ð å)Ñ+Ô+ð Gõ&*¤Y¡[¤[¸LÐT]Ð^Ð^��õ 5Ý,Ô8ÅtÄyÁ{Ä{Ð^bÐcÐcñôðõ”ØOØØ*Øð ñôðð ×1Ò1Ñ3Ô3Ð3Ý%)¤Y¡[¤[¸IÐFÐF�Ý ˜T 4Ñ (Ô (Ð (Ý ŒH�Q‰KŒKˆKð Œ:�hÔ ð ØÔ*ð Õ/IÐW[Ð/\Ñ/\Ô/\ð õ &*¤Y¡[¤[¸LÐT]Ð^Ð^�Ý   tÑ,Ô,Ð,Ý”˜‘ ” � � � õ5Ý,Ô8ÅtÄyÁ{Ä{Ð^bÐcÐcñôðððð ð ric ó¸—tjtjddd¬¦«¦«}tj|¦«5}| dt |¦«g¦«t 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_cpuÚls_cpusÚ ls_memory_phyú--lve-idz/bin/lve_suwrapperú-nú/usr/sbin/cloudlinux-summaryÚ1)rÚCPU_DATA©ÚenvN)Ú lvectllibÚmake_liblve_settingsÚcreate_liblve_settingsÚ temporary_lveÚextendrçráÚcallrPrªrrNÚdumpsÚ CPUINFO_DATA)Úargsr”Úlve_ids rjÚ_run_self_in_lvez"CloudlinuxSummary._run_self_in_lve„s€õÔ1Ý Ô ,ØØØ,ð ñ ô ñ ô ˆõÔ $ XÑ .Ô .ð °&Ø �KŠK˜¥S¨¡[¤[Ð1Ñ 2Ô 2Ð 2Ý”?Ø% t­S°©[¬[Ð:XÐYÐ\`Ñ`ÝÝ”JØ#&õ"œZ­ Ô(>Ñ?Ô?ð ñôð ñ ô ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s¾BCÃCÃCcój—tjgd¢|zttjd¬¦«¬¦«S)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/nicerëÚ19rìrí)rrï)rárörPrªr)rùs rjÚ_run_self_by_nicez#CloudlinuxSummary._run_self_by_nice sE€õŒØ IÐ IÐ IÈDÑ PÝÝ” Ø #ðñôð ñ ô ð riÚoptscó|‡—tˆfd„dD¦«¦«rdStˆfd„dD¦«¦«rdSdS)zK Check that passed command should run as unlimited process c3ó(•K—|] }‰|V—Œ dSrgrh©r1Úoptionrÿs €rjr4zECloudlinuxSummary._should_run_as_unlimited_process..´s;øèè€ð  ð  àð �ŒLð  ð  ð  ð  ð  ð  ri)rÌrÆrÊr¿rÀrÄrÅTc3ó(•K—|] }‰|V—Œ dSrgrhrs €rjr4zECloudlinuxSummary._should_run_as_unlimited_process..Ás;øèè€ð ð àð �ŒLð ð ð ð ð ð ri)rÎrÓú--jsonr�F)ró)rÿs`rjÚ _should_run_as_unlimited_processz2CloudlinuxSummary._should_run_as_unlimited_process¯sŒø€õ ð  ð  ð  ð  ðð  ñ  ô  ñ ô ð ð�4Ý ð ð ð ð ðð ñ ô ñ ô ð ð�5؈uricó²—| |¦«|_|j�r)| ¦«| |j¦«rt jd¦«dSttj ¦«s+|  |¦«}t j|¦«dS |  |¦«}t j|¦«dS#tj $rc}d|›�}t|¦«tjt"¦«}| |d¬¦«t jd¦«Yd}~dSd}~wwxYw| |j¦«r]d}t'j¦«|dœ}t( ||j¬¦«t-|d¦«t jd ¦«| ¦«dS) Nrz"failed to run task in lve, error: T)Úexc_infor¿z|You shouldn't use env var "RUNNING_IN_LVE" or "RUNNING_BY_NICE" for run of any command except collection of main statistics.rÂ)ÚextrarV)Ú _parse_argsr rrärrÙrÚrrÚLVErþrûrñÚ PyLveErrorÚprintÚloggingÚ getLoggerÚ__name__Ú exceptionrºrDrEr1Úrun_get_summary)rÚargvÚrcr[Ú error_msgÚlogÚerr_msgrËs rjrâzCloudlinuxSummary.runÍsÌ€à×%Ò% dÑ+Ô+ˆŒ Ø Ô &ñ( #ð × 7Ò 7Ñ 9Ô 9Ð 9ð×4Ò4°T´ZÑ@Ô@ð !Ý”˜‘ ” � � � Ý/µ´ Ñ<Ô<ð !Ø×+Ò+¨DÑ1Ô1�Ý”˜‘ ” � � � ð!Ø×.Ò.¨tÑ4Ô4�BÝ”H˜R‘L”L�L�L�LøÝ Ô+ð!ð!ð!Ø HÀQÐ HÐ H�Iݘ)Ñ$Ô$Ð$Ý!Ô+­HÑ5Ô5�CØ—M’M )°d�MÑ;Ô;Ð;Ý”H˜R‘L”L�L�L�L�L�L�L�Løøøøð !øøøð×4Ò4°T´ZÑ@Ô@ð ð*ðõ"&¤¡¤Ø%ðð�õ× Ò  °´ Ð Ñ;Ô;Ð;Ý   tÑ,Ô,Ð,Ý”˜‘ ” � Ø × Ò Ñ "Ô "Ð "Ð "Ð "sÂ,)CÃE Ã&AEÅE có—tj¦«}| ¦«tj¦«|z }||jd<|jdr0|j t |j|¦«ddd¦«|j d¦«r†| |j|j d¬¦«t  d ¦« |  ¦«dS#t$r&}t d |¦«Yd}~dSd}~wwxYwt|j¦«}| d d¦«t#|d¦«dS) NÚcl_summary_execution_timerêrçÚcl_summary_max_mem_usedz,Can't get memory usage by cloudlinux-summaryrÎTrÏzMain statistics sentúWebsite collector failed: %sr;)rºÚ _get_summaryr r Ú add_metricrÚ_get_max_memoryrrÝrGrDrHÚwebsite_collectorr¤rErPÚpopr1)rÚ start_timeÚ running_timer[Úprintable_statisticss rjrz!CloudlinuxSummary.run_get_summaryús€€Ý”Y‘[”[ˆ Ø ×ÒÑÔÐÝ”y‘{”{ ZÑ/ˆ Ø7CˆŒÐ3Ñ4à Œ:�jÔ !ð Ø ŒO× &Ò &ݘÔ,¨lÑ;Ô;ØØ)Ø>ñ  ô ð ð Œ:�>Š>˜(Ñ #Ô #ð 9à × 1Ò 1ØœØÔ$Ø ð 2ñ ô ð õ �OŠOÐ2Ñ 3Ô 3Ð 3ð Dà×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝð Dð Dð DÝ× Ò Ð!?ÀÑCÔCÐCÐCÐCÐCÐCÐCÐCøøøøð Døøøõ $(¨¬Ñ#8Ô#8Ð Ø × $Ò $Ð%5°tÑ <Ô <Ð <Ý Ð1°4Ñ 8Ô 8Ð 8Ð 8Ð 8sÃC2Ã2 D"Ã<DÄD"rÃÚsummary_resultcóv—tj|dœ}|dkr||d<tj|d<t|¦«dS)z@ Save status of sending statistics to json file ©r>rÃrÁrMr>N)rAÚSUCCESSrßrQ)rÃr$rãs rjÚ _save_statuszCloudlinuxSummary._save_statussJ€õ "/Ô!6ÀYÐOÐOˆ Ø ˜YÒ &Ð &à$2ˆK˜Ñ !Ý$1Ô$8ˆK˜Ñ !Ý,¨[Ñ9Ô9Ð9Ð9Ð9rirÐrÑrÒcóÜ—ttj¦«¦«}||d<| ||¬¦«}||dœ}t|d¦«|r| ||¦«dSdS)zH Send statistics data to server and save status to file rÃ)rÑr&TN)rªrºÚ_send_statisticsr1r()rrÐrÑrÒrÃÚs_resultr>s rjrÝz2CloudlinuxSummary._send_statistics_and_save_status+s�€õ�œ ™ œ Ñ$Ô$ˆ Ø(ˆ� ÑØ×(Ò(¨°cÐ(Ñ:Ô:ˆØ$°9Ð=Ð=ˆÝ˜ Ñ&Ô&Ð&Ø ð Ø × Ò ØØñ ô ð ð ð ð ð ric ó—|dz }|dkrdSdddt|jd¦«ddd ttj|¦«¦«›d �g} t |d ¬ ¦«\}}}n3#t $r&}t d |¦«Yd}~dSd}~wwxYw|dkrLtj |¦«} td„|dD¦«¦«S#ttf$rYdSwxYwt d||¦«dS)Nr?rVz/usr/sbin/lveinforz--idrêz--show-columnsÚmPMemz--periodÚmT©Úreturn_full_outputz Unable to run lveinfo, error: %src3ó&K—|] }|dV—Œ dS)r-Nrh©r1Úxs rjr4z4CloudlinuxSummary._get_max_memory..Qs&èè€ÐCÐC¨!˜1˜Wœ:ÐCÐCÐCÐCÐCÐCrirËz-lveinfo failed with exit code: %i, output: %s)rçr rªÚmathÚceilr,r"rDÚwarningrNÚloadsÚmaxrTrUrE) rr"Ú time_minutesÚcmdrÚjson_strr2r[Ú parsed_datas rjrz!CloudlinuxSummary._get_max_memory:sM€Ø# bÑ(ˆ Ø ˜!Ò Ð Ø�4à Ø Ø Ý �” ˜:Ô&Ñ 'Ô 'Ø Ø Ø Ý•4”9˜\Ñ*Ô*Ñ+Ô+Ð .Ð .Ð .ð  ˆð Ý)¨#À$ÐGÑGÔG‰OˆB�˜!˜!øÝ$ð ð ð Ý × Ò ÐAÀ1Ñ EÔ EÐ EØ�4�4�4�4�4øøøøð øøøð �Š7ˆ7Ýœ* XÑ.Ô.ˆKð ÝÐCÐC¨{¸6Ô/BÐCÑCÔCÑCÔCÐCøÝ¥Ð)ð ð ð Ø�t�tð øøøå×ÒÐHÈ"ÈhÑWÔWÐW؈ts*ÁA)Á) BÁ3BÂBÂ7CÃC+Ã*C+cóf—d} d|›�}t |¦«tjd¦«}t d¦«D]P} tj||d¬¦«}n7#tj$r#}|}tjd|z¦«Yd}~ŒId}~wwxYw|‚|j d krt d ¦«n,d |j ›d |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 z*Unknown exception while sending statisticsér?)rNrAéNéÈzSending statictics OKrBrC) rDrHrIrJr:ÚpostÚConnectionErrorrºr»rLrMrçrE)rËrÑÚ out_messagerYÚ expected_errÚirZÚerrs rjr*z"CloudlinuxSummary._send_statisticsWst€ð ˆ ð *Ø;°cÐ;Ð;ˆGÝ �OŠO˜GÑ $Ô $Ð $å#Ô4Ð5aÑbÔbˆLݘ1‘X”Xð #ð #�ðÝ'œ}¨S°tÀRÐHÑHÔH�Hð �Eøõ  Ô/ð%ð%ð%Ø#&�LÝ”J˜q !™tÑ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$øøøøð%øøøð #Ð"àÔ# sÒ*Ð*Ý—’Ð 7Ñ8Ô8Ð8Ð8àn¸XÔ=QÐnÐnÐ]eÔ]lÐnÐn� Ý—’  Ñ,Ô,Ð,øøåÔ(ð *ð *ð *ݘc™(œ(ˆKÝ × Ò ˜[Ñ )Ô )Ð )Ð )Ð )Ð )Ð )Ð )øøøøð *øøøðÐsC„AC,Á A"Á C,Á"BÁ1B C,ÂBÂAC,Ã,D.Ã;)D)Ä)D.c ó"—|jst d¦«dStj¦«t jkrt d¦«dStd¬¦«}| |¦«}t  dt|¦«¦«|  d¦«dkst d ¦«dStj ¦«rt d ¦«dS |  d ¦«}tt|¬ ¦«}| |jpt|€dn|  d d¦«| ¦«t#¦«rdntj¦«| ¦«|j|  dd¦«¬¦«dS#t($r&}t d|¦«Yd}~dSd}~wwxYw)z4 Collect data via WebsiteCollector. z:Website collector is disabled because system_id is not setNz,Website collector is disabled for non-cPanelF©Úcheck_expirationzWebsite collector status: %sÚdecisionÚonz0Website collector is disabled by remote settingsz.Website collector is disabled via opt-out fileÚ domains_limit)ÚloggerÚ max_sitesr™ršÚconfig_versionrq)r#r™ÚplatformÚpanelÚserverÚapi_urlÚremote_config_versionr)r#rDÚdebugrxr�rÚ CPANEL_NAMErDr¦rHrçrr=Úis_collection_disabledÚ send_dataÚUNKNOWN_RHN_IDr'rÚ_get_control_panel_apacheÚWEBSITE_COLLECTOR_URLr¤rE)rrŸÚwebsite_collector_statusrNÚ collectorr[s rjrz#CloudlinuxSummary.website_collectorzs€ð Œ~ð Ý × Ò ÐYÑ ZÔ ZÐ ZØ�4õ Ô Ñ Ô ¥Ô!2Ò 2Ð 2Ý × Ò ÐKÑ LÔ LÐ LØ�4å4ÀeÐLÑLÔLˆ ð$(×#AÒ#AÀ+Ñ#NÔ#NÐ Ý�ŠÐ6½Ð×&BÒ&BÐCSÐU^Ñ&_Ô&_ð ñ ô ð ð ð øõð ð ð Ý × Ò Ð;¸QÑ ?Ô ?Ð ?Ø�4�4�4�4�4øøøøð øøøsÄC GÇ HÇ(H È HcóŽ—dtj¦«dœ}| ¦«|j |¦«|S©NrV)ÚversionrÃ)rºÚ_prepare_cl_normal_statisticsr rQ©rr>s rjrzCloudlinuxSummary._get_summary©sB€Ø­T¬Y©[¬[Ð9Ð9ˆØ ×*Ò*Ñ,Ô,Ð,Ø Œ×Ò˜vÑ&Ô&Ð&؈ ricóŽ—dtj¦«dœ}| ¦«|j |¦«|Sr_)rºÚ'_fill_dict_with_rpm_packages_statisticsr rQrbs rjrÜz+CloudlinuxSummary._get_rpm_packages_summary¯sB€Ø­T¬Y©[¬[Ð9Ð9ˆØ ×4Ò4Ñ6Ô6Ð6Ø Œ×Ò˜vÑ&Ô&Ð&؈ ricó@—tj¦«tjS)z. Get version of control panel )rxÚgetCPÚ CP_VERSIONrhrirjÚ_get_panel_versionz$CloudlinuxSummary._get_panel_versionµs€õ Œ ‰ŒˆÝÔ Ð ricó.—|j tjd¦«\}}|st|jd<dS|�H||jd<|j d„ddd¦«|j d „ddd ¦«dSt |jd<dS) zN Fill dict with statistics by statistics about MySQL governor zCan't get MySQL governor modeÚmysql_governor_statusNÚmysql_governor_modecóB—t¦« ¦«Srg)rÚget_governor_versionrhrirjrñzCCloudlinuxSummary._fill_mysql_governor_statistics..Ìs€� ™œ×<Ò<Ñ>Ô>€rirçÚmysql_governor_versionz Can't get MySQL governor versioncóN—t¦« ¦«dS©Nr)rÚget_governor_statusrhrirjrñzCCloudlinuxSummary._fill_mysql_governor_statistics..Òs€� ™œ×;Ò;Ñ=Ô=¸aÔ@€rizCan't get MySQL governor status)r Ú evaluate_safer/Úget_gov_mode_operationÚERRORrr…)rrÁÚmysql_gov_modes rjÚ_fill_mysql_governor_statisticsz1CloudlinuxSummary._fill_mysql_governor_statistics¾s΀ð #'¤/×"?Ò"?Ý Ô 2Ø +ñ# ô# ш�ðð EÝ7<ˆDŒOÐ3Ñ 4Ð 4Ð 4Ø Ð 'Ø5CˆDŒOÐ1Ñ 2Ø ŒO× &Ò &Ø>Ð>ØØ(Ø2ñ  ô ð ð ŒO× &Ò &Ø@Ð@ØØ'Ø1ñ  ô ð ð ð õ8EˆDŒOÐ3Ñ 4Ð 4Ð 4ricó¦—|j tjddd¦«|j d„ddd¦«|j |jddd ¦«|j |jdd d ¦«|j t d d d¦«|j d„d dd¦«tj¦«tjkr"|j |j d dd¦«|j |j d dd¦«|j td dd¦«dS)zM Fill dict with statistics by statistics about control panel rçÚcontrol_panel_namezCan't get control panel namecó`—d„tj¦« ¦«D¦«S)Ncó—g|] \}}|¯|‘Œ Srhrh)r1r¹Ú is_supporteds rjú zVCloudlinuxSummary._fill_control_panel_statistics....æs#€ÐnÐnÐnÑ0˜d LÐamÐn�TÐnÐnÐnri)rÚget_supported_cl_featuresÚitemsrhrirjrñzBCloudlinuxSummary._fill_control_panel_statistics..æs*€ÐnÐnµEÔ4SÑ4UÔ4U×4[Ò4[Ñ4]Ô4]ÐnÑnÔn€riÚstr_listÚsupported_cl_featuresz8Can't get list of supported cl features by control panelÚcontrol_panel_versionzCan't get control panel versionÚcontrol_panel_apachezCan't get control panel apacherªÚ nginx_runningzCan't get control panel nginxcóB—ttj¦«¦«Srg)rÊrÚcpusersrhrirjrñzBCloudlinuxSummary._fill_control_panel_statistics..ùs€­3­u¬}©¬Ñ+?Ô+?€riÚ users_totalzCan't get amount of usersÚinstalled_via_plesk_extz8Can't determine if CL was installed from Plesk ExtensionÚlogin_via_whmcs_in_usez)Can't determine if Login via WHMCS in userz Can't if that is WP2 environmentN) r rrxr�rhrZr(rÚ PLESK_NAMEÚ_is_installed_via_plesk_extÚ_is_login_via_whmcs_in_userrs rjÚ_fill_control_panel_statisticsz0CloudlinuxSummary._fill_control_panel_statisticsÚs‹€ð Œ×"Ò"Ý Ô Ø Ø Ø *ñ  ô ð ð Œ×"Ò"Ø nÐ nØ Ø #Ø Fñ  ô ð ð Œ×"Ò"Ø Ô #Ø Ø #Ø -ñ  ô ð ð Œ×"Ò"Ø Ô *Ø Ø "Ø ,ñ  ô ð ð Œ×"Ò"Õ#3°U¸OÐMlÑmÔmÐmØ Œ×"Ò"Ð#?Ð#?ÀÈ ÐWrÑsÔsÐsÝ Ô Ñ Ô ¥Ô!1Ò 1Ð 1Ø ŒO× &Ò &ØÔ0ØØ)ØJñ  ô ð ð Œ×"Ò"Ø Ô +Ø Ø $Ø 7ñ  ô ð ð Œ×"Ò"Ý  Ð';Ð=_ñ ô ð ð ð ric ó¸—d}tj¦«tjkr|Sgd¢}t j|ddd¬¦«}t j|j¦«}d|vr{d|dvrq|ddD]b}|ddkrTd }t|  d d ¦«|  d d ¦«|  d d ¦«g¦«rd}nŒc|S)zA Determine whether the login method is via WHMCS r¿)z/usr/local/cpanel/bin/whmapi1Ú&get_available_authentication_providersz--output=jsonprettyT)Úcapture_outputrVr×rËÚ providersÚ provider_nameÚwhmcsrÚwhostmgrd_enabledFÚcpaneld_enabledÚwebmaild_enabledrV) rxr�rrVrárârNr7Ústdoutrór)rÆÚcommandr>rËÚproviders rjr‹z,CloudlinuxSummary._is_login_via_whmcs_in_use s€ð ˆå Ô Ñ Ô ¥Ô!2Ò 2Ð 2؈MàtÐtÐtˆÝ” ¸À4ÈtÐTÑTÔTˆÝŒz˜&œ-Ñ(Ô(ˆØ �Tˆ>ˆ>˜k¨T°&¬\Ð9Ð9Ø  œL¨Ô5ð ð �ؘOÔ,°Ò7Ð7Ø�Fõà$ŸLšLÐ)<¸eÑDÔDØ$ŸLšLÐ):¸EÑBÔBØ$ŸLšLÐ);¸UÑCÔCðñôð#ð"#˜Ø�Eð8ðˆ ricóP—d}d}tj |¦«rd}|S)a cldeploy-plesk-ext.log is always created by cldeploy-precheck when it downloads the cldeploy script, if it exists it means there was an attempt to launch cldeploy from the Plesk Extension. Since this function is in package lve-utils, which depends on lve, it means that the current OS is CloudLinux, therefore the 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~)r>Úext_logs rjrŠz-CloudlinuxSummary._is_installed_via_plesk_ext,s.€ð ˆØ3ˆÝ Œ7�>Š>˜'Ñ "Ô "ð ØˆF؈ ricóÖ—t¦«r/tj¦«rd}nDtj¦«rd}n.d}n+|jddkrtj¦«rdnd}nd}|S) z“ Wrapper to retrieve control panel Apache version: EA3 or EA4 for cPanel, native otherwise :return: EA3|EA4|native Ú litespeedÚ openlitespeedÚunknown_litespeedrxÚcPanelÚEA4ÚEA3Únative)r'rxÚdetect_enterprise_litespeedÚdetect_open_litespeedr Úis_ea4rbs rjrZz+CloudlinuxSummary._get_control_panel_apacheBs~€õ Ñ !Ô !ð ÝÔ1Ñ3Ô3ð -Ø$��ÝÔ-Ñ/Ô/ð -Ø(��ð-��Ø Œ_Ð1Ô 2°hÒ >Ð >Ý$œm™oœoÐ8�U�U°5ˆFˆFàˆF؈ ricóÀ—tj¦«}|€|Stjttjt dt dti}| |d¦«S)z  Wrapper to convert internal values from cagefs_statistics_config.get_cagefs_status function to values for statistics :return: NÚEnabledÚDisabledÚUnknown) r-Úget_cagefs_statusÚCAGEFS_STATUS_NOT_INSTALLEDr…ÚCAGEFS_STATUS_NOT_INITIALIZEDÚNOT_INITIALIZEDr)r*r)Ú cagefs_statusÚcagefs_status_maps rjÚ_cagefs_status_wrapperz(CloudlinuxSummary._cagefs_status_wrapperVsX€õ1ÔBÑDÔDˆ Ø Ð Ø Ð å $Ô @Å-Ý $Ô BÅOØ •wØ �ð  Ðð !×$Ò$ ]°IÑ>Ô>Ð>ricó臗|j tddd¦«t¦«Š|j ˆfd„ddd¦«|j ˆfd„ddd ¦«d S) z= Fill dict with website isolation statistics rªÚ%website_isolation_allowed_server_widez0Can't detect status of support website isolationcó"•—t‰¦«Srg©rÊ©Ú per_user_stats€rjrñzFCloudlinuxSummary._fill_website_isolation_statistics..w󸀕C˜ Ñ&Ô&€riÚ%website_isolation_enabled_users_totalzACan't detect total amount of users with enabled website isolationcóZ•—td„‰ ¦«D¦«¦«S)Nc3ó4K—|]}t|¦«V—ŒdSrgr´)r1Údomainss rjr4zYCloudlinuxSummary._fill_website_isolation_statistics....}s(èè€ÐKÐK¨�˜G™ œ ÐKÐKÐKÐKÐKÐKri©Úsumrõrµs€rjrñzFCloudlinuxSummary._fill_website_isolation_statistics..}s*ø€•CÐKÐK°M×4HÒ4HÑ4JÔ4JÐKÑKÔKÑKÔK€riÚ(website_isolation_enabled_websites_totalzDCan't detect total amount of websites with enabled website isolationN)r rrlrm)rr¶s @rjÚ"_fill_website_isolation_statisticsz4CloudlinuxSummary._fill_website_isolation_statisticshs¢ø€ð Œ×"Ò"Ý 4Ø Ø 3Ø >ñ  ô ð õ<Ñ=Ô=ˆ Ø Œ×"Ò"Ø &Ð &Ð &Ð &Ø Ø 3Ø Oñ  ô ð ð Œ×"Ò"Ø KÐ KÐ KÐ KØ Ø 6Ø Rñ  ô ð ð ð ricó°‡—|j |jd¦«\}Š|siŠtD]%}|j |fˆfd„ d|d¬¦«Œ&dS)a· Fill dict with per-domain LVE limits statistics (CLOS-7026). One walk of the host produces all four metrics, so it runs once and the counts are handed to add_metric individually - the same shape _fill_top_packages_statistics uses. On a failed walk every metric takes the -42 sentinel rather than a fabricated 0, which on these metrics would read exactly like genuine non-adoption. z.Can't collect per-domain LVE limits statisticscó•—‰|Srgrh)ÚmetricÚcountss €rjrñz?CloudlinuxSummary._fill_domain_lve_statistics..–s ø€ F¨6¤N€rirªN©Ú log_message)r rrÚ_collect_domain_lve_countsÚDOMAIN_LVE_METRICSr)rrÁr¹rÃs @rjÚ_fill_domain_lve_statisticsz-CloudlinuxSummary._fill_domain_lve_statisticsƒs�ø€ðœ/×7Ò7Ø Ô +Ø <ñ ô ‰ˆ�ðð ØˆFÝ&ð ð ˆDØ ŒO× &Ò &à"Ð2Ð2Ð2Ð2Ð2ØØØ ð 'ñ ô ð ð ð ð ricó:‡—tj¦«}ˆfd„|D¦«}t|¦«t|¦«z }|r)t d|t|¦«¦«t t|¦«t dtdtdi}d}|D]Ã}tj |¦«}t|  ¦«¦«}|sŒ:|t xxdz cc<‰j  t‰j||¦«d¦«\} } | s|dz }Œ‰|txx| z cc<|txxt|¦«| z z cc<ŒÄ|r9t d||t t$tt¦«|S)aj Count accounts and domains across the per-domain LVE funnel. Allowed accounts are the markers in /etc/container/lvd_ids; enabled ones are those with at least one domain in the id registry - the same predicate lvectllib._is_domain_isolated_user uses. Both come from the registry alone, so no tenant's config can move either one. An empty registry is taken at face value rather than treated as a measurement failure, including when the _lvdmap extension backing it is missing: lvectllib._is_domain_isolated_user is that same emptiness check, and lve_apply's per-domain branch is gated on it, so a host whose registry reads empty is a host applying no per-domain limits. Zero is the answer, not a sentinel. Two rules make `default + custom` a trustworthy stand-in for the enabled domain total, which is not measured separately: 1. The registry, not domains.json, decides which domains are enabled. domains.json is tenant-writable, so walking it would let an account inflate the custom count with entries for domains the administrator never enabled - entries that can never be applied. 2. An account whose config cannot be *opened* - in practice the tenant holding ~/.lve/.domains.lock past DOMAIN_LVE_LOCK_TIMEOUT_SECONDS - is skipped, which makes the two domain metrics read low rather than blanking them fleet-wide. That undercount is invisible in the payload, so it is logged at ERROR, where clsentry's handler picks it up. A malformed or oversized domains.json is a different case and is NOT skipped: LvdConfig._read deliberately fails safe to an empty config (CLOS-4594/F-34, so one tenant's bad file cannot abort a root batch), so such an account counts as all-default. That is the accurate reading rather than a compromise - apply_domain_lve_limits reads the same empty config and applies no custom limits, so those domains really are running on inherited ones. có>•—g|]}‰ |¦«¯|‘ŒSrh)Ú _uid_has_user)r1Úuidrs €rjr|z@CloudlinuxSummary._collect_domain_lve_counts..Äs,ø€ÐJÐJÐJ °$×2DÒ2DÀSÑ2IÔ2IÐJ˜ÐJÐJÐJriz[Per-domain LVE statistics: %d of %d lvd_ids markers belong to no existing user; not countedrrVNz Per-domain LVE statistics: skipped %d of %d isolated accounts whose domains.json could not be read within %.0fs (lock held by the tenant?); %s and %s undercount)Údomain_lve_configÚfind_all_lve_ids_with_configrÊrDr6ÚDOMAIN_LVE_ALLOWED_USERS_METRICÚDOMAIN_LVE_ENABLED_USERS_METRICÚ(DOMAIN_LVE_DEFAULT_LIMITS_DOMAINS_METRICÚ'DOMAIN_LVE_CUSTOM_LIMITS_DOMAINS_METRICÚdomain_lve_registryÚget_all_entriesÚsetrõr rrrÚ_count_custom_limit_domain_lvesrEÚDOMAIN_LVE_LOCK_TIMEOUT_SECONDS) rÚmarkersÚ allowed_uidsÚorphanedrÃÚskippedrÌÚregistryÚ enabled_idsrÁÚcustoms ` rjrÆz,CloudlinuxSummary._collect_domain_lve_countsœsÝø€õJ$Ô@ÑBÔBˆðKÐJÐJÐJ wÐJÑJÔJˆ Ý�w‘<”<¥# lÑ"3Ô"3Ñ3ˆØ ð å × Ò ØmØÝ�G‘ ” ñ ô ð õ ,­S°Ñ->Ô->Ý +¨QÝ 4°aÝ 3°Qð  ˆðˆØð Zð ZˆCÝ*Ô:¸3Ñ?Ô?ˆHݘhŸošoÑ/Ô/Ñ0Ô0ˆKØð ðØ Õ2Ð 3Ð 3Ô 3°qÑ 8Ð 3Ð 3Ñ 3à"œo×;Ò;ݘÔ<¸cÀ8ÑLÔLðñ ô‰OˆG�Vðð Ø˜1‘ �ØØ Õ:Ð ;Ð ;Ô ;¸vÑ EÐ ;Ð ;Ñ ;Ø Õ;Ð <Ð <Ô <ÅÀKÑ@PÔ@PÐSYÑ@YÑ YÐ <Ð <Ñ <Ð <à ð õ × Ò ð'ðØÕ6Ô7Ý/Ý8Ý7ñ ô ð ðˆ rirÌcóT— tj|¦«n#t$rYdSwxYwdS)z>Whether a lvd_ids marker still belongs to an existing account.FT)ÚpwdÚgetpwuidrU)rÌs rjrËzCloudlinuxSummary._uid_has_userûsA€ð Ý ŒL˜Ñ Ô Ð Ð øÝð ð ð Ø�5�5ð øøøàˆts ‚— %¤%rÜcó¾—tj |t¬¦«}d„|jD¦«}|sdStj|¦«}t tj|¦«pg¦«}t¦«}|D]L}|  |j ¦«}|€Œ|  |¦«} | €Œ7|  | ¦«ŒMt|¦«S)aõ Count how many of *uid*'s enabled domain LVEs carry a custom limit. *registry* is that account's id-registry mapping, document root -> domain LVE id. The join runs domain name (what domains.json stores) -> document root -> domain LVE id, and counts ids rather than config entries: some panels give an addon domain its parent's document root, so two entries can name one domain LVE, and counting entries could push custom above the number of domains that exist. The panel is consulted only when the config actually sets a limit somewhere. Per CLOS-4060 most domains are default, and an account with nothing to join must not pay for a cpapi call on a 22k-domain host. )Ú lock_timeoutcó —g|] }|j¯ |‘Œ Srh)Úlimits)r1rás rjr|zECloudlinuxSummary._count_custom_limit_domain_lves..s€ÐQÐQÐQ¨ÀEÄLÐQ˜uÐQÐQÐQrir)rÍÚ LvdConfigÚloadr×r»Ú get_usernamerPrÚ userdomainsrÕrr¹ÚaddrÊ) rÌrÜr;Úentries_with_limitsÚusernameÚdocroot_by_domainÚ custom_idsráÚdocrootÚ domain_ids rjrÖz1CloudlinuxSummary._count_custom_limit_domain_lvessã€õ #Ô,×1Ò1°#ÕDcÐ1ÑdÔdˆØQÐQ°&´.ÐQÑQÔQÐØ"ð Ø�1å$Ô1°#Ñ6Ô6ˆÝ ¥Ô!2°8Ñ!<Ô!<Ð!BÀÑCÔCÐå‘U”Uˆ Ø(ð &ð &ˆEð (×+Ò+¨E¬JÑ7Ô7ˆGØˆØØ Ÿ š  WÑ-Ô-ˆIØÐ ØØ �NŠN˜9Ñ %Ô %Ð %Ð %Ý�:‰ŒÐricó¸—|j |jddd¦«|jdttfvr d|jd<n'|j t jddd¦«|j tt jd¦«ddd ¦«|j tt jd ¦«dd d ¦«dS) zF Fill dict with statistics by statistics about CageFS rçr®zCan't get CageFS statusNÚcagefs_user_modezCan't get CageFS user modeTÚcagefs_enabled_quantityz/Can't get quantity of users with enabled CageFSFÚcagefs_disabled_quantityz0Can't get quantity of users with disabled CageFS) r rr°r…r­r-Úget_cagefs_user_moderÚ get_quantityrs rjÚ_fill_cagefs_statisticsz)CloudlinuxSummary._fill_cagefs_statistics+sõ€ð Œ×"Ò"Ø Ô 'Ø Ø Ø %ñ  ô ð ð Œ?˜?Ô +µ ½Ð/OÐ OÐ OØ26ˆDŒOÐ.Ñ /Ð /à ŒO× &Ò &Ý(Ô=ØØ"Ø,ñ  ô ð ð Œ×"Ò"Ý Õ,Ô9¸4Ñ @Ô @Ø Ø %Ø =ñ  ô ð ð Œ×"Ò"Ý Õ,Ô9¸5Ñ AÔ AØ Ø &Ø >ñ  ô ð ð ð ricóD‡— td„|j ¦«D¦«¦«}n#tj$rYdSwxYwt |jj ¦«¦«Štˆfd„|  ¦«D¦«¦«S)zJ Get amount of end-users which belong to active resellers c3ó,K—|]\}}|dk¯ |V—ŒdS©rNrh©r1r2Úlvps rjr4zLCloudlinuxSummary._get_amount_of_endusers_under_resellers..Qó2èè€ÐYÐY©¨¨3ÐQTÐWXÒQXÐQX ÐQXÐQXÐQXÐQXÐYÐYriNc3ó •K—|]}|‰vV—Œ dSrgrh)r1Úlvp_idÚenabled_lvp_ids €rjr4zLCloudlinuxSummary._get_amount_of_endusers_under_resellers..Us(øèè€ÐOÐO°�6˜^Ð+ÐOÐOÐOÐOÐOÐOri) rr!Ú lve_lvp_pairsrrRrÕÚname_mapÚid_listr½Úelements)rÚ lvp_countrs @rjÚ'_get_amount_of_endusers_under_resellersz9CloudlinuxSummary._get_amount_of_endusers_under_resellersLs¦ø€ð ÝÐYÐY°$´+×2KÒ2KÑ2MÔ2MÐYÑYÔYÑYÔYˆIˆIøÝÔ!ð ð ð Ø�4�4ð øøøå˜Tœ[Ô1×9Ò9Ñ;Ô;Ñ<Ô<ˆÝÐOÐOÐOÐO¸)×:LÒ:LÑ:NÔ:NÐOÑOÔOÑOÔOÐOsƒ04´AÁAcóÔ— td„|j ¦«D¦«¦«}n#tj$rYdSwxYwt | ¦«¦«S)z/ Get total amount of end-users c3ó,K—|]\}}|dk¯ |V—ŒdSrúrhrûs rjr4zBCloudlinuxSummary._get_total_amount_of_endusers..\rýriN)rr!rrrRr½rõ)rrs rjÚ_get_total_amount_of_endusersz/CloudlinuxSummary._get_total_amount_of_endusersWsr€ð ÝÐYÐY°$´+×2KÒ2KÑ2MÔ2MÐYÑYÔYÑYÔYˆIˆIøÝÔ!ð ð ð Ø�4�4ð øøøå�9×#Ò#Ñ%Ô%Ñ&Ô&Ð&s‚03³AÁAcóp— ttj¦«¦«S#tj$rYdSwxYw)z) Get amount of resellers N)rÊrÚ resellersrRrhrirjÚ_get_amount_of_resellersz*CloudlinuxSummary._get_amount_of_resellersasB€ð  Ý•u”Ñ(Ô(Ñ)Ô)Ð )øÝÔ!ð ð ð Ø ˆDˆDð øøøs ‚"¢5´5c󲇗‰j tjjddd¦«‰j tjjddd¦«‰j tjjddd¦«‰j ‰jddd ¦«‰j ‰jdd d ¦«‰j ‰j dd d ¦«‰j ˆfd„ddd¦«‰jdr ‰j d„ddd¦«dSd‰jd<d‰jd <d‰jd<dS)zP Fill dict with statistics by varied statistics about resellers rªÚ 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 panelÚreseller_limits_enabledz1Can't detect status of support of reseller limitsÚresellers_totalz#Can't get total amount of resellersÚ(resellers_endusers_under_reseller_limitsz>Can't get amount of end-users which belong to active resellersÚresellers_endusers_totalz#Can't get total amount of end-userscó,•—‰ ¦«Srg)Ú_get_resellers_with_faultsrs€rjrñz>CloudlinuxSummary._fill_resellers_statistics..—sø€�D×3Ò3Ñ5Ô5€riÚresellers_with_faultsz:Can't get amount of resellers with faults for the past 24hcó\—tttj¦«¦«¦«Srg)rÊÚlistrñÚreseller_lvp_listrhrirjrñz>CloudlinuxSummary._fill_resellers_statistics.. s€��D¥Ô!<Ñ!>Ô!>Ñ?Ô?Ñ@Ô@€riÚresellers_activez$Can't get amount of active resellersN) r rrñÚlveÚis_lve10Úis_panel_supportedÚreseller_limit_supportedr rr rs`rjÚ_fill_resellers_statisticsz,CloudlinuxSummary._fill_resellers_statisticsksµø€ð Œ×"Ò"Ý ŒMÔ "Ø Ø .Ø Fñ  ô ð ð Œ×"Ò"Ý ŒMÔ ,Ø Ø 5Ø Mñ  ô ð ð Œ×"Ò"Ý ŒMÔ 2Ø ð &Ø ?ñ  ô ð ð Œ×"Ò"Ø Ô )Ø Ø Ø 1ñ  ô ð ð Œ×"Ò"Ø Ô 8Ø Ø 6Ø Lñ  ô ð ð Œ×"Ò"Ø Ô .Ø Ø &Ø 1ñ  ô ð ð Œ×"Ò"Ø 5Ð 5Ð 5Ð 5Ø Ø #Ø Hñ  ô ð ð Œ?Ð4Ô 5ð <Ø ŒO× &Ò &ðAÐ@ØØ"Ø6ñ  ô ð ð ð ð37ˆDŒOÐ.Ñ /ØJNˆDŒOÐFÑ GØ7;ˆDŒOÐ3Ñ 4Ð 4Ð 4riÚxml_cfg_providerc󜇗|j t|j‰jt j‰jt j¦«ddd¦«|j t|j‰jt j¦«ddd¦«|j ˆfd„ddd ¦«|j ˆfd „dd d ¦«|j ˆfd „ddd¦«|j ˆfd„ddd¦«|j ˆfd„ddd¦«|j t|j ‰jt j ¦«ddd¦«|j t|j ‰jt j ¦«ddd¦«dS)zN Fill dict with statistics by statistics about default limits rªÚdefault_limit_speedzCan't get default speed limitrçÚdefault_limit_cpu_origin_unitsz+Can't get cpu origin units of default limitcó2•—‰jtjSrg)Údefaultsr3Úncpu©r s€rjrñzCCloudlinuxSummary._fill_default_limits_statistics..Àóø€Ð$Ô-­hÔ7Ô<€riÚdefault_limit_ncpuzCan't get default ncpu limitcó2•—‰jtjSrg)r%r3Úior's€rjrñzCCloudlinuxSummary._fill_default_limits_statistics..Æóø€Ð$Ô-­hÔ7Ô:€riÚdefault_limit_iozCan't get default io limitcó2•—‰jtjSrg)r%r3Únprocr's€rjrñzCCloudlinuxSummary._fill_default_limits_statistics..Ìsø€Ð$Ô-­hÔ7Ô=€riÚdefault_limit_nproczCan't get default nproc limitcó2•—‰jtjSrg)r%r3Úepr's€rjrñzCCloudlinuxSummary._fill_default_limits_statistics..Òr,riÚdefault_limit_epzCan't get default ep limitcó2•—‰jtjSrg)r%r3Úiopsr's€rjrñzCCloudlinuxSummary._fill_default_limits_statistics..Ør(riÚdefault_limit_iopszCan't get default iops limitÚdefault_limit_vmem_mbzCan't get default vmem limitÚdefault_limit_pmem_mbzCan't get default pmem limitN) r rrÚ_cpu_limit_to_percentsr%r3Úcpur&Ú_get_cpu_limit_unitsÚ_mempages_to_mbÚvmemÚpmem©rr s `rjÚ_fill_default_limits_statisticsz1CloudlinuxSummary._fill_default_limits_statisticsªsø€ð Œ×"Ò"Ý ØÔ+Ø Ô)­(Ô3Ô7Ø Ô)­(Ô3Ô8ñ ô ð Ø !Ø +ñ ô ð ð Œ×"Ò"Ý �DÔ-Ð/?Ô/HÍÔ/RÔ/VÑ WÔ WØ Ø ,Ø 9ñ  ô ð ð Œ×"Ò"Ø <Ð <Ð <Ð <Ø Ø Ø *ñ  ô ð ð Œ×"Ò"Ø :Ð :Ð :Ð :Ø Ø Ø (ñ  ô ð ð Œ×"Ò"Ø =Ð =Ð =Ð =Ø Ø !Ø +ñ  ô ð ð Œ×"Ò"Ø :Ð :Ð :Ð :Ø Ø Ø (ñ  ô ð ð Œ×"Ò"Ø <Ð <Ð <Ð <Ø Ø Ø *ñ  ô ð ð Œ×"Ò"Ý �DÔ(Ð*:Ô*CÅHÔ*MÔ*RÑ SÔ SØ Ø #Ø *ñ  ô ð ð Œ×"Ò"Ý �DÔ(Ð*:Ô*CÅHÔ*MÔ*RÑ SÔ SØ Ø #Ø *ñ  ô ð ð ð ricó ‡—|j ˆfd„ddd¦«|j ˆfd„ddd¦«|j ˆfd„dd d ¦«|j |jdd d ¦«d S)z› Fill dict with statistics by other statistics about limits: packages_total, users_total, amount users/packages with custom limits có,•—t‰j¦«Srg)rÊÚpackagesr's€rjrñzACloudlinuxSummary._fill_other_limits_statistics..ñsø€•CÐ(Ô1Ñ2Ô2€rirªÚpackages_totalz"Can't get total amount of packagescóF•—t‰ ¦«¦«Srg)rÊÚget_packages_with_custom_limitsr's€rjrñzACloudlinuxSummary._fill_other_limits_statistics..÷sø€•CÐ(×HÒHÑJÔJÑKÔK€riÚpackages_with_custom_limitsz/Can't get amount of packages with custom limitscóF•—t‰ ¦«¦«Srg)rÊÚget_users_with_custom_limitsr's€rjrñzACloudlinuxSummary._fill_other_limits_statistics..ýsø€•CÐ(×EÒEÑGÔGÑHÔH€riÚusers_with_custom_limitsz,Can't get amount of users with custom limitsÚusers_with_faultsz6Can't get amount of users with faults for the past 24hN)r rÚ_get_users_with_faultsr?s `rjÚ_fill_other_limits_statisticsz/CloudlinuxSummary._fill_other_limits_statisticsêsËø€ð Œ×"Ò"Ø 2Ð 2Ð 2Ð 2Ø Ø Ø 0ñ  ô ð ð Œ×"Ò"Ø KÐ KÐ KÐ KØ Ø )Ø =ñ  ô ð ð Œ×"Ò"Ø HÐ HÐ HÐ HØ Ø &Ø :ñ  ô ð ð Œ×"Ò"Ø Ô 'Ø Ø Ø Dñ  ô ð ð ð ricó䇇—tdd¦«D�]Û}‰j t‰j||¦«d|›d�¦«\}Š|r‰€dS‰j ˆfd„dd|›d �d¬ ¦«‰j ˆfd „d d|›d �d¬ ¦«‰j ˆˆfd„d d|›d�d¬ ¦«‰j ˆˆfd„dd|›d�d¬ ¦«‰j ˆfd„d d|›d�d¬ ¦«‰j ˆfd„d d|›d�d¬ ¦«‰j ˆfd„d d|›d�d¬ ¦«‰j ˆfd„d d|›d�d¬ ¦«‰j ˆfd„d d|›d�d¬ ¦«‰j ˆˆfd„d d|›d�d¬ ¦«‰j ˆˆfd„d d|›d�d¬ ¦«�ŒÝdS) zV Fill dict with statistics by statistics about top packages on server rVr?zCan't get top z package by usersNcó•—‰djS©NrV©r¹©Ú top_results€rjrñzACloudlinuxSummary._fill_top_packages_statistics..sø€˜  1œ Ô*€rirçÚtop_Ú _package_namerÄcó.•—t‰d¦«Srpr©rRs€rjrñzACloudlinuxSummary._fill_top_packages_statistics.."sø€�˜J qœMÑ*Ô*€rirªÚ_package_users_numc󌕗‰ ‰djptj‰djptj¦«SrP)r9rår5r:r&©rrSs€€rjrñzACloudlinuxSummary._fill_top_packages_statistics..(s;ø€˜×3Ò3Ø ”]Ô)Ð9­\Ô>Ø ”]Ô)Ð9­\Ô?ñô€riÚ_package_limit_speedcó\•—‰ ‰djptj¦«SrP)r;rår5r:rYs€€rjrñzACloudlinuxSummary._fill_top_packages_statistics..1s)ø€˜×1Ò1Ø ”]Ô)Ð9­\Ô>ñô€riÚ_package_limit_cpu_origin_unitscó6•—‰djptjSrP)rår5r&rRs€rjrñzACloudlinuxSummary._fill_top_packages_statistics..9óø€˜ AœÔ-Ð=µÔC€riÚ_package_limit_ncpucó6•—‰djptjSrP)rår5r+rRs€rjrñzACloudlinuxSummary._fill_top_packages_statistics..?óø€˜ AœÔ-Ð=µÔA€riÚ_package_limit_iocó6•—‰djptjSrP)rår5r/rRs€rjrñzACloudlinuxSummary._fill_top_packages_statistics..Esø€˜ AœÔ-Ð=µÔD€riÚ_package_limit_nproccó6•—‰djptjSrP)rår5r2rRs€rjrñzACloudlinuxSummary._fill_top_packages_statistics..KrariÚ_package_limit_epcó6•—‰djptjSrP)rår5r5rRs€rjrñzACloudlinuxSummary._fill_top_packages_statistics..Qr^riÚ_package_limit_iopscó\•—‰ ‰djptj¦«SrP)r<rår5r=rYs€€rjrñzACloudlinuxSummary._fill_top_packages_statistics..Wó$ø€˜×,Ò,¨j¸¬mÔ.BÐ.RÅlÔ-XÑYÔY€riÚ_package_limit_vmem_mbcó\•—‰ ‰djptj¦«SrP)r<rår5r>rYs€€rjrñzACloudlinuxSummary._fill_top_packages_statistics..]rjriÚ_package_limit_pmem_mb)r:r rrrÚ#_get_top_package_by_number_of_usersr)rr rErÁrSs` @rjÚ_fill_top_packages_statisticsz/CloudlinuxSummary._fill_top_packages_statistics ssøø€õ �q˜!‘”ðR ñR ˆAØ"&¤/×"?Ò"?ݘÔ@À!ÐEUÑVÔVØ5 Ð5Ð5Ð5ñ#ô#Ñ ˆG�Zð ð ˜jÐ0Ø��ð ŒO× &Ò &Ø*Ð*Ð*Ð*ØØ'�qÐ'Ð'Ð'Ø ð 'ñ ô ð ð ŒO× &Ò &Ø*Ð*Ð*Ð*ØØ,�qÐ,Ð,Ð,Ø ð 'ñ ô ð ð ŒO× &Ò &ððððððØ.�qÐ.Ð.Ð.Ø ð 'ñ ô ð ð ŒO× &Ò &ððððððØ9�qÐ9Ð9Ð9Ø ð 'ñ ô ð ð ŒO× &Ò &ØCÐCÐCÐCØØ-�qÐ-Ð-Ð-Ø ð 'ñ ô ð ð ŒO× &Ò &ØAÐAÐAÐAØØ+�qÐ+Ð+Ð+Ø ð 'ñ ô ð ð ŒO× &Ò &ØDÐDÐDÐDØØ.�qÐ.Ð.Ð.Ø ð 'ñ ô ð ð ŒO× &Ò &ØAÐAÐAÐAØØ+�qÐ+Ð+Ð+Ø ð 'ñ ô ð ð ŒO× &Ò &ØCÐCÐCÐCØØ-�qÐ-Ð-Ð-Ø ð 'ñ ô ð ð ŒO× &Ò &ØYÐYÐYÐYÐYØØ0�qÐ0Ð0Ð0Ø ð 'ñ ô ð ð ŒO× &Ò &ØYÐYÐYÐYÐYØØ0�qÐ0Ð0Ð0Ø ð 'ñ ô ð ñ ð[R ðR ricó —t¦«}| |¦«| |¦«| |¦«dS)zN Fill dict with statistiscs by varied statistics about limits N)r4r@rMror?s rjÚ_fill_limits_statisticsz)CloudlinuxSummary._fill_limits_statisticsdsU€õ-Ñ.Ô.ÐØ ×,Ò,Ð-=Ñ>Ô>Ð>Ø ×*Ò*Ð+;Ñ<Ô<Ð<Ø ×*Ò*Ð+;Ñ<Ô<Ð<Ð<Ð.|sø€˜ vÔ.¨xÔ8€rirçÚlsapi_criu_service_statusrÄcó •—‰ddS)Nrur`rhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..‚sø€˜ vÔ.¨yÔ9€riÚlsapi_criu_service_versioncó •—‰ddS)NÚ lsapiConfÚ lsapi_criurhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..ˆsø€˜ {Ô3°LÔA€riÚlsapi_option_criucó •—‰ddS)Nr|Úlsapi_with_connection_poolrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..Žsø€˜ {Ô3Ð4PÔQ€riÚlsapi_option_connection_poolcó•—‰dS)NÚ libVersionrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..”ó ø€˜ |Ô4€riÚlsapi_lib_versioncó•—‰dS)NÚ modStatusrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..šs ø€˜ {Ô3€ricó•—‰dS)NÚ modVersionrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics.. r„riÚlsapi_mod_versioncó•—‰dS)NÚ totalDomainrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..¦s ø€˜ }Ô5€rirªÚlsapi_total_domain_countcó•—‰dS)NÚ domainStatrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..¬r„riÚint_dictÚlsapi_domain_statcó•—‰dS)NÚ controlPanelrhrvs€rjrñz:CloudlinuxSummary._fill_lsapi_statistics..²s ø€˜ ~Ô6€riÚlsapi_apache_environment)r rrÚget_raw_lsapi_infortrr…)rrÁrws @rjÚ_fill_lsapi_statisticsz(CloudlinuxSummary._fill_lsapi_statisticsms‰ø€ð #'¤/×"?Ò"?Ø Ô #Ø *ñ# ô# ш�ððA @Ý27ˆDŒOÐ.Ñ /Ð /Ð /à Ñ 'Ø ŒO× &Ò &Ø8Ð8Ð8Ð8ØØ+Ø ð 'ñ ô ð ð ŒO× &Ò &Ø9Ð9Ð9Ð9ØØ,Ø ð 'ñ ô ð ð ŒO× &Ò &ØAÐAÐAÐAØØ#Ø ð 'ñ ô ð ð ŒO× &Ò &ØQÐQÐQÐQØØ.Ø ð 'ñ ô ð ð ŒO× &Ò &Ø4Ð4Ð4Ð4ØØ#Ø ð 'ñ ô ð ð ŒO× &Ò &Ø3Ð3Ð3Ð3ØØ"Ø ð 'ñ ô ð ð ŒO× &Ò &Ø4Ð4Ð4Ð4ØØ#Ø ð 'ñ ô ð ð ŒO× &Ò &Ø5Ð5Ð5Ð5ØØ*Ø ð 'ñ ô ð ð ŒO× &Ò &Ø4Ð4Ð4Ð4ØØ#Ø ð 'ñ ô ð ð ŒO× &Ò &Ø6Ð6Ð6Ð6ØØ*Ø ð 'ñ ô ð ð ð õ3@ˆDŒOÐ.Ñ /Ð /Ð /ricóJ—|j |jddd¦«dS)NÚstr_dictÚ wmt_configz!Cant get status of wmt_api_config)r rÚ_get_wmt_api_configrs rjÚ_fill_wmt_settings_statisticsz/CloudlinuxSummary._fill_wmt_settings_statisticsºs3€Ø Œ×"Ò"Ø Ô $ j°,Ð@cñ ô ð ð ð ricó‡‡ ‡ ‡‡—d} ‰ ¦«\Š }Š}nK#t$r>}t dt |¦«¦«ggcŠ }iicŠ}d}Yd}~nd}~wwxYwt t ‰ ¦«t |¦«z ¦«} ‰ |¦«\ŠŠ nD#t$r7}t dt |¦«¦«iicŠŠ Yd}~nd}~wwxYw|r$‰ dt|¦«i¦«‰j   ˆ fd„ddd ¦«‰j   ˆfd „d d d ¦«‰j   ˆ fd„d dd¦«‰j   ˆfd„ddd¦«‰j   ˆ fd„ddd¦«‰j   ˆfd„d dd¦«‰j   ‰j ddd¦«‰j   ˆ ˆfd„d¦«\}}|rt|t¦«s1t D](}t#|¦«\} } d‰j | <d‰j | <Œ)nrt D]j}t#|¦«\} } t%| | d¦«¦«‰j | <t%| | d¦«¦«‰j | <Œk|r‰ nd} ‰ | ¦«‰ | |¦«dS) NTz+Error while getting WordPress statistics %sFz3Error while getting WordPress plugins statistics %sÚcloudlinux_wpos_object_cachecó"•—t‰¦«Srgr´)Ú all_wp_pathss€rjrñz7CloudlinuxSummary._fill_wp_statistics..Üsø€•C˜ Ñ%Ô%€rirªÚwordpress_installed_totalz,Can't get total count of installed wordpresscó•—‰Srgrh©Úobject_cache_pluginss€rjrñz7CloudlinuxSummary._fill_wp_statistics..âsø€Ð(€rir�Úwordpress_object_cache_pluginsz&Can't get WP object cache plugins infocó•—‰Srgrh©Úadvanced_cache_pluginss€rjrñz7CloudlinuxSummary._fill_wp_statistics..èsø€Ð*€riÚ wordpress_advanced_cache_pluginsz(Can't get WP advanced cache plugins infocóF•—t‰ ¦«¦«Srgr¼r¢s€rjrñz7CloudlinuxSummary._fill_wp_statistics..îsø€•CÐ,×3Ò3Ñ5Ô5Ñ6Ô6€riÚ$wordpress_object_cache_plugins_totalz,Can't get WP object cache total plugins infocóF•—t‰ ¦«¦«Srgr¼r¦s€rjrñz7CloudlinuxSummary._fill_wp_statistics..ôsø€•CÐ.×5Ò5Ñ7Ô7Ñ8Ô8€riÚ&wordpress_advanced_cache_plugins_totalz.Can't get WP advanced cache total plugins infocó•—‰Srgrh)Úwp_php_versionss€rjrñz7CloudlinuxSummary._fill_wp_statistics..úsø€�O€riÚwordpress_php_versionszCan't get WP php version infoÚ4awp_sites_count_with_wp_config_php_backup_in_docrootz>Can't analyze sites with wp-config.php.backup in document rootcó.•—‰ ‰¦«Srg)Ú'_get_accelerate_wp_plugin_status_counts)rŸrs€€rjrñz7CloudlinuxSummary._fill_wp_statistics..sø€�D×@Ò@ÀÑNÔN€riz3Can't analyze accelerate_wp_plugin status.php fileséÖÿÿÿr)Ú_prepare_wp_statisticsr¤rDrErçrrÕÚ_prepare_wp_plugins_statisticsrQrÊr rÚ-_count_sites_with_wp_config_backup_in_docrootrrrOrPÚ ACCELERATE_WP_PLUGIN_STATUS_KEYSr§rªrÚ!_fill_wp_rocket_plugin_statisticsÚ_fill_w3tc_plugin_statistics)rÚwp_paths_enumeratedÚpaths_with_wpos_object_cacheÚwp_path_domainsr[Úwithout_wpos_object_cacherÁÚaccelerate_wp_plugin_countsr–Ú enabled_nameÚ disabled_nameÚpathsr§rŸr£r®s` @@@@rjÚ_fill_wp_statisticsz%CloudlinuxSummary._fill_wp_statistics¿søøøøø€Ø"Ðð (ð ×+Ò+Ñ-Ô-ñ  ØØ,ØØ�øåð (ð (ð (Ý × Ò ÐJÍCÐPQÉFÌFÑ SÔ SÐ SØ9;¸RÐ 6ˆLÐ6Ø/1°2Ð ,ˆO˜_Ø"'Ð Ð Ð Ð Ð Ð øøøøð  (øøøõ %)­¨\Ñ):Ô):½SÐA]Ñ=^Ô=^Ñ)^Ñ$_Ô$_Ð!ð BØ;?×;^Ò;^Ø)ñ<ô<Ñ 8Ð Ð"8Ð"8øõð Bð Bð BÝ × Ò ÐRÕTWÐXYÑTZÔTZÑ [Ô [Ð [Ø;=¸rÐ 8Ð Ð"8Ð"8Ð"8Ð"8Ð"8Ð"8øøøøð Bøøøð (ð mØ × 'Ò 'Ð)GÍÐMiÑIjÔIjÐ(kÑ lÔ lÐ là Œ×"Ò"Ø %Ð %Ð %Ð %Ø Ø 'Ø :ñ  ô ð ð Œ×"Ò"Ø (Ð (Ð (Ð (Ø Ø ,Ø 4ñ  ô ð ð Œ×"Ò"Ø *Ð *Ð *Ð *Ø Ø .Ø 6ñ  ô ð ð Œ×"Ò"Ø 6Ð 6Ð 6Ð 6Ø Ø 2Ø :ñ  ô ð ð Œ×"Ò"Ø 8Ð 8Ð 8Ð 8Ø Ø 4Ø <ñ  ô ð ð Œ×"Ò"Ø #Ð #Ð #Ð # ZÐ1IÐKjñ ô ð ð Œ×"Ò"Ø Ô >Ø Ø BØ Lñ  ô ð ð04¬×/LÒ/LØ NÐ NÐ NÐ NÐ NØ Añ0 ô0 Ñ,ˆÐ,ðð h�jÐ)DÅdÑKÔKð hÝ>ð 5ð 5� Ý.OÐPZÑ.[Ô.[Ñ+� ˜mØ03�”  Ñ-Ø14�”  Ñ.Ð.ð 5õ ?ð hð h� Ý.OÐPZÑ.[Ô.[Ñ+� ˜mÝ03Ð4O×4SÒ4SÐT`ÐbcÑ4dÔ4dÑ0eÔ0e�”  Ñ-Ý14Ð5P×5TÒ5TÐUbÐdeÑ5fÔ5fÑ1gÔ1g�”  Ñ.Ð.à 3Ð=� � ¸ˆØ ×.Ò.¨uÑ5Ô5Ð5Ø ×)Ò)¨%°ÑAÔAÐAÐAÐAs,‰#£ A+­4A&Á&A+ÂB4Â4 C5Â>-C0Ã0C5Úwp_pathscóD‡‡—‰€d\}}n"‰j ˆˆfd„d¦«\}}|rt|t¦«s d‰jt<d‰jt <dStt fD]-}t | |d¦«¦«‰j|<Œ.dS)z· Report whether MAx Cache serves each upstream WP Rocket domain (CLOS-6823). None means the WordPress enumeration failed; zeros would read as a clean server. N©FNcó.•—‰ ‰¦«Srg)Ú_get_wp_rocket_maxcache_counts)rrÃs€€rjrñzECloudlinuxSummary._fill_wp_rocket_plugin_statistics.. sø€˜×;Ò;¸HÑEÔE€riz'Can't analyze WP Rocket MAx Cache stater³r)r rrrOrPÚ!WP_ROCKET_MAXCACHE_ENABLED_METRICÚ"WP_ROCKET_MAXCACHE_DISABLED_METRICrªr)rrÃrÁrÃr¹s`` rjr¸z3CloudlinuxSummary._fill_wp_rocket_plugin_statisticssÂøø€ð Ð Ø)‰OˆG�V�Và"œo×;Ò;ØEÐEÐEÐEÐEØ9ñô‰OˆG�Vð ð �j¨µÑ6Ô6ð ØADˆDŒOÕ=Ñ >ØBEˆDŒOÕ>Ñ ?Ø ˆFå6Õ8ZÐ[ð =ð =ˆDÝ$'¨¯ ª °4¸Ñ(;Ô(;Ñ$<Ô$<ˆDŒO˜DÑ !Ð !ð =ð =ricóà—tdtdi}t¦«}|D]L} | |||¦«Œ#t$r%}t  d|¦«Yd}~ŒEd}~wwxYw|S)zï Count how many unique domains MAx Cache serves through upstream WP Rocket. Deduplicated by domain server-wide. An exception out of here makes both columns -42, so no single install is allowed to reach it. rz+Can't analyze WP Rocket MAx Cache state: %sN)rÈrÉrÕÚ_count_wp_rocket_siter¤rDrE)ÚclsrÃrÃÚ seen_domainsr¨r[s rjrÇz0CloudlinuxSummary._get_wp_rocket_maxcache_counts,s €õ4°QÕ8ZÐ\]Ð^ˆÝ!$¡¤ˆ àð Sð SˆGð SØ×)Ò)¨'°6¸<ÑHÔHÐHÐHøÝð Sð Sð Så× Ò Ð!NÐPQÑRÔRÐRÐRÐRÐRÐRÐRøøøøð Søøøðˆ s¤<¼ A+ÁA&Á&A+r¨rÃrÍcó¤—t¦«}d}t|¦«}|€dS t|gt¢RŽ}|€ t j|¦«dS | |¦«s+ t j|¦«t j|¦«dSt|dt¦«\}} | sEt  d¦« t j|¦«t j|¦«dSt|¦«}t|¦«D]0} |   d¦«} | |vr| | ¦«Œ1 t j|¦«n#t j|¦«wxYw t j|¦«n#t j|¦«wxYw|rtnt } || xxt#|¦«z cc<||z}dS)a Add one install's domains to the running counts. Merged only once the install is through, so one that raises part way contributes nothing. The config directory is probed first - one failed open rules out almost every install on a box. FNú .htaccessz9Skipping a WP Rocket install with an unreadable .htaccessrÝ)rÕr°r»ÚWP_ROCKET_CONFIG_DIR_PATHrªr¶Ú_has_wp_rocket_maxcache_addonrÏÚMAXCACHE_MAX_HTACCESS_BYTESrDr6rØrìr¤rêrÈrÉrÊ) rÌr¨rÃrÍÚ site_domainsÚservingÚroot_fdrÙrÓÚreadabler¹ÚdomainrÂs rjrËz'CloudlinuxSummary._count_wp_rocket_site@s€õ"%¡¤ˆ ؈å Ñ(Ô(ˆØ ˆ?Ø ˆFð Ý-¨gÐRÕ8QÐRÐRÐRˆIØÐ Øõ0 ŒH�WÑ Ô Ð Ð Ð ð- $Ø×8Ò8¸ÑAÔAðØõ$”˜Ñ#Ô#Ð#å ŒH�WÑ Ô Ð Ð Ð õ&6°g¸{ÕLgÑ%hÔ%hÑ"�˜(Øðõ×&Ò&Ð'bÑcÔcÐcØõ”˜Ñ#Ô#Ð#å ŒH�WÑ Ô Ð Ð Ð õ/¨xÑ8Ô8�å8¸ÑCÔCð1ð1�DØ!×.Ò.¨vÑ6Ô6�FØ \Ð1Ð1Ø$×(Ò(¨Ñ0Ô0Ð0øð1õ ”˜Ñ#Ô#Ð#Ð#ø•”˜Ñ#Ô#Ð#Ð#øøøÐ#å ŒH�WÑ Ô Ð Ð ø�BŒH�WÑ Ô Ð Ð øøøà6=ÐeÕ2Ð2ÕCeˆØˆvˆˆŒ�#˜lÑ+Ô+Ñ+ˆˆ‰Ø˜ Ñ$ˆ ˆ ˆ s<¥FÁEÁ'FÂ5EÃFÃ1AEÅFÅE,Å,FÆFrÕcó¾—t|gt¢RŽ}|€dS t|t¦«s t j|¦«dSt|gt ¢RŽ}|€ t j|¦«dS t|t¦«t j|¦«t j|¦«S#t j|¦«wxYw#t j|¦«wxYw)z÷ Whether this install is upstream WP Rocket in a build that carries the add-on. Main file name tells upstream from the fork's clsop.php; the add-on file tells a build that can offer MAx Cache from one that cannot. NF)r»ÚWP_ROCKET_PLUGIN_DIR_PATHrÒÚWP_ROCKET_PLUGIN_MAIN_FILErªr¶ÚWP_ROCKET_MAXCACHE_ADDON_DIRÚWP_ROCKET_MAXCACHE_ADDON_FILE)rÕÚ plugin_fdÚaddon_fds rjrÑz/CloudlinuxSummary._has_wp_rocket_maxcache_addonss÷€õ*¨'ÐNÕ4MÐNÐNÐNˆ Ø Ð Ø�5ð Ý& yÕ2LÑMÔMð Øõ ŒH�YÑ Ô Ð Ð Ð õ-¨YÐVÕ9UÐVÐVÐVˆHØÐØõ ŒH�YÑ Ô Ð Ð Ð ð  #Ý*¨8Õ5RÑSÔS唘Ñ"Ô"Ð"å ŒH�YÑ Ô Ð Ð øõ”˜Ñ"Ô"Ð"Ð"øøøøå ŒH�YÑ Ô Ð Ð øøøs)˜CÁCÁ0B-ÂCÂ-CÃCÃCr¼cóH‡‡‡—‰€d\}}n#‰j ˆˆˆfd„d¦«\}}|rt|t¦«s d‰jt<d‰jt <dStt fD]-}t | |d¦«¦«‰j|<Œ.dS)zUReport MAx Cache state of W3 Total Cache domains; None paths mean enumeration failed.NrÅcó0•—‰ ‰‰¦«Srg)Ú_get_w3tc_maxcache_counts)rr¼rÃs€€€rjrñz@CloudlinuxSummary._fill_w3tc_plugin_statistics..™sø€˜×6Ò6°xÀÑQÔQ€riz,Can't analyze W3 Total Cache MAx Cache stater³r)r rrrOrPÚW3TC_MAXCACHE_ENABLED_METRICÚW3TC_MAXCACHE_DISABLED_METRICrªr)rrÃr¼rÁrÃr¹s``` rjr¹z.CloudlinuxSummary._fill_w3tc_plugin_statistics‘sÆøøø€ð Ð Ø)‰OˆG�V�Và"œo×;Ò;ØQÐQÐQÐQÐQÐQØ>ñô‰OˆG�Vð ð �j¨µÑ6Ô6ð Øz5CloudlinuxSummary._count_w3tc_site..Äs#ø€ÐSÐSÐS 6¸ÀlÐ8RÐ8R˜Ð8RÐ8RÐ8RriNrÏz>Skipping a W3 Total Cache install with an unreadable .htaccess) r°Ú_has_w3tc_maxcache_integrationrªr¶rÏrÒrDr6rØrârãrÊ) rÌr¨r»rÃrÍrÓrÕrÓrÖrÔrÂs ` rjråz"CloudlinuxSummary._count_w3tc_site»sAø€ðTÐSÐSÐS¨WÐSÑSÔSˆ Øð Ø ˆFå Ñ(Ô(ˆØ ˆ?Ø ˆFð Ø×5Ò5°gÑ>Ô>ð Øõ ŒH�WÑ Ô Ð Ð Ð õ"2°'¸;ÕHcÑ!dÔ!dÑ ˆH�hØð õ×"Ò"Ð#cÑdÔdÐdØõ ŒH�WÑ Ô Ð Ð Ð õ+¨8Ñ4Ô4ˆGå ŒH�WÑ Ô Ð Ð ø�BŒH�WÑ Ô Ð Ð øøøà18Ð[Õ-Ð-Õ>[ˆØˆvˆˆŒ�#˜lÑ+Ô+Ñ+ˆˆ‰Ø˜ Ñ$ˆ ˆ ˆ s¨CÁ5C CÃCcó —t|gt¢RŽ}|€dS t|t¦«s t j|¦«dSt|t ¦«t j|¦«S#t j|¦«wxYw)zKWhether this is W3 Total Cache in a build carrying the MAx Cache extension.NF)r»ÚW3TC_PLUGIN_DIR_PATHrÒÚW3TC_PLUGIN_MAIN_FILErªr¶ÚW3TC_MAXCACHE_INTEGRATION_FILE)rÕrÝs rjréz0CloudlinuxSummary._has_w3tc_maxcache_integrationâs‘€õ*¨'ÐIÕ4HÐIÐIÐIˆ Ø Ð Ø�5ð Ý& yÕ2GÑHÔHð Øõ ŒH�YÑ Ô Ð Ð Ð õ' yÕ2PÑQÔQå ŒH�YÑ Ô Ð Ð ø�BŒH�YÑ Ô Ð Ð øøøs˜A-ÁA-Á-BcóΗd}i}d}tj¦«D]Ê} tj|¦«}n?#t$r2}t dt |¦«¦«Yd}~ŒOd}~wwxYw|D]p\}}|sŒ||vrW tj  tj  ||¦«¦«||<n#t$rd||<YnwxYw||r|dz }ŒqŒË|S)zk Count how many sites (domains) have old wp-config.php.backup file in their document root. zwp-config.php.backuprú(Can't get user's domains info, error: %sNFrV) rr…rér¤rDrErçrªr^r_r9r¯)Úbackup_filenameÚdocroot_has_backupÚaffected_domainsÚuserÚ domains_infor[r×rïs rjr¶z?CloudlinuxSummary._count_sites_with_wp_config_backup_in_docrootòs<€ð 1ˆØ.0ÐØÐå”M‘O”Oð *ð *ˆDð Ý$Ô0°Ñ6Ô6� � øÝð ð ð Ý× Ò Ð!KÍSÐQRÉVÌVÑTÔTÐTØ����øøøøð øøøð$0ð *ð *‘�˜ØðØØÐ"4Ð4Ð4ð<Ý68´g·n²nÅRÄWÇ\Â\ÐRYÐ[jÑEkÔEkÑ6lÔ6lÐ*¨7Ñ3Ð3øÝ"ð<ð<ð<à6;Ð*¨7Ñ3Ð3Ð3ð<øøøð& gÔ.ð*Ø$¨Ñ)Ð$øð *ð Ðs'�2² A.¼(A)Á)A.ÂACÃCÃCcóv—d}i}tD]}t|¦«\}}d||<d||<Œt¦«}|D�]ü}|dz dz dz } tj|tjtjztjz¦«} n#t$rYŒUwxYw tj tj | ¦«j ¦«s | dkrtj | ¦«Œ¡tj| ddd¬ ¦«5} d } |  |d z¦«} d d d ¦«n #1swxYwYt!| ¦«|kr | dkrtj | ¦«�Œ|  ¦«} n+#t$rY| dkrtj | ¦«�ŒWwxYw | dkrtj | ¦«n #| dkrtj | ¦«wwxYwt!| ¦«d kr�Œ¬d | d d …¦« ¦«} | s�Œß t)j| ¦«}n#t,$rY�ŒwxYwt/|t0¦«s�Œ| ¦«D]Ê\}}||vrŒ | |¦«t/|t0¦«sŒ5tD]�}| |d¦«} t9|¦«}n#t:t<f$rd}YnwxYw|d kr#t|¦«\}}||xxd z cc<Œkt|¦«\}}||xxd z cc<ŒŽŒË�Œþ|S)z¯ Parse wp-content/wp-rocket-config/status.php files (JSON after the first line) and count how many unique domains have each *_status enabled/disabled. r“rr�r’z status.phprorÀrÁ)rgrÂr¿rVNr°ú )r·r§rÕrªr«r¬rµr®r¯rÄrÅrÆrÇr¶rÈrÉrÊÚ splitlinesr9rprNr7r¤rOrPr~rêrrªrSrT)rÃÚmax_status_bytesrÃr–r¿rÀrÍr¨Ú status_pathrÌrÍrÎÚlinesÚpayloadrËr×ÚmetricsÚkeyÚvalÚ normalizedr2s rjr²z9CloudlinuxSummary._get_accelerate_wp_plugin_status_counts sù€ð'Ðà!#ˆÝ:ð &ð &ˆJÝ*KÈJÑ*WÔ*WÑ 'ˆL˜-Ø#$ˆF�<Ñ Ø$%ˆF�=Ñ !Ð !Ý™EœEˆ àð8 3ñ8 3ˆGØ! LÑ0Ð3EÑEÈ ÑTˆKð Ý”W˜[­"¬+½¼ Ñ*EÍÌ Ñ*UÑVÔV��øÝð ð ð Ø�ð øøøð !Ý”|¥B¤H¨R¡L¤LÔ$8Ñ9Ô9ðØð˜’7�7Ý”H˜R‘L”L�Løõ”Y˜r 3°ÀÐKÑKÔKð7ÈqØ�BØŸ&š&Ð!1°AÑ!5Ñ6Ô6�Cð7ð7ð7ñ7ô7ð7ð7ð7ð7ð7ð7øøøð7ð7ð7ð7õ�s‘8”8Ð.Ò.Ð.Øð ˜’7�7Ý”H˜R‘L”L�Lùð ŸšÑ(Ô(��øÝð ð ð Øà˜’7�7Ý”H˜R‘L”L�Lùð  øøøðð˜’7�7Ý”H˜R‘L”L�Løøð˜’7�7Ý”H˜R‘L”L�L�Lðøøøõ�5‰zŒz˜AŠ~ˆ~Ùà—i’i  a b b¤ Ñ*Ô*×0Ò0Ñ2Ô2ˆGØð Ùð Ý”z 'Ñ*Ô*��øÝð ð ð Ø‘ð øøøõ˜d¥DÑ)Ô)ð Ùà#'§:¢:¡<¤<ð 3ð 3‘�˜Ø˜\Ð)Ð)ØØ× Ò  Ñ(Ô(Ð(å! '­4Ñ0Ô0ðØå;ð 3ð 3�CØ!Ÿ+š+ c¨1Ñ-Ô-�Cð'Ý%(¨¡X¤X˜ ˜ øÝ%¥zÐ2ð'ð'ð'Ø%&˜ ˜ ˜ ð'øøøð" Q’�Ý*KÈCÑ*PÔ*P™˜  aؘ|Ð,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ð,å+LÈSÑ+QÔ+QÑ(˜˜=ؘ}Ð-Ð-Ô-°Ñ2Ð-Ð-Ñ-Ð-ð 3ñ 3ð,ˆ s�Á 9B BÂBÂ+E+ÃE+Ã4DÄ E+ÄD ÄE+Ä"D Ä#E+ÅE+Å*F2Å+ FÅ5F2ÆFÆF2Æ2GÈH0È0 H>È=H>ËKËK' Ë&K' cóB‡‡— | ¦«\ŠŠnC#t$r6}t dt |¦«¦«gŠgŠYd}~nd}~wwxYw|j ˆfd„ddd¦«|j ˆfd„ddd¦«dS) Nz4Error while getting per-user WordPress statistics %scó"•—t‰¦«Srgr´)Ú users_with_wps€rjrñz@CloudlinuxSummary._fill_per_user_wp_statistics..i r·rirªÚ$users_count_with_wordpress_installedz7Can't get total count of users with wordpress installedcó"•—t‰¦«Srgr´)Úusers_with_wp_and_litespeeds€rjrñz@CloudlinuxSummary._fill_per_user_wp_statistics..o sø€•CÐ3Ñ4Ô4€riÚ0users_count_with_wordpress_and_lscache_installedzECan't get total count of users with wordpress and LiteSpeed installed)Ú_prepare_per_user_wp_statisticsr¤rDrErçr r)rr[rrs @@rjÚ_fill_per_user_wp_statisticsz.CloudlinuxSummary._fill_per_user_wp_statistics` séøø€ð -Ø9=×9]Ò9]Ñ9_Ô9_Ñ 6ˆMÐ6Ð6øÝð -ð -ð -Ý × Ò ÐSÕUXÐYZÑU[ÔU[Ñ \Ô \Ð \؈MØ*,Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'øøøøð -øøøð Œ×"Ò"Ø &Ð &Ð &Ð &Ø Ø 2Ø Eñ  ô ð ð Œ×"Ò"Ø 4Ð 4Ð 4Ð 4Ø Ø >Ø Sñ  ô ð ð ð s„œ A¦,AÁAcób—| d|¦«}| d|¦«}||fS)zq Prepares dict with plugin-counter pairs e.g: {'w3-total-cache': 4, 'redis': 1, 'ls': 2} ú object-cacheúadvanced-cache)Ú_get_plugin_info)rrÃr£r§s rjrµz0CloudlinuxSummary._prepare_wp_plugins_statisticsu s=€ð $×4Ò4°^ÀXÑNÔNÐØ!%×!6Ò!6Ð7GÈÑ!RÔ!RÐØ#Ð%;Ð;Ð;riÚ plugin_typec󬇗ttdˆfd„|D¦«¦«¦«}tt¦«}|D]}||xxdz cc<Œ|S)Ncó0•—g|]}t|‰¦«‘ŒSrh)r)r1r^r s €rjr|z6CloudlinuxSummary._get_plugin_info..€ s%ø€Ð1nÐ1nÐ1nÐ]aÕ2EÀdÈKÑ2XÔ2XÐ1nÐ1nÐ1nrirV)rÚfilterrrª)r rÃr£Úobject_plugin_counter_pairsÚplugins` rjr z"CloudlinuxSummary._get_plugin_info~ ssø€å#¥F¨4Ð1nÐ1nÐ1nÐ1nÐemÐ1nÑ1nÔ1nÑ$oÔ$oÑpÔpÐÝ&1µ#Ñ&6Ô&6Ð#Ø*ð 5ð 5ˆFØ '¨Ð /Ð /Ô /°1Ñ 4Ð /Ð /Ñ /Ð /Ø*Ð*ricóò—gg}}i}i}tt¦«}tj¦«}|D�]¿} tj|¦«}n#t $rYŒ%wxYwtt ¦«} |D]?\} } tj  | ¦«r| |   | ¦«Œ@| D�]<} |  || | ¦«} | d} | d}|  | ¦«|  | d¦«| D]º}|  |¦«}|�8tt| ¦«j¦«t|j¦«krŒQtj || ¦«}t%| | d¬¦«}|€Œ‹t| ¦«||<|tjkr|n|›d|›�g||<Œ»| r#|dkr||xxt| ¦«z cc<�Œ>�ŒÁ||||fS)z² Return Wordpress absolute paths, paths with install WPOS object cache module, counter of php versions used by these Wordpresses, and each path's domain. rÃÚ php_versionÚ'wp_paths_with_enabled_wpos_object_cacheN)Údefaultú/Ú undefined)rrªrr…rér¤rrªr^rÚappendÚ_get_docroot_wp_inforõrrÊr ÚpartsÚrelpathÚminÚcurdir)rrŸÚ$paths_with_enabled_wpos_object_cacher¼Úwp_path_seen_fromÚ php_versionsÚ panel_usersrórôÚdocroot_domains_mapr×rïÚ docroot_infoÚdocroot_wp_pathsÚdocroot_php_versionÚwp_pathÚseenÚsuffixÚprimarys rjr´z(CloudlinuxSummary._prepare_wp_statistics† s_€ð>@ÀÐ:ˆ Ø13ˆØ.0ÐÝ"¥3Ñ'Ô'ˆ Ý”m‘o”oˆ Øð$ Oñ$ OˆDð Ý$Ô0°Ñ6Ô6� � øÝð ð ð Ø�ð øøøõ#.­dÑ"3Ô"3Ð à#/ð @ð @‘�˜Ý”7—>’> 'Ñ*Ô*ð@Ø'¨Ô0×7Ò7¸Ñ?Ô?Ð?øà.ð Oñ O�Ø#×8Ò8¸¸wÐH[Ñ\Ô\� Ø#/° Ô#;Ð Ø&2°=Ô&AÐ#à×#Ò#Ð$4Ñ5Ô5Ð5Ø4×;Ò;¸LÐIrÔÔ>�FÝ!Ð"5°gÔ">ÈÐMÑMÔM�GØ�Ø Ý15°g±´Ð% gÑ.à#)­R¬YÒ#6Ð#6˜˜¸wÐ’> 'Ñ*Ô*ð@Ø'¨Ô0×7Ò7¸Ñ?Ô?Ð?øà.ð :ð :�Ø#×8Ò8¸¸wÐH[Ñ\Ô\� å�| JÔ/Ñ0Ô0°1Ò4Ð4Ø!×%Ò% dÑ+Ô+Ð+Ý�|Ð$KÔLÑMÔMÐPQÒQÐQØ/×3Ò3°DÑ9Ô9Ð9øñ  :ðÐ9Ð9Ð9s¶A Á BÁ(BÂBrórïr#c󇇗ggt¦«ddœ}ˆˆfd„t‰¦«D¦«}|s|Sˆfd„|D¦«|d< ˆfd„t||¦«D¦«|d<n*#t$rt d¦«YnwxYw|dD]À} t |d ¦«}n,#t$rt d ¦«d }YnwxYw|�d |vr|d  |¦« t |d¦«}n,#t$rt d¦«d }YnwxYw|�d |vr|d  |¦«ŒÁ‰‰D]$} | | ¦«} | dkr| |d<nŒ%|S)zM Return data about docroot's WP paths and used php versions. r)rÃrr,rcó •—g|]J}tj ‰|¦«‰ks"tj ‰|¦«‰v¯H|‘ŒKSrh)rªr^r9)r1r'rïr#s €€rjr|z:CloudlinuxSummary._get_docroot_wp_info..ê sZø€ð ð ð àÝ”— ’ ˜W gÑ.Ô.°'Ò9Ð9½R¼W¿\º\È'ÐSZÑ=[Ô=[ÐcvÐ=vÐ=vð à=vÐ=vÐ=vricóT•—g|]$}t‰¦« |¦«‘Œ%Srh©r Újoinpath©r1r^rïs €rjr|z:CloudlinuxSummary._get_docroot_wp_info..ô s-ø€Ð#VÐ#VÐ#VÀT¥D¨¡M¤M×$:Ò$:¸4Ñ$@Ô$@Ð#VÐ#VÐ#VrirÃcóX•—g|]&}|®t‰¦« |¦«‘Œ'Srgr0r2s €rjr|z:CloudlinuxSummary._get_docroot_wp_info..÷ s@ø€ðGðGðGàØÐ#õ�W‘ ” ×&Ò& tÑ,Ô,à#Ð#Ð#rirz:Can't get WordPress sites with enabled Object Cache moduler z0Can't get Object Cache plugin for Wordpress siteNrœr,r z2Can't get Advanced Cache plugin for Wordpress siter) rÕrrr¤rDrrrêÚ_get_php_version_for_domain) rrórïr#r$rÃr^Úobject_cache_pluginÚadvanced_cache_pluginr×rs `` rjrz&CloudlinuxSummary._get_docroot_wp_infoÜ ssøø€ðØ79Ý58±U´UØ&ð  ð ˆ ð ð ð ð ð å(¨Ñ1Ô1ð ñ ô ˆðð ØÐ à#VÐ#VÐ#VÐ#VÈXÐ#VÑ#VÔ#Vˆ �ZÑ ð _ðGðGðGðGå<¸TÀ8ÑLÔLðGñGôGˆLÐBÑ CÐ Cøõ ð _ð _ð _Ý × Ò Ð!]Ñ ^Ô ^Ð ^Ð ^Ð ^ð _øøøð! Ô,ð Pð PˆDð +Ý&9¸$ÀÑ&OÔ&OÐ#Ð#øÝð +ð +ð +Ý×$Ò$Ð%WÑXÔXÐXØ&*Ð#Ð#Ð#ð +øøøð#Ð.°;ÐBUÐ3UÐ3UØÐDÔE×IÒIÈ$ÑOÔOÐOð -Ý(;¸DÐBRÑ(SÔ(SÐ%Ð%øÝð -ð -ð -Ý×$Ò$Ð%YÑZÔZÐZØ(,Ð%Ð%Ð%ð -øøøð%Ð0°[ÐDYÐ5YÐ5YØÐDÔE×IÒIÈ$ÑOÔOÐOøà)¨'Ô2ð ð ˆFØ×:Ò:¸6ÑBÔBˆKؘkÒ)Ð)Ø.9� ˜]Ñ+Ø�ð*ðÐs6ÁA(Á($BÂBÂB.Â.&CÃCÃ<D Ä &D6Ä5D6r×có—tj¦«tjtjtjfvrdS| ¦«\}}}| |i¦«}| dd¦«}tj¦«tjkr||kr|S| ¦«D],\}}||vr#|dkrd|  dd¦«›�} | cSŒ-tj¦«tjkrd|  dd¦«›�} | Stj¦«tjkrE| 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. rÚphp_version_idr¢zalt-phprÞr-zda-phpÚ handler_typeNú-) rxr�rrVÚDIRECTADMIN_NAMEr‰Ú_get_system_php_inforr~rÁrÊrp) rr×Úsystem_default_php_versionÚdomains_php_infoÚselector_php_infoÚphp_infoÚmulti_php_versionr`r»Úalt_php_versionÚda_php_versionÚhandlerrs rjr4z-CloudlinuxSummary._get_php_version_for_domain s™€õ Ô Ñ Ô ¥eÔ&7½Ô9OÕQVÔQaÐ%bÐ bÐ bØ�;àJN×JcÒJcÑJeÔJeÑGÐ"Ð$4Ð6Gð$×'Ò'¨°Ñ3Ô3ˆØ$ŸLšLÐ)9¸;ÑGÔGÐõ Ô Ñ Ô ¥Ô!2Ò 2Ð 2Ð7QÐUfÒ7fÐ7fØ$Ð $ð!2× 7Ò 7Ñ 9Ô 9ð 'ð 'Ñ ˆG�WؘРР W°Ò%8Ð%8Ø"F¨G¯OªO¸CÀÑ,DÔ,DÐ"FÐ"F�Ø&Ð&Ð&Ð&øå Ô Ñ Ô ¥Ô!7Ò 7Ð 7ØJÐ&7×&?Ò&?ÀÀRÑ&HÔ&HÐJÐJˆNØ!Ð !å Ô Ñ Ô ¥Ô!1Ò 1Ð 1Ø—l’l >°2Ñ6Ô6ˆGØ+¨O­s°7©|¬|¨m¨OÔ<×BÒBÀ3ÑGÔGˆKØÐ- +Ð -à Ð ri)Úmaxsizecó— tj¦«d}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_idNÚdomains_by_php_version)rÚget_system_php_infor¤Úget_domains_php_infor])Úsystem_php_versionr>Úphp_selector_usager?s rjr<z&CloudlinuxSummary._get_system_php_infoA s�€ð &Ý!&Ô!:Ñ!<Ô!<Ð=QÔ!RÐ Ð øÝð &ð &ð &Ø!%Ð Ð Ð ð &øøøõ!Ô5Ñ7Ô7Ðå3Ñ5Ô5ÐØ Ð )Ø 2Ð3KÔ LÐ Ð à "Ð à!Ð#3Ð5FÐFÐFs ‚œ +ª+có‡—|j |jd¦«\}Š|st|jd<dS‰��B|j ˆfd„ddd¦«|j ˆfd„d d d ¦«|j ˆfd „d dd ¦«|j ˆfd„d dd¦«|j ˆfd„d dd¦«|j ˆfd„ddd¦«|j ˆfd„d dd¦«|j ˆfd„ddd¦«|j ˆfd„ddd ¦«|j ˆfd!„d"d#d$¦«dSt |jd<dS)%z/ Fill dict with SSA statistics zCan't get SSA statisticsÚ ssa_statusNcó•—‰dS)Nr;rh©Ú ssa_statss€rjrñz8CloudlinuxSummary._fill_ssa_statistics..g ó ø€¨y¸Ô/B€rir˜Ú ssa_configzCan't get SSA configcó•—‰dS)Nr`rhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..i s ø€˜  )Ô,€rirçÚ ssa_versionzCan't get version of SSAcó•—‰dS)NrÆrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..k rRrizCan't get state of SSAcó•—‰dS)NÚ agent_statusrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..m s ø€˜  .Ô1€riÚssa_agent_statuszCan't get state of SSA agentcó •—‰ddS)NÚ autotracingrÆrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..p sø€˜  -Ô0°Ô:€riÚautotracing_statusz"Can't get state of SSA Autotracingcó •—‰ddS)Nr[Údisabled_users_quantityrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..v sø€˜  -Ô0Ð1JÔK€rirªÚ#autotracing_disabled_users_quantityz1Can't get state of SSA Autotracing disabled userscó •—‰ddS)Nr[Ú rules_versionrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..| óø€˜  -Ô0°ÔA€riÚautotracing_rules_versionz'Can't get SSA Autotracing rules versioncó •—‰ddS)Nr[Úurls_processedrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..‚ sø€˜  -Ô0Ð1AÔB€riÚautotracing_urls_processedz.Can't get SSA Autotracing processed URLs countcó •—‰ddS)Nr[Ú urls_selectedrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..ˆ rbriÚautotracing_urls_selectedz-Can't get SSA Autotracing selected URLs countcó •—‰ddS)Nr[ÚrejectsrhrPs€rjrñz8CloudlinuxSummary._fill_ssa_statistics..Ž sø€˜  -Ô0°Ô;€rir�Úautotracing_rejectsz!Can't get SSA Autotracing rejects)r rrÚ get_ssa_statsrtrr…)rrÁrQs @rjÚ_fill_ssa_statisticsz&CloudlinuxSummary._fill_ssa_statisticsY s;ø€ð"œ_×:Ò:Ø Ô Ø &ñ ô ш�ð ð Ý,1ˆDŒO˜LÑ )Ø ˆFà Ñ Ø ŒO× &Ò &Ð'BÐ'BÐ'BÐ'BÀJÐP\Ð^tÑ uÔ uÐ uØ ŒO× &Ò &Ø,Ð,Ð,Ð,¨e°]ÐD^ñ ô ð ð ŒO× &Ò &Ð'BÐ'BÐ'BÐ'BÀEÈ<ÐYqÑ rÔ rÐ rØ ŒO× &Ò &Ø1Ð1Ð1Ð1°5Ð:LÐNlñ ô ð ð ŒO× &Ò &Ø:Ð:Ð:Ð:ØØ$Ø4ñ  ô ð ð ŒO× &Ò &ØKÐKÐKÐKØØ5ØCñ  ô ð ð ŒO× &Ò &ØAÐAÐAÐAØØ+Ø9ñ  ô ð ð ŒO× &Ò &ØBÐBÐBÐBØØ,Ø@ñ  ô ð ð ŒO× &Ò &ØAÐAÐAÐAØØ+Ø?ñ  ô ð ð ŒO× &Ò &Ø;Ð;Ð;Ð;ØØ%Ø3ñ  ô ð ð ð õ-:ˆDŒO˜LÑ )Ð )Ð )ricóø‡—|j d„d¦«\}}|st|jd<dS|��´|j t |jd¦«ddd¦«|j t |j|t¦«dd d¬ ¦«|j t |j|t¦«dd d¬ ¦«|j tdd d ¦«|j tddd¦«|j td¦«j ddd¦«|j tddd¦«|j td¦«\}Š|r‰€d|jd<d|jd<dS|j ˆfd„ddd¬ ¦«|j ˆfd„ddd¬ ¦«dSt|jd<dS)zS Fill dict with statistics by varied statistics about PHP selector có —td¦«S)Nrƒ)r^rhrirjrñzACloudlinuxSummary._fill_php_selector_statistics..� s€Õ+¨EÑ2Ô2€riz+Can't get statistics about PHP interpretersÚselector_php_statusNrƒrçz Can't get status of PHP selectorrÚselector_php_versions_installedrÄÚselector_php_versions_enabledÚselector_php_version_defaultz,Can't get default version of PHP interpreterÚselector_php_version_nativez+Can't get native version of PHP interpreterrªÚselector_php_enabled_uiz%Can't get state of UI of PHP selectorÚselector_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_interpretercóL•—d„‰d ¦«D¦«S)Ncó4—i|]\}}|t|¦«“ŒSrhr´©r1Úvr»s rjú zUCloudlinuxSummary._fill_php_selector_statistics....Ö s$€ÐsÐsÐs±°°G˜Q¥ G¡ ¤ ÐsÐsÐsrirH©r~©Úphp_usage_summarys€rjrñzACloudlinuxSummary._fill_php_selector_statistics..Ö s)ø€ÐsÐsÐ?PÐQiÔ?j×?pÒ?pÑ?rÔ?rÐsÑsÔs€rir�cóL•—d„‰d ¦«D¦«S)Ncó4—i|]\}}|t|¦«“ŒSrhr´r|s rjr~zUCloudlinuxSummary._fill_php_selector_statistics....Ü s$€ÐqÐqÐq±°°G˜Q¥ G¡ ¤ ÐqÐqÐqriÚusers_by_php_versionrr€s€rjrñzACloudlinuxSummary._fill_php_selector_statistics..Ü s)ø€ÐqÐqÐ?PÐQgÔ?h×?nÒ?nÑ?pÔ?pÐqÑqÔq€ri)r rrrtrrr‰Ú"_get_list_versions_of_interpertersÚ INSTALLEDr)rZr\r`Úphp_selector_is_enabledr[r]r…)rrÁÚphp_interpretersr�s @rjÚ_fill_php_selector_statisticsz/CloudlinuxSummary._fill_php_selector_statistics— s‰ø€ð %)¤O×$AÒ$AØ 2Ð 2Ð4añ% ô% Ñ!ˆÐ!ððB CÝ5:ˆDŒOÐ1Ñ 2Ð 2Ð 2Ø Ñ )Ø ŒO× &Ò &ݘÔ4°eÑ<Ô<ØØ%Ø2ñ  ô ð ð ŒO× &Ò &ݘÔ?ÐAQÕS\Ñ]Ô]ØØ1Ø ð 'ñ ô ð ð ŒO× &Ò &ݘÔ?ÐAQÕSZÑ[Ô[ØØ/Ø ð 'ñ ô ð ð ŒO× &Ò &Ý'ØØ.Ø>ñ  ô ð ð ŒO× &Ò &Ý'ØØ-Ø=ñ  ô ð ð ŒO× &Ò &Ý% eÑ,Ô,ÔDØØ)Ø7ñ  ô ð ð ŒO× &Ò &Ý(ØØ#Ø0ñ  ô ð ð *.¬×)FÒ)FÝ&Ø9ñ*ô*Ñ &ˆGÐ&ðð Ð/Ð7ØMQ�”Ð IÑJØKO�”Ð GÑHÐHÐHà”×*Ò*ØsÐsÐsÐsØØ=Ø $ð +ñôðð ”×*Ò*ØqÐqÐqÐqØØ;Ø $ð +ñôðððõ6CˆDŒOÐ1Ñ 2Ð 2Ð 2ricóJ—|j |jddd¦«dS)zÁ Fill dict with statistics about PHP handler usage across domains. Collects the count of domains using each PHP handler type (e.g. cgi, suphp, fpm, lsapi, dso). r�Úphp_handler_domains_countz Can't get PHP handler statisticsN)r rÚ_get_php_handler_domain_countsrs rjÚ_fill_php_handler_statisticsz.CloudlinuxSummary._fill_php_handler_statisticsä s7€ð Œ×"Ò"Ø Ô /Ø Ø 'Ø .ñ  ô ð ð ð ricóÄ—tj¦«}i}| ¦«D]5}| d¦«pd}| |d¦«dz||<Œ6|S)zY Return a mapping of PHP handler type to the number of domains using it. r9rqrrV)rrJrõr)r>Úhandler_countsÚ domain_inforDs rjrŒz0CloudlinuxSummary._get_php_handler_domain_countsñ ss€õ !Ô5Ñ7Ô7ÐØ)+ˆØ+×2Ò2Ñ4Ô4ð Ið IˆKØ!—o’o nÑ5Ô5ÐB¸ˆGØ&4×&8Ò&8¸À!Ñ&DÔ&DÀqÑ&HˆN˜7Ñ #Ð #ØÐriÚ total_appsÚamount_of_apps_per_domaincó(—|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 rVNrh)r‘r’s rjÚ_get_average_apps_per_domainz.CloudlinuxSummary._get_average_apps_per_domainý s)€ð ˜Š>ˆ>Ð6¸Ò:Ð:Ø�4ØÐ6Ñ6Ð6riÚamount_of_apps_per_usercó(—|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 rVNrh)r‘r•s rjÚ_get_average_apps_per_userz,CloudlinuxSummary._get_average_apps_per_user s)€ð ˜Š>ˆ>Ð4°qÒ8Ð8Ø�4ØÐ4Ñ4Ð4riÚappscó4—td„|D¦«¦«S)z Get amount of running applications on server :param apps: list of applications for something selector có6—g|]}|j¯ |jdk¯|‘ŒS)Ústarted)Ú app_status)r1Úapps rjr|z@CloudlinuxSummary._get_amount_of_runned_apps.. s,€ÐZÐZÐZ˜C¨3¬>ÐZ¸c¼nÐPYÒ>YÐ>Y�CÐ>YÐ>YÐ>Yrir´)r˜s rjÚ_get_amount_of_runned_appsz,CloudlinuxSummary._get_amount_of_runned_apps s!€õÐZÐZ 4ÐZÑZÔZÑ[Ô[Ð[ricóž—t¦«}|D]}||jxxdz cc<Œ| d¦«pdg}|ddS)z€ Get maximum amount of applications per domain :param apps: list of applications for something selector rV©rrr)rÚdoc_rootÚ most_common)r˜Úapps_per_domainr�Ú most_commonss rjÚ_get_max_apps_per_domainz*CloudlinuxSummary._get_max_apps_per_domain sh€õ"™)œ)ˆØð /ð /ˆCØ ˜CœLÐ )Ð )Ô )¨QÑ .Ð )Ð )Ñ )Ð )ð'×2Ò2°1Ñ5Ô5ÐA¸&¸ˆ ؘAŒ˜qÔ!Ð!ricóž—t¦«}|D]}||jxxdz cc<Œ| d¦«pdg}|ddS)z~ Get maximum amount of applications per user :param apps: list of applications for something selector rVr r)rrór¢)r˜Ú apps_per_userr�r¤s rjÚ_get_max_apps_per_userz(CloudlinuxSummary._get_max_apps_per_user. sh€õ ™ œ ˆ Øð )ð )ˆCØ ˜#œ(Ð #Ð #Ô # qÑ (Ð #Ð #Ñ #Ð #ð%×0Ò0°Ñ3Ô3Ð?¸°xˆ ؘAŒ˜qÔ!Ð!ricóV—t¦«}|D]}||jxxdz cc<Œ|S)z£ Get Counter object which contains amount applications per version of interpreter :param apps: list of applications for something selector rV)rr`)r˜Úapps_per_versionr�s rjÚ_get_counter_apps_per_versionz/CloudlinuxSummary._get_counter_apps_per_version> sD€õ#™9œ9ÐØð /ð /ˆCØ ˜Sœ[Ð )Ð )Ô )¨QÑ .Ð )Ð )Ñ )Ð )àÐricóx—| |¦«}| d¦«pdg}|ddS)z� Get maximum amount of applications per version of interpreter :param apps: list of applications for something selector rVr r)r«r¢)rr˜rªr¤s rjÚ_get_max_apps_per_versionz+CloudlinuxSummary._get_max_apps_per_versionK sC€ð  ×=Ò=¸dÑCÔCÐð(×3Ò3°AÑ6Ô6ÐB¸6¸(ˆ ؘAŒ˜qÔ!Ð!ricóz—t¦«}|D]}| |j¦«Œt|¦«S)zz Get amount of domains with applications :param apps: list of applications for something selector )rÕrêr¡rÊ)r˜r»r�s rjÚ _get_amount_of_domains_with_appsz2CloudlinuxSummary._get_amount_of_domains_with_appsX s?€õ‘%”%ˆØð &ð &ˆCØ �KŠK˜œ Ñ %Ô %Ð %Ð %å�7‰|Œ|Ðricóz—t¦«}|D]}| |j¦«Œt|¦«S)zx Get amount of users with applications :param apps: list of applications for something selector )rÕrêrórÊ)r˜Úusersr�s rjÚ_get_amount_of_users_with_appsz0CloudlinuxSummary._get_amount_of_users_with_appse s?€õ‘”ˆØð ð ˆCØ �IŠI�c”hÑ Ô Ð Ð å�5‰zŒzÐricóJ—| |¦«}t|¦«S)z� Get amount of applications per each version of interpeters :param apps: list of applications for something selector )r«rP)rr˜rªs rjÚ4_get_amount_of_apps_per_each_version_of_interpreterszFCloudlinuxSummary._get_amount_of_apps_per_each_version_of_interpretersr s'€ð  ×=Ò=¸dÑCÔCÐåÐ$Ñ%Ô%Ð%riÚinterpreters_statsÚstatecóD‡—ˆfd„| ¦«D¦«S)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|]\}}|‰¯ |‘ŒSrhrh)r1Úinterpreter_statsrÄr¶s €rjr|zHCloudlinuxSummary._get_list_versions_of_interperters..„ s,ø€ÐkÐkÐkÑ&=Ð&7¸Ð_cÐdiÔ_jÐkÐ!ÐkÐkÐkrir)rµr¶s `rjr…z4CloudlinuxSummary._get_list_versions_of_interperters| s-ø€ðlÐkÐkÐkÐAS×AYÒAYÑA[ÔA[ÐkÑkÔkÐkricóF—t|¦«}|�t|¦«SgS)zI Get list of apllications on server for defined selector )r_r)r�Ú iter_appss rjÚ_get_list_of_applicationsz+CloudlinuxSummary._get_list_of_applications† s(€õ -¨[Ñ9Ô9ˆ Ø Ð Ý˜ ‘?”?Ð "؈ riÚnodejs_applicationsc ót‡—|jD�]-}|j tt|¦«d|›d�¦«\}}|€t |jd|zdz<ŒP|st |jd|zdz<Œh|j t|j|¦«dd|zdz|rd|›d�nd¦«|j t|j |t¦«d d|zd zd¬ ¦«|j t|j |t¦«d d|zd zd¬ ¦«|d kr|�d|c}Šn5|j t|j |¦«d|›d�¦«\}Š|s�Œg|j ˆfd„dd|zdzd¬ ¦«|jd|zdzdk|jd|zdz<|j t|j ‰¦«dd|zdzd¬ ¦«|j tt|¦«d|›d�¦«\}}|r|�||jd|zdz<|j t|j‰¦«dd|zdzd|›d�¦«|j t|j‰¦«dd|zdzd|›d�¦«|j t|j‰¦«dd|zdzd|›d �¦«|j t|j‰¦«dd|zd!zd"|›d �¦«|j t|j|jd|zdz|jd|zd!z¦«d#|›d�¦«\}}|r|�||jd|zd$z<|j t|j|jd|zdz|jd|zdz¦«d%|›d�¦«\}}|r|�||jd|zd&z<|j t|j‰¦«d'd|zd(zd)|›d�¦«�Œ/dS)*a§ Fill dict with statistics by varied statistics about ruby/nodejs/python selectors :param nodejs_applications: Node.js applications already listed by lvemanager's combined collector, so this method does not walk every account a second time. None means no such listing was obtained and the ordinary per-interpreter listing is used, exactly as before. zCan't get statistics about z interpretersNÚ selector_r�rçzCan't get status of z selectorrÚ_versions_installedrÄÚ_versions_enabledrTzCan't get list of z applicationscó"•—t‰¦«Srgr´)Úinterpreter_appss€rjrñz>CloudlinuxSummary._fill_selectors_statistics..É sø€�Ð,Ñ-Ô-€rirªÚ_applications_amountrÚ_usedÚ_applications_runningzCan't get default version of Ú_default_versionÚ_max_applications_per_domainz*Can't get max applications per domain for z interpreterÚ_max_applications_per_userz(Can't get max applications per user for Ú_num_users_with_appsz0Can't get amount of users with applications for z interpeterÚ_num_domains_with_appsz2Can't get amount of domains with applications for z8Can't get average amount of applications per domain for Ú _average_applications_per_domainz6Can't get average amount of applications per user for Ú_average_applications_per_userr�Ú _num_applications_by_interpreterz5Can't get amount of applications per each version of )Ú SELECTORSr rrrr^r…rtrr‰r…r†r)r¼ržrYr¥r¨r²r¯r”r—r´) rr½ÚselectorrÁrµÚdefault_version_of_selectorÚaverage_apps_per_domainÚaverage_apps_per_userrÃs @rjÚ_fill_selectors_statisticsz,CloudlinuxSummary._fill_selectors_statistics‘ s±ø€ðœðr ñr ˆHØ*.¬/×*GÒ*GÝÕ/°Ñ:Ô:ØE¨hÐEÐEÐEñ+ô+Ñ 'ˆGÐ'ð"Ð)ÝFS�”  ¨hÑ 6¸Ñ BÑCØàð ÝFK�”  ¨hÑ 6¸Ñ BÑCØà ŒO× &Ò &ݘÔ4°hÑ?Ô?ØØ˜hÑ&¨Ñ2Ø>EÐOÐ: xÐ:Ð:Ð:Ð:È4ñ  ô ð ð ŒO× &Ò &ݘÔ?ÐASÕU^Ñ_Ô_ØØ˜hÑ&Ð)>Ñ>Ø ð 'ñ ô ð ð ŒO× &Ò &ݘÔ?ÐASÕU\Ñ]Ô]ØØ˜hÑ&Ð)<Ñ<Ø ð 'ñ ô ð ð ˜8Ò#Ð#Ð(;Ð(GØ,0Ð2EÐ)�Ð)Ð)à,0¬O×,IÒ,IݘDÔ:¸HÑEÔEØ@¨Ð@Ð@Ð@ñ-ô-Ñ)�Ð)ðð Ùà ŒO× &Ò &Ø-Ð-Ð-Ð-ØØ˜hÑ&Ð)?Ñ?Ø ð 'ñ ô ð ð”  ¨hÑ 6Ð9OÑ OÔPÐSTÒTð ŒO˜K¨(Ñ2°WÑ<Ñ =ð ŒO× &Ò &ݘÔ7Ð9IÑJÔJØØ˜hÑ&Ð)@Ñ@Ø ð 'ñ ô ð ð 48´?×3PÒ3PÝÕ+¨XÑ6Ô6ØC°ÐCÐCÐCñ4ô4Ñ 0ˆGÐ0ðð kÐ6ÐBØOj�”  ¨hÑ 6Ð9KÑ KÑLØ ŒO× &Ò &ݘÔ5Ð7GÑHÔHØØ˜hÑ&Ð)GÑGØS¸XÐSÐSÐSñ  ô ð ð ŒO× &Ò &ݘÔ3Ð5EÑFÔFØØ˜hÑ&Ð)EÑEØQ¸8ÐQÐQÐQñ  ô ð ð ŒO× &Ò &ݘÔ;Ð=MÑNÔNØØ˜hÑ&Ð)?Ñ?ØXÀ8ÐXÐXÐXñ  ô ð ð ŒO× &Ò &ݘÔ=Ð?OÑPÔPØØ˜hÑ&Ð)AÑAØZÀXÐZÐZÐZñ  ô ð ð 04¬×/LÒ/LÝØÔ5Ø”O K°(Ñ$:Ð=SÑ$SÔTØ”O K°(Ñ$:Ð=UÑ$UÔVñôð bÈ8ÐaÐaÐañ 0ô0Ñ ,ˆGÐ,ðð wÐ2Ð>Ø_v�”  ¨hÑ 6Ð9[Ñ [Ñ\Ø-1¬_×-JÒ-JÝØÔ3Ø”O K°(Ñ$:Ð=SÑ$SÔTØ”O K°(Ñ$:Ð=SÑ$SÔTñôð `ÈÐ_Ð_Ð_ñ .ô.Ñ *ˆGÐ*ðð sÐ0Ð<Ø]r�”  ¨hÑ 6Ð9YÑ YÑZØ ŒO× &Ò &ݘÔQÐScÑdÔdØØ˜hÑ&Ð)KÑKØ_ÈÐ_Ð_Ð_ñ  ô ð ñ ð[r ðr ricóö—t€dS|j td¦«\}}|r(t|t¦«rt |¦«dkrdS|\}}t|t ¦«r|ndd|ffS)apAsk lvemanager for the Node.js applications and the Shared Store snapshot in one pass over the panel's accounts. Collected separately, the two legs walk every account twice: once through `iter_server_applications("nodejs")` for the selector metrics, and once inside the Store collector, which additionally opens each application's marker component by component with O_NOFOLLOW. :return: ``(applications, collected)``. ``applications`` is the listing to hand to `_fill_selectors_statistics`, or None when there is none to hand over and it must list them itself. ``collected`` is the ``(success, snapshot)`` pair for the Shared Store metrics, or None when this lvemanager has no combined collector and the standalone snapshot API must be used instead. N©NNzGCan't get Node.js applications and Shared node_modules Store statisticsr°)NrÅT)rcr rrrOÚtuplerÊr)rrÁÚ collectedÚ applicationsÚsnapshots rjÚ-_collect_nodejs_applications_and_shared_storez?CloudlinuxSummary._collect_nodejs_applications_and_shared_store s“€õ" 6Ð =Ø�:Ø!œ_×:Ò:Ý 6Ø Uñ ô ш�ðð '�j¨µEÑ:Ô:ð '½cÀ)¹n¼nÐPQÒ>QÐ>Qð'Ð&Ø!*ш �hÝ *¨<½Ñ >Ô >ÐH� � ÀDÈDÐRZÐK[Ð[Ð[rirØcóf—|€Ct€| t¦«dS|j td¦«}|\}}|r>t |t ¦«r)t| d¦«¦«tur| t¦«dS|drtnt|jd<|jj d}|j ¦«D]B\}}| |¦«}t|¦«t ur|dkr|n||j|<ŒC| d¦«}t|¦«t ur|dkr|nd|j|j<| d¦«} t| ¦«tur| nd|j|j<dS) aßCollect the small, privacy-safe Shared Store summary. The Node.js Selector gate belongs to the caller in `_fill_dict_with_statistics`; this method is reached only when the feature is supported. :param collected: the ``(success, snapshot)`` pair lvemanager's combined collector already produced. None means collect the snapshot here through the standalone API, which is all an older lvemanager offers. Nz.Can't get Shared node_modules Store statisticsrvÚ shared_node_modules_store_statusrªrÚpoisoned_entries_amountÚmeasurement_stale)rbÚ0_fill_unavailable_shared_node_modules_statisticsr…r rrrOrPÚtyperrrtr)r*ÚDEFAULT_RESULTSrr~rªrr) rrØrÁrÚÚ unavailablerÂÚsourceÚvalueÚpoisoned_entriesrßs rjÚ$_fill_shared_node_modules_statisticsz6CloudlinuxSummary._fill_shared_node_modules_statistics. sÉ€ð Ð Ý.Ð6Ø×EÒEÅmÑTÔTÐTØ�Øœ×5Ò5Ý/Ø@ñôˆIð&ш�Øð �z¨(µDÑ9Ô9ð ݘŸ š  YÑ/Ô/Ñ0Ô0½Ð<Ð<Ø × AÒ AÅ%Ñ HÔ HÐ HØ ˆFà  Ô*Ð 8�GˆGµð ŒÐ:Ñ;ð”oÔ5°eÔ<ˆ Ø"Ô>×DÒDÑFÔFð ð ‰NˆF�FØ—L’L Ñ(Ô(ˆEå˜e™œ­Ð+Ð+°¸² ° ��À ð ŒO˜FÑ #Ð #ð$Ÿ<š<Ð(AÑBÔBÐõÐ$Ñ%Ô%­Ð,Ð,Ð1AÀQÒ1FÐ1Fð Ð à𠌘ÔHÑIð%ŸLšLÐ)<Ñ=Ô=Ðå!%Ð&7Ñ!8Ô!8½DÐ!@Ð!@Ð Ð Àd𠌘ÔIÑJÐJÐJrirÆcó¢—||jd<|jjd}|jD] }||j|<Œ d|j|j<d|j|j<dS)NrÝrª)r rârrr)rrÆrãrÂs rjràzBCloudlinuxSummary._fill_unavailable_shared_node_modules_statistics^ sc€Ø>DˆŒÐ:Ñ;Ø”oÔ5°eÔ<ˆ ØÔ6ð 2ð 2ˆFØ&1ˆDŒO˜FÑ #Ð #ØLPˆŒ˜ÔHÑIØMQˆŒ˜ÔIÑJÐJÐJricó—ddg}t|d¬¦«\}}}|dkrt|¦«‚tj|¦«}i}|d|d<d„|dD¦«}tD]#}| |t ¦«|d |z<Œ$|S) zA Get wizard status and list of installed modules z/usr/sbin/cloudlinux-wizardrÆTr/rÚ wizard_statuscó,—i|]}|d|d“ŒS)r¹rÆrh)r1rðs rjr~z.t s#€Ð`Ð`Ð`¸v˜& œ.¨&°Ô*:Ð`Ð`Ð`riròÚwizard_module_)r,r"rNr7r6rÚ NOT_SELECTED)r:Úret_codeÚstd_outÚstd_errÚ parsed_jsonÚwizard_statisticsÚparsed_modulesrðs rjÚ_get_wizard_statisticsz(CloudlinuxSummary._get_wizard_statisticsf s¸€ð -¨hÐ7ˆÝ%0°ÈÐ%NÑ%NÔ%NÑ"ˆ�'˜7Ø �qŠ=ˆ=Ý'¨Ñ0Ô0Ð 0Ý”j Ñ)Ô)ˆ àÐØ-8¸Ô-IИ/Ñ*Ø`Ð`ÈÐU^ÔI_Ð`Ñ`Ô`ˆÝ!ð dð dˆFØ;I×;MÒ;MÈfÕVbÑ;cÔ;cÐ Ð.°Ñ7Ñ 8Ð 8à Ð ricóð‡‡—|j |jd¦«\}Š|j ˆfd„ddd¬¦«tD]'Š|j ˆˆfd„dd‰zd¬¦«Œ(dS) zX Fill dict with statistics by varied statistics about cloudlinux-wizard z,Can't get statistics about cloudlinux-wizardcó•—‰dS)Nrêrh)ròs€rjrñz;CloudlinuxSummary._fill_wizard_statistics..† s ø€Ð% oÔ6€rirçrêNrÄcó•—‰d‰zS)Nrìrh)rðròs€€rjrñz;CloudlinuxSummary._fill_wizard_statistics..� sø€Ð)Ð*:¸VÑ*CÔD€rirì)r rrrôrr6)rr2rðròs @@rjÚ_fill_wizard_statisticsz)CloudlinuxSummary._fill_wizard_statisticsz s¾øø€ð $œ×<Ò<Ø Ô 'Ø :ñ ô шРð Œ×"Ò"Ø 6Ð 6Ð 6Ð 6Ø Ø Øð #ñ ô ð õ "ð ð ˆFØ ŒO× &Ò &ØDÐDÐDÐDÐDØØ  6Ñ)Ø ð 'ñ ô ð ð ð ð ricó„—t¦«}g}|D],}|t|| ¦«¦«z }Œ-|S)zH Returns list of implemented scripts in integration.ini )r:rÚkeys)r;ÚscriptsÚsections rjÚ$_get_implemented_integration_scriptsz6CloudlinuxSummary._get_implemented_integration_scripts“ sL€õ #Ñ$Ô$ˆØˆØð 4ð 4ˆGØ •t˜F 7œO×0Ò0Ñ2Ô2Ñ3Ô3Ñ 3ˆGˆG؈ricó”—dgdœ}tj t¦«s|Sd|d<| ¦«|d<|S)zh Checks integration script exists and if exists get list of implemented scripts F)Úintegration_scripts_usedÚintegration_scripts_specifiedTrÿr)rªr^r_r9rýrbs rjÚ_get_integration_infoz'CloudlinuxSummary._get_integration_infož sT€ð /4ÐVXÐYÐYˆÝŒw�~Š~�kÑ*Ô*ð ØˆMØ-1ˆÐ)Ñ*Ø26×2[Ò2[Ñ2]Ô2]ˆÐ.Ñ/؈ ricó�—d}tj¦«}t|j¦«|z }t|j¦«|z }||fS)zG Gets memory usage: total and used memory in megabytes r“)ÚpsutilÚvirtual_memoryÚfloatÚtotalÚused)Ú bytes_in_mbÚmemÚ mem_totalÚmem_useds rjÚ_get_memory_usedz"CloudlinuxSummary._get_memory_usedª sH€ð ˆ ÝÔ#Ñ%Ô%ˆÝ˜#œ)Ñ$Ô$ {Ñ2ˆ ݘœ‘?”? [Ñ0ˆØ˜(Ð"Ð"ricóH—tj¦«}d}d}ttj¦«rot j |¦«rPt|dd¬¦«5}|  ¦«  ¦«}ddd¦«n #1swxYwY||fS)za Gets kernel info release and module version (starting from 7h) :return: z/sys/module/kmodlve/versionNrorÀrf) rPÚreleaserrr rªr^rr«rÉrp)Úkernel_releaseÚkmodlve_version_fileÚkmodlve_versionrÍs rjÚ_get_kernel_infoz"CloudlinuxSummary._get_kernel_infoµ sÏ€õ "Ô)Ñ+Ô+ˆà<ÐØˆÝ %¥g¤kÑ 2Ô 2ð 3µr´w·~²~ÐFZÑ7[Ô7[ð 3ÝÐ*¨C¸'ÐBÑBÔBð 3ÀaØ"#§&¢&¡(¤(§.¢.Ñ"2Ô"2�ð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à˜Ð.Ð.sÁ"'BÂBÂBcó8—tt¦«¦«S)zp Gets info about lve extensions usage Calculates amount of packages with lve extensions )rÊrErhrirjÚ#_get_lve_extensions_packages_amountz5CloudlinuxSummary._get_lve_extensions_packages_amountÄ s€õ Õ3Ñ5Ô5Ñ6Ô6Ð6ricó —d}tj |¦«sdSt|dd¬¦«5}| ¦« ¦«}ddd¦«n #1swxYwYt t|¦«¦«S)zk Reads /proc/sys/fs/datacycle/enable in order to check datacycle enabled parameter z/proc/sys/fs/datacycle/enableFrorÀrfN)rªr^rr«rÉrprrª)Údatacycle_filerÍrËs rjÚ$_is_kernel_datacycle_enabled_in_filez6CloudlinuxSummary._is_kernel_datacycle_enabled_in_fileÌ s´€ð 9ˆåŒw�~Š~˜nÑ-Ô-ð Ø�5å �. #°Ð 8Ñ 8Ô 8ð $¸AØ—6’6‘8”8—>’>Ñ#Ô#ˆDð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $å•C˜‘I”I‰ŒÐs¶'A)Á)A-Á0A-có—d\}}tj |¦«sdSt|dd¬¦«5}| ¦« ¦« d¦«}ddd¦«n #1swxYwY||vS)zR Checks if datacycle parameter was given for current boot )z /proc/cmdlineÚ datacycleFrorÀrfú N)rªr^rr«rÉrpÚsplit)Ú cmdline_filerurÍrËs rjÚ_is_datacycle_param_was_passedz0CloudlinuxSummary._is_datacycle_param_was_passedÛ sÀð $@Ñ ˆ �jõŒw�~Š~˜lÑ+Ô+ð Ø�5å �, ¨gÐ 6Ñ 6Ô 6ð /¸!Ø—6’6‘8”8—>’>Ñ#Ô#×)Ò)¨#Ñ.Ô.ˆDð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /à˜TÐ!Ð!s¹:A?Á?BÂBcó‚—tj¦«}d}|D]&}|ttj|¦«¦«z }Œ'|S)z= Returns general amount of domains on server r)rr…rÊré)Ú cpusers_listÚ domains_countrós rjržz+CloudlinuxSummary._get_total_domains_amountë sH€õ ”}‘”ˆ ؈ Ø ð :ð :ˆDØ �S¥Ô!2°4Ñ!8Ô!8Ñ9Ô9Ñ 9ˆMˆMØÐricóú—t¦«}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_createÚallÚ symlinks_onlyÚhardlinks_onlyÚno)r!rrªr)rÚsymlink_protection_enabledÚhardlink_protection_enableds rjÚ%_is_link_traversal_protection_enabledz7CloudlinuxSummary._is_link_traversal_protection_enabledö sˆ€õ ‘”ˆÝ%)­#¨f¯jªjÐ9WÑ.XÔ.XÑ*YÔ*YÑ%ZÔ%ZÐ"Ý&*­3¨v¯zªzÐ:YÑ/ZÔ/ZÑ+[Ô+[Ñ&\Ô&\Ð#Ø %ð Ð*Eð Ø�5Ø %ð #Ø"�?Ø &ð $Ø#Ð#؈tricóÔ—d}d}d}tj d¦«stj d¦«r|Stj d¦«r|S|S)NÚisoÚcldeployÚqcow2z/etc/cl-convert-savedz/var/log/cldeployz/etc/cloudlinux-qcow2-installr~)r*r+r,s rjÚ_get_cl_installation_sourcez-CloudlinuxSummary._get_cl_installation_source sd€àˆØˆØˆÝ Œ7�>Š>Ð1Ñ 2Ô 2ð µb´g·n²nÐEXÑ6YÔ6Yð ØˆOÝ Œ7�>Š>Ð9Ñ :Ô :ð ØˆL؈ ric󇇇‡—‰ ¦«Šttj¦«rg‰j ‰jddd¬¦«‰j ‰jddd¬¦«‰j ˆfd„ddd¬¦«td¬ ¦«s#‰j tdd d¬¦«‰j tdd d¬¦«‰j tdd d¬¦«‰j ‰j dd d¦«‰j ‰j ddd¦«‰j ˆfd„ddd¬¦«‰j ‰jddd¦«‰ ¦«Š‰j ˆfd„ddd¬¦«‰j ˆfd„ddd¬¦«‰ ¦«Š‰j ˆfd„ddd¬¦«‰j ˆfd„ddd¬¦«‰j ‰jddd¬¦«ttj¦«r ‰j ˆfd „dd!d"¦«‰j t$dd#d$¦«‰j t&dd%d&¦«‰j ‰jdd'd(¦«dS))NrªÚlve_extension_packages_amountrÄrçÚ!link_traversal_protection_enabledcó•—‰dSrPrh©Ú kernel_infos€rjrñz;CloudlinuxSummary._fill_system_statistics..# s ø€˜  Aœ€riÚinstalled_kmod_lve_versionT©Úskip_jwt_checkÚcldiag_cron_check_enabledÚ cpu_amountÚtesting_repository_enabledÚ base_distrozCan't detect platform for CLOSÚsecureboot_statusz+Can't detect whether secure boot is enabledcó•—‰dSrprhr2s€rjrñz;CloudlinuxSummary._fill_system_statistics..A s ø€�K ”N€rirÚcgroupzCan't get cgroup informationcó•—‰dS)Nrÿrh©Úvendor_integration_infos€rjrñz;CloudlinuxSummary._fill_system_statistics..J sø€Ð+Ð,FÔG€rirÿcó•—‰dS)Nrrhr?s€rjrñz;CloudlinuxSummary._fill_system_statistics..P sø€Ð+Ð,KÔL€rirrcó•—‰dSrprh©Ú memory_usages€rjrñz;CloudlinuxSummary._fill_system_statistics..X ó ø€�L ”O€rirÚmemory_total_mbcó•—‰dSrPrhrCs€rjrñz;CloudlinuxSummary._fill_system_statistics..[ rEriÚmemory_used_mbÚ domains_totalcóT•—‰ ¦«p‰ ¦«Srg)rrrs€rjrñz;CloudlinuxSummary._fill_system_statistics..c s$ø€˜×BÒBÑDÔDÐmÈ×HkÒHkÑHmÔHm€riÚkernel_datacycle_usage_enabledz,Can't get kernel datacycle enabled parameterÚ virt_typez!Can't get the virtualization typeÚhostnamezCan't get the hostnameÚcloudlinux_installation_sourcezCan't get installation source)rrrr r rrr(rr0rr*r'r+Úget_cgroup_versionrr ržr%r r-)rr3rDr@s`@@@rjÚ_fill_system_statisticsz)CloudlinuxSummary._fill_system_statistics sÐøøøø€Ø×+Ò+Ñ-Ô-ˆ Ý %¥g¤kÑ 2Ô 2ð Ø ŒO× &Ò &ØÔ8ØØ/Ø ð 'ñ ô ð ð ŒO× &Ò &ØÔ:ØØ3Ø ð 'ñ ô ð ð ŒO× &Ò &Ø&Ð&Ð&Ð&ØØ,Ø ð 'ñ ô ð õ"°Ð6Ñ6Ô6ð Ø ŒO× &Ò &Ý-ØØ+Ø ð 'ñ ô ð ð Œ×"Ò"¥9¨e°\ÈtÐ"ÑTÔTÐTà Œ×"Ò"Ý #Ø Ø (Øð #ñ ô ð ð Œ×"Ò" 4Ô#5°u¸mÐMmÑnÔnÐnà Œ×"Ò"Ø Ô # UÐ,?ÐAnñ ô ð ð Œ×"Ò"Ø "Ð "Ð "Ð " EÐ+;Èð #ñ ô ð ð Œ×"Ò"Ø Ô # U¨HÐ6Tñ ô ð ð#'×"<Ò"<Ñ">Ô">ÐØ Œ×"Ò"Ø GÐ GÐ GÐ GØ Ø &Øð #ñ ô ð ð Œ×"Ò"Ø LÐ LÐ LÐ LØ Ø +Øð #ñ ô ð ð×,Ò,Ñ.Ô.ˆ Ø Œ×"Ò"Ø #Ð #Ð #Ð # WÐ.?ÈTð #ñ ô ð ð Œ×"Ò"Ø #Ð #Ð #Ð # WÐ.>ÈDð #ñ ô ð ð Œ×"Ò"Ø Ô *¨E°?ÐPTð #ñ ô ð õ &¥g¤kÑ 2Ô 2ð Ø ŒO× &Ò &ØnÐnÐnÐnØØ0Ø>ñ  ô ð ð Œ×"Ò"Ý ˜5 +Ð/Rñ ô ð ð Œ×"Ò"¥7¨E°:Ð?WÑXÔXÐXà Œ×"Ò"Ø Ô ,Ø Ø ,Ø +ñ  ô ð ð ð ricóЇ—‰j ˆfd„ddd¦«‰j tddd¦«‰j tddd ¦«dS) Ncó •—‰jptSrg©r#rYrs€rjrñzKCloudlinuxSummary._fill_dict_with_rpm_packages_statistics..x óø€�D”NÐ4¥n€rirçr#úCan't get system IDÚ os_versionzCan't get version of OSÚ rpm_stat_listrCz*Can't get info about client's rpm packages)r rr#rUrs`rjrdz9CloudlinuxSummary._fill_dict_with_rpm_packages_statisticsv sø€Ø Œ×"Ò"Ø 4Ð 4Ð 4Ð 4Ø Ø Ø !ñ  ô ð ð Œ×"Ò"¥>°5¸,ÐHaÑbÔbÐbØ Œ×"Ò"Ý ! ?°JÐ@lñ ô ð ð ð riÚparamcóZ—tj|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)rrXs rjÚ_get_proc_paramz!CloudlinuxSummary._get_proc_param‚ s#€õ Ô(¨¬¯ª¸Ñ)?Ô)?Ñ@Ô@Ð@ric óH—dg}ttj¦«r| gd¢¦«|D]I}|j t |j|¦«d| dd¦«d|›�¦«ŒJ|j tddd¦«d 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_taskrªrÞr2ú Can't get ÚhidepidzCan't get hidepid valueN) rrr rõr rrr[rÁr©rÚ parametersÚps rjÚ_fill_proc_params_statisticsz.CloudlinuxSummary._fill_proc_params_statisticsŠ sÜ€ð 'ð ˆ õ &¥g¤kÑ 2Ô 2ð ð × Ò ð ð ð ñ ô ð ðð ð ˆAØ ŒO× &Ò &ݘÔ,¨aÑ0Ô0Øà— ’ ˜#˜sÑ#Ô#Ø ˜QÐ Ð ñ  ô ð ð ð Œ×"Ò"Ý *Ø Ø Ø %ñ  ô ð ð ð ric ó‚—d}|D]9}|j t|j|¦«dd|›�d|›d�¦«Œ:dS)zJ Fill dict with statistics about kmodlve parameters usage )Úlve_setuid_enterrªÚkmodlve_z Can't get "z" kmodlve parameter valueN)r rrÚ_get_kmodlve_param_valuer_s rjÚ_fill_kmodlve_params_statisticsz1CloudlinuxSummary._fill_kmodlve_params_statistics· sk€ð+ˆ Øð ð ˆAØ ŒO× &Ò &ݘÔ5°qÑ9Ô9ØØ˜1��Ø;˜qÐ;Ð;Ð;ñ  ô ð ð ð ð ricóh—|jr|j d¦«nd}g}|�; | t|¦«¦«n#tt f$rYnwxYwt |pd¬¦«}tD]5}|j  t|j |¦«d|d|›�¦«Œ6dS)u\ Fill dict with LVE Traffic Accounting metrics from /proc/lve/list (CLOS-4341). cloudlinux-summary re-execs itself inside a transient self-LVE (see _run_self_in_lve) — that LVE shows up in /proc/lve/list while we run and would inflate counts by 1. We pass our own --lve-id so the parser skips it. rêN)Ú skip_user_idsrªr]) r rrrªrSrTr@ÚNET_ACCT_METRIC_NAMESr rrÚ __getitem__)rÚ own_lve_idÚskip_idsrür¹s rjÚ_fill_net_acct_statisticsz+CloudlinuxSummary._fill_net_acct_statisticsÄ sá€ð48´:ÐG�T”Z—^’^ JÑ/Ô/Ð/À4ˆ ØˆØ Ð !ð Ø—’¥ J¡¤Ñ0Ô0Ð0Ð0øÝ�zÐ*ð ð ð Ø�ð øøøå*¸Ð9IÀTÐJÑJÔJˆÝ)ð ð ˆDØ ŒO× &Ò &ݘÔ+¨TÑ2Ô2ØØØ#˜TÐ#Ð#ñ  ô ð ð ð ð s©"A Á A ÁA cóȇ—td¬¦«Š|j ˆfd„ddd¦«|j ˆfd„ddd ¦«|j ˆfd „dd d ¦«|j ˆfd „ddd¦«|j ˆfd„ddd¦«|j tt‰¦«ddd¦«dS)zv Fill statistics fields from jwt token. - jwt token metrics (cl_plus existence and client_id) FrHcó8•—‰€dn‰ dd¦«S)NÚcl_plus©r©rËs€rjrñz=CloudlinuxSummary._fill_cln_jwt_information..å sø€˜D˜L�D�D¨d¯hªh°yÀ$Ñ.GÔ.G€rirªrqzCan't get cl_plus informationcó8•—‰€dn‰ dd¦«S)Nr™rrrss€rjrñz=CloudlinuxSummary._fill_cln_jwt_information..ë sø€˜D˜L�D�D¨d¯hªh°{ÀDÑ.IÔ.I€rir™zCan't get client_id valuecó8•—‰€dn‰ dd¦«S)NÚis_awp_premium_allowedrrrss€rjrñz=CloudlinuxSummary._fill_cln_jwt_information..ñ sø€˜D˜L�D�D¨d¯hªhÐ7OÐQUÑ.VÔ.V€riÚjwt_is_awp_premium_allowedz&Can't get is_awp_premium_allowed valuecó8•—‰€dn‰ dd¦«S)NÚis_awp_cdn_allowedrrrss€rjrñz=CloudlinuxSummary._fill_cln_jwt_information..÷ sø€˜D˜L�D�D¨d¯hªhÐ7KÈTÑ.RÔ.R€riÚjwt_is_awp_cdn_allowedz"Can't get is_awp_cdn_allowed valuecó8•—‰€dn‰ dd¦«S)NÚis_trialrrrss€rjrñz=CloudlinuxSummary._fill_cln_jwt_information..ý sø€˜D˜L�D�D¨d¯hªh°zÀ4Ñ.HÔ.H€riÚjwt_is_trial_licensez$Can't get jwt_is_trial_license valueÚlicense_activezCan't get license status valueN)rDr rrrG)rrËs @rjÚ_fill_cln_jwt_informationz+CloudlinuxSummary._fill_cln_jwt_informationÝ sDø€õ .¸uÐEÑEÔEˆØ Œ×"Ò"Ø GÐ GÐ GÐ GØ Ø Ø +ñ  ô ð ð Œ×"Ò"Ø IÐ IÐ IÐ IØ Ø Ø 'ñ  ô ð ð Œ×"Ò"Ø VÐ VÐ VÐ VØ Ø (Ø 4ñ  ô ð ð Œ×"Ò"Ø RÐ RÐ RÐ RØ Ø $Ø 0ñ  ô ð ð Œ×"Ò"Ø HÐ HÐ HÐ HØ Ø "Ø 2ñ  ô ð ð Œ×"Ò"Ý Õ0°$Ñ 7Ô 7¸Ð@PÐRrñ ô ð ð ð ric󌇗‰j ˆfd„ddd¦«‰j tddd¦«dS) za Filling stats centralized management - centralized management existence cóL•—tj ‰j¦«Srg)rªr^r_ÚCL_PLUS_CM_DISABLED_PATHrs€rjrñzKCloudlinuxSummary._fill_centralized_management_statistics..sø€•B”G—N’N 4Ô#@ÑAÔA€rirªÚcentralized_management_disabledzCan't check CM disabling statusrçÚcl_plus_sender_service_statusz)Can't check cl plus sender service statusN)r rrCrs`rjÚ'_fill_centralized_management_statisticsz9CloudlinuxSummary._fill_centralized_management_statisticssfø€ð Œ×"Ò"à AÐ AÐ AÐ AØ Ø -Ø -ñ  ô ð ð Œ×"Ò"Ý %Ø Ø +Ø 7ñ  ô ð ð ð ricó2—i} t¦«}|D]H}| ¦«D]1\}}| d|›�g¦« |¦«Œ2ŒIn9#tt f$r%}t  d|¦«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)rSr~Ú setdefaultrr¯rRrDrE)r>Ú cpu_coresÚcpu_corerÂråÚexs rjÚmake_flat_cpu_metricsz'CloudlinuxSummary.make_flat_cpu_metricssØ€ð:ˆð BÝ'Ñ)Ô)ˆIØ%ð Ið I�Ø%-§^¢^Ñ%5Ô%5ðIðI‘M�F˜EØ×%Ò% o¨V o o°rÑ:Ô:×AÒAÀ%ÑHÔHÐHÐHðIð Iøõ�Ð&ð Bð Bð BÝ × Ò Ð<¸bÑ AÔ AÐ AÐ AÐ AÐ AÐ AÐ Aøøøøð Bøøøàˆ s„AAÁBÁ/BÂBc ó—gd¢}| ¦«}|D]A}|dkrdnd}|j t|j|d¦«||d|›d�¦«ŒB|j t dd d ¦«dS) zÕ Filling stats about hardware metrics, specifically: CPU: - cache - frequency - model - id RAM: - ram - swap )Úcpu_idÚ cpu_cache_mbÚ cpu_modelÚcpu_frequency_mhzr�Úint_listrNz Can't parse z metric for all coresr�ÚmemoryzCan't parse memory metrics)rŒr rrrrT)rÚ exp_metricsÚ cpu_metricsrÂÚ metric_types rjÚ_fill_hardware_statisticsz+CloudlinuxSummary._fill_hardware_statisticsCs¹€ðSÐRÐRˆ Ø×0Ò0Ñ2Ô2ˆ Ø!ð ð ˆFà(.°+Ò(=Ð(=˜*˜*À:ˆKØ ŒO× &Ò &ݘ œ¨°Ñ6Ô6ØØØ<˜vÐ<Ð<Ð<ñ  ô ð ð ð Œ×"Ò"Ý Ø Ø Ø (ñ  ô ð ð ð ricó´—| ¦«\|jd<|jd<|jd<tj d¦«|jd<dS)am Collect CageFS enter errors number: 1. "Act like CageFS is disabled (unable to create LVE).. %d" 2. "Act like CageFS is disabled (unable to enter into NameSpace).. %d" 3. "Act like CageFS is disabled (unable to acquire lock for user %s uid %d)" 4. File-marker /etc/cagefs/fail.on.error presense :return None Ú(act_cagefs_disabled_unable_to_create_lveÚ&act_cagefs_disabled_unable_to_enter_nsÚ)act_cagefs_disabled_unable_to_acqure_lockz/etc/cagefs/fail.on.errorÚ"act_cagefs_disabled_marker_presentN)Ú*_scan_log_for_act_cagefs_disabled_messagesr rªr^rrs rjÚ$_fill_act_cagefs_disabled_statisticsz6CloudlinuxSummary._fill_act_cagefs_disabled_statisticscs[€ð × ;Ò ;Ñ =Ô =ñ  Ø ŒOÐFÑ GØ ŒOÐDÑ EØ ŒOÐGÑ Hå@BÄÇÂÐOjÑ@kÔ@kˆŒÐ<Ñ=Ð=Ð=ricóÊ— | ¦«\}}|dkr£| d¦«}ttddd|¬¦«¦«}t |¦«}ttddd|¬¦«¦«}t |¦«}ttddd|¬¦«¦«}t |¦«}nd}d}d}|||fS#t t f$rYdSwxYw) a² Scan /var/log/messages for all needed "Act like CageFS is disabled ..." messages for yesterday :return tuple of ints: Number of "Act like CageFS is disabled (unable to create LVE).. " messages, Number of "Act like CageFS is disabled (unable to enter into NameSpace).. " messages, Number of "Act like CageFS is disabled (unable to acquire lock for user %s uid %d)" messages rröz2Act like CageFS is disabled (unable to create LVE)T)Ú fixed_stringÚmultiple_searchÚdata_from_filezÔ)>Ð&Ý#'ÝØVØ%)Ø(,Ø'1ð ñôñ$ô$Ð õ-0Ð0@Ñ,AÔ,AÐ)Ð)ð,-Ð(Ø)*Ð&Ø,-Ð)Ø+Ð-CÐE^Ð^Ð ^øÝ�Ð!ð !ð !ð !Ø �=�=ð !øøøs‚C C à C"Ã!C"c óD—t¦«}|dvrPtj ¦«tjd¬¦«z }| d¦«}d|›d�}nd}t j|ddd t jt j d ¬ ¦«}|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) )Úcl6Úcl6hrV)Údaysz%Y-%m-%dz/usr/share/cloudlinux/logs-at z< /var/log/messages | /bin/grep 'Act like CageFS is disabled'za/usr/bin/journalctl --since yesterday --until today | /usr/bin/grep 'Act like CageFS is disabled'TrÔF)rVrÕrÖr–Ústderrr×) r#ÚdatetimeÚdateÚtodayÚ timedeltaÚstrftimerárâÚPIPEÚDEVNULLr¤r–)Úos_typeÚyesterday_dateÚ date_to_scanÚs_cmdras rjr£z$CloudlinuxSummary._get_data_from_log¥s¿€õ !Ñ"Ô"ˆØ �oÐ %Ð %õ&œ]×0Ò0Ñ2Ô2µXÔ5GÈQÐ5OÑ5OÔ5OÑOˆNØ)×2Ò2°:Ñ>Ô>ˆLðN°ðNðNðNð ˆEðxˆEå ŒNØ ØØØ"Ý”?ÝÔ%Øð ñ ô ˆðŒ|˜QœXÐ%Ð%ricóà‡—ttj¦«r"‰j ‰jddd¦«t ‰jd<‰j ttj d¬¦«ddd ¦«‰j ‰j dd d ¦«‰j ‰j dd d ¦«‰j ‰j ddd¦«‰j ˆfd„ddd¦«‰j ˆfd„ddd¦«t�!t�t›dt›�‰jd<n d‰jd<‰ ¦«dS)NrªÚold_way_of_integration_usedú*Can't detect old LVE integration mechanismÚlve_utils_versionF)Ú verify_exprçÚ cl_editionzCan't get CloudLinux editionÚis_solo_meta_file_presentz$Can't detect solo meta file presenceÚis_admin_meta_file_presentz%Can't detect admin meta file presenceÚis_container_meta_file_presentz)Can't detect container meta file presencecó•—‰jSrg©r;rs€rjrñzACloudlinuxSummary._prepare_cl_normal_statistics..àó ø€�DÔ'€rir;ú$Can't get or generate security tokencó •—‰jptSrgrSrs€rjrñzACloudlinuxSummary._prepare_cl_normal_statistics..ærTrir#rUr:Úlvemanager_version)rrr r rr{ÚLVE_UTILS_PKG_VERSIONrrÚget_cl_editionÚ_is_solo_marker_existsÚ_is_admin_marker_existsÚ_is_container_marker_existsÚLVEMANAGER_PKG_VERSIONÚLVEMANAGER_PKG_RELEASEÚ_fill_dict_with_statisticsrs`rjraz/CloudlinuxSummary._prepare_cl_normal_statisticsÆsµø€Ý %¥g¤kÑ 2Ô 2ð Ø ŒO× &Ò &ØÔ0ØØ-Ø<ñ  ô ð õ 0EˆŒÐ+Ñ,Ø Œ×"Ò"Ý •JÔ-¸%Ð @Ñ @Ô @À%ÈÐWuñ ô ð ð Œ×"Ò"Ø Ô '¨Ð0KÐMsñ ô ð ð Œ×"Ò"Ø Ô (¨%Ð1MÐOvñ ô ð ð Œ×"Ò"Ø Ô ,Ø Ø ,Ø 7ñ  ô ð ð Œ×"Ò"à 'Ð 'Ð 'Ð 'Ø Ø Ø 2ñ  ô ð ð Œ×"Ò"Ø 4Ð 4Ð 4Ð 4Ø Ø Ø !ñ  ô ð õ "Ð -Õ2HÐ2TÝ7MÐ4hÐ4hÕPfÐ4hÐ4hˆDŒOÐ0Ñ 1Ð 1à48ˆDŒOÐ0Ñ 1Ø ×'Ò'Ñ)Ô)Ð)Ð)Ð)ric󞇇‡ ‡ ‡ ‡ —dŠ dŠdŠ dŠ dŠ d}tj ‰ ¦«sdSGd„d t¦«Šˆˆˆ ˆ ˆ ˆ fd „}‰ d ‰ d ‰ d i}d „tj‰ ¦«D¦«}| ¦«|D]/} |||¦«Œ#‰$rYŒt $r |D]}d ||<ŒYŒ,wxYw|‰ |j‰ <|‰ |j‰ <|‰ |j‰ <tj d¦«r d|j|<dStj d¦«r 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/i€QÚlve_number_of_opensÚxray_number_of_installationÚxray_number_of_visitsÚxray_advanced_metrics_statusNcó—eZdZdS)úECloudlinuxSummary._fill_lvemanager_statistics..BreakOuterLoopN)rÚ __module__Ú __qualname__rhrirjÚBreakOuterLoopr×s€€€€€Ø ˆDrirÚcó•—tj ¦« ¦«}‰ |z}t|dd¬¦«5}d}|D�]} d | d¦«dd…¦«}tj |d¦« ¦«}|‰ z |cxkr|krŠnn‡d | ¦« d¦«dd…¦«} | dkr|‰ xxd z cc<n0| d kr|‰xxd z cc<n| d kr|‰xxd z cc<nd }�Œ#ttf$rY�ŒwxYw|r‰ ‚ ddd¦«dS#1swxYwYdS) NrorÀrfFrr°z%Y-%m-%d %H:%M:%S,%fzlvemanager-openedrVzxray-install-startedzxray-tab-clickedT) r¯ÚnowrÃr«r9rÚstrptimerprTÚAttributeError)ÚstatsÚfileÚcurrent_date_timestampÚ file_pathrÍÚbreak_outer_loopÚlineÚlog_timeÚlog_date_timestamprYrÚÚCOLLECTING_PERIODÚ LOG_FOLDERÚLVE_NUMBER_OF_OPENSÚXRAY_NUMBER_OF_INSTALLSÚXRAY_NUMBER_OF_VISITSs €€€€€€rjÚfill_statisticszFCloudlinuxSummary._fill_lvemanager_statistics..fill_statisticss#ø€Ý%-Ô%6×%:Ò%:Ñ%<Ô%<×%FÒ%FÑ%HÔ%HÐ "Ø" TÑ)ˆIÝ�i ¨wÐ7Ñ7Ô7ð )¸1Ø#(Ð Øð!ñ!�Dð!Ø#&§8¢8¨D¯JªJ°s©O¬O¸B¸Q¸BÔ,?Ñ#@Ô#@˜Ý-5Ô->×-GÒ-GÈÐRhÑ-iÔ-i×-sÒ-sÑ-uÔ-uÐ*Ø1Ð4EÑEÐHZÐsÐsÒsÐsÐ]sÒsÐsÐsÐsÐsØ&)§h¢h¨t¯zªz©|¬|×/AÒ/AÀ#Ñ/FÔ/FÀqÀrÀrÔ/JÑ&KÔ&K˜GØ&Ð*=Ò=Ð=Ø %Ð&9Ð :Ð :Ô :¸aÑ ?Ð :Ð :Ñ :Ð :Ø!(Ð,BÒ!BÐ!BØ %Ð&=Ð >Ð >Ô >À!Ñ CÐ >Ð >Ñ >Ð >Ø!(Ð,>Ò!>Ð!>Ø %Ð&;Ð <Ð <Ô <ÀÑ AÐ <Ð <Ñ <øà/3Ð,ùøÝ&­Ð7ð!ð!ð!Ø ™ð!øøøà#ð)Ø(Ð(ð)ð% )ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð )ð )s7Á E<ÁC>EÅE<ÅE'Å#E<Å&E'Å'E<Å<FÆFrcó<—g|]}tjd|¦«¯|‘ŒS)z^lvemanager\.log(\.\d{1,2})?$)ÚreÚmatch)r1r¹s rjr|zACloudlinuxSummary._fill_lvemanager_statistics..#s+€ÐqÐqÐq˜dÅÄÐIiÐkoÑ@pÔ@pÐq�TÐqÐqÐqrir¿z./opt/alt/php-xray/php/advanced_metrics.enabledrvz//opt/alt/php-xray/php/advanced_metrics.disabledrwÚnone) rªr^Úisdirr¤ÚlistdirÚsortr¯r r) rÚXRAY_ADVANCED_METRICS_STATUSrìr Ú log_filesÚlog_fileÚstat_keyrÚrçrèrérêrës @@@@@@rjÚ_fill_lvemanager_statisticsz-CloudlinuxSummary._fill_lvemanager_statisticsñsøøøøøø€ð,ˆ Ø%ÐØ3ÐØ"?ÐØ 7ÐØ'EÐ$ÝŒw�}Š}˜ZÑ(Ô(ð Ø ˆFð ð ð ð ð �Yñ ô ð ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð0*¨1Ð.CÀQÐH_ÐabÐcˆ ð rÐq¥b¤j°Ñ&<Ô&<ÐqÑqÔqˆ Ø�ŠÑÔÐØ!ð .ð .ˆHð .Ø�  ¨HÑ5Ô5Ð5Ð5øØ!ð ð ð Ø�Ýð .ð .ð .Ø *ð.ð.�HØ+-�J˜xÑ(Ð(ð.ð.ð .øøøð2<ÐUÔ3VˆŒÐ/Ñ0Ø/9Ð:MÔ/NˆŒÐ+Ñ,å Œ7�>Š>ÐJÑ KÔ Kð CØÐ?RÔ0SˆŒÐ,Ñ-Ð-Ð-ricó~—|j d„ddd¦«|j d„ddd¦«dS) z: Fill dict with feature flags information có2—d„t¦«D¦«S)Ncó—g|] }|j‘Œ SrhrQ©r1rÍs rjr|zVCloudlinuxSummary._fill_feature_flags_statistics....Us€Ð7Ð7Ð7 �Q”VÐ7Ð7Ð7rirdrhrirjrñzBCloudlinuxSummary._fill_feature_flags_statistics..Us€Ð7Ð7¥_Ñ%6Ô%6Ð7Ñ7Ô7€rirÚserver_flags_availablez3Can't get information about available feature flagscó2—d„t¦«D¦«S)Ncó*—g|]}|j¯ |j‘ŒSrh)rvr¹rs rjr|zVCloudlinuxSummary._fill_feature_flags_statistics....[s!€ÐDÐDÐD ¸!¼)ÐD�Q”VÐDÐDÐDrirdrhrirjrñzBCloudlinuxSummary._fill_feature_flags_statistics..[s€ÐDÐD¥_Ñ%6Ô%6ÐDÑDÔD€riÚserver_flags_enabledz1Can't get information about enabled feature flagsN)r rrs rjÚ_fill_feature_flags_statisticsz0CloudlinuxSummary._fill_feature_flags_statisticsPsb€ð Œ×"Ò"Ø 7Ð 7Ø Ø $Ø Añ  ô ð ð Œ×"Ò"Ø DÐ DØ Ø "Ø ?ñ  ô ð ð ð ricó—d}d}d}d}d}d}d}d}tj |¦«r|}tj |¦«r|}tj |¦«r|}||j|<dS) z8 Fill out AccelerateWP promotion status Úaccelerate_wp_promotion_statusÚenabled_for_current_serverÚenabled_for_all_serversrÛz,/var/lve/clflags/enable_awp_all_servers.flagz,/var/lve/clflags/enable_awp_this_server.flagz$/var/lve/clflags/skip_awp_setup.flagN)rªr^r_r ) rÚFIELDÚENABLED_FOR_CURRENT_SERVERÚENABLED_FOR_ALL_SERVERSÚSKIPPEDÚenable_awp_all_servers_flagÚenable_awp_this_server_flagÚskip_awp_setuprÆs rjÚ(_fill_accelerate_wp_promotion_statisticsz:CloudlinuxSummary._fill_accelerate_wp_promotion_statisticsas�€ð 1ˆð&BÐ"Ø";ÐØˆð'UÐ#Ø&TÐ#Ø?ˆðˆå Œ7�>Š>Ð5Ñ 6Ô 6ð -Ø,ˆFÝ Œ7�>Š>Ð5Ñ 6Ô 6ð 0Ø/ˆFÝ Œ7�>Š>˜.Ñ )Ô )ð ØˆFØ!'ˆŒ˜ÑÐÐricóv‡—‰j ˆfd„ddd¦«‰j ˆfd„ddd¦«t‰jd<t�!t�t›d t›�‰jd <n d‰jd <‰j ‰jd d d ¦«‰ ¦«dS)Ncó•—‰jSrgrÄrs€rjrñz7CloudlinuxSummary._prepare_statistics..€rÅrirçr;rÆcó •—‰jptSrgrSrs€rjrñz7CloudlinuxSummary._prepare_statistics..†rTrir#rUr½r:rÈrªr»r¼)r rrÉrÎrÏr{rÐrs`rjÚ_prepare_statisticsz%CloudlinuxSummary._prepare_statistics}sîø€Ø Œ×"Ò"à 'Ð 'Ð 'Ð 'Ø Ø Ø 2ñ  ô ð ð Œ×"Ò"Ø 4Ð 4Ð 4Ð 4Ø Ø Ø !ñ  ô ð õ 0EˆŒÐ+Ñ,Ý !Ð -Õ2HÐ2TÝ7MÐ4hÐ4hÕPfÐ4hÐ4hˆDŒOÐ0Ñ 1Ð 1à48ˆDŒOÐ0Ñ 1Ø Œ×"Ò"Ø Ô ,Ø Ø )Ø 8ñ  ô ð ð ×'Ò'Ñ)Ô)Ð)Ð)Ð)ricó’—ttj¦«}ttj¦«r| ¦«ttj¦«r<| ¦«| ¦«| ¦«ttj ¦«r|  ¦«ttj ¦«rP|  ¦«|  ¦«| ¦«| ¦«ttj¦«r| ¦«|r| ¦«nd\}}ttj¦«sttj¦«s|r| |¦«|r| |¦«n| t0¦«t3d¬¦«s| ¦«ttj¦«r| ¦«ttj¦«r| ¦«| ¦«|  ¦«| !¦«| "¦«| #¦«| $¦«| %¦«| &¦«| '¦«| (¦«| )¦«| *¦«| +¦«| ,¦«| -¦«| .¦«| /¦«dS)NrÖTr5)0rrÚNODEJS_SELECTORÚGOVERNORrvÚCAGEFSr÷r¿ržÚRESELLER_LIMITSrr rqrÈrgrnÚ PHP_SELECTORr‰rÛÚ RUBY_SELECTORÚPYTHON_SELECTORrÔrçràÚ UNSUPPORTEDrr…ÚLSAPIr–ÚWIZARDrøÚ _fill_wpos_activation_statisticsÚ_fill_wpos_statisticsrrŒr�rPrbr—r›rnrørÂrrr rÚ_fill_apache2nginx_statistics)rÚnodejs_selector_supportedr½Úshared_node_moduless rjrÐz,CloudlinuxSummary._fill_dict_with_statistics˜sz€Ý$>Ý Ô #ñ% ô% Ð!õ &¥gÔ&6Ñ 7Ô 7ð 3Ø × 0Ò 0Ñ 2Ô 2Ð 2Ý %¥g¤nÑ 5Ô 5ð 8Ø × (Ò (Ñ *Ô *Ð *Ø × 3Ò 3Ñ 5Ô 5Ð 5Ø × 5Ò 5Ñ 7Ô 7Ð 7Ý %¥gÔ&=Ñ >Ô >ð .Ø × +Ò +Ñ -Ô -Ð -Ý %¥g¤kÑ 2Ô 2ð -Ø × (Ò (Ñ *Ô *Ð *Ø × ,Ò ,Ñ .Ô .Ð .Ø × 0Ò 0Ñ 2Ô 2Ð 2Ø × *Ò *Ñ ,Ô ,Ð ,Ý %¥gÔ&:Ñ ;Ô ;ð 1Ø × .Ò .Ñ 0Ô 0Ð 0ð)ð ˆD× >Ò >Ñ @Ô @Ð @àñ 1ÐÐ0õ '¥wÔ'<Ñ =Ô =ð Aå)­'Ô*AÑBÔBð Að)ð Að × +Ò +Ð,?Ñ @Ô @Ð @Ø $ð OØ × 5Ò 5Ð6IÑ JÔ JÐ JÐ Jà × AÒ AÅ+Ñ NÔ NÐ Nå!°Ð6Ñ6Ô6ð ;Ø × 8Ò 8Ñ :Ô :Ð :å %¥g¤mÑ 4Ô 4ð *Ø × 'Ò 'Ñ )Ô )Ð )Ý %¥g¤nÑ 5Ô 5ð +Ø × (Ò (Ñ *Ô *Ð *à ×-Ò-Ñ/Ô/Ð/Ø ×"Ò"Ñ$Ô$Ð$Ø ×&Ò&Ñ(Ô(Ð(Ø ×+Ò+Ñ-Ô-Ð-Ø ×)Ò)Ñ+Ô+Ð+Ø ×$Ò$Ñ&Ô&Ð&Ø ×)Ò)Ñ+Ô+Ð+Ø ×&Ò&Ñ(Ô(Ð(Ø ×*Ò*Ñ,Ô,Ð,Ø ×!Ò!Ñ#Ô#Ð#Ø ×(Ò(Ñ*Ô*Ð*Ø × Ò Ñ"Ô"Ð"Ø ×)Ò)Ñ+Ô+Ð+Ø ×#Ò#Ñ%Ô%Ð%Ø ×+Ò+Ñ-Ô-Ð-Ø ×5Ò5Ñ7Ô7Ð7Ø ×*Ò*Ñ,Ô,Ð,Ð,Ð,ricóJ—|j |jddd¦«dS)Nr�Ú apache2nginxz Can't parse Apache2Nginx metrics)r rÚget_apache2nginx_statsrs rjr)z/CloudlinuxSummary._fill_apache2nginx_statisticsÕs5€Ø Œ×"Ò"Ø Ô 'Ø Ø Ø .ñ  ô ð ð ð ricóÒ‡—|j d„ddd¦«|j td¦«\}Š|j ˆfd„dd|rdnd¦«dS) NcóJ—tj t¦«Srg)rªr^rr rhrirjrñzDCloudlinuxSummary._fill_wpos_activation_statistics..ás€•B”G—N’NÕ#BÑCÔC€rirªÚ.cmt_is_accelerate_wp_free_activation_completedz2Can't get statistic of AccelerateWP CMT activationz,Can't get AccelerateWP activation statisticscó.•—‰ d¦«S)NÚaccelerate_wp_free_activaterr)Úclient_activations€rjrñzDCloudlinuxSummary._fill_wpos_activation_statistics..îsø€Ð%×)Ò)Ð*GÑHÔH€riÚ&cmt_accelerate_wp_free_activated_in_uiz;Can't get statistic of AccelerateWP CMT activation selected)r rrrr)rrÁr4s @rjr'z2CloudlinuxSummary._fill_wpos_activation_statisticsÝsšø€ð Œ×"Ò"Ø CÐ CØ Ø <Ø @ñ  ô ð ð&*¤_×%BÒ%BÝ "Ø :ñ& ô& Ñ"ˆÐ"ð Œ×"Ò"Ø HÐ HÐ HÐ HØ Ø 4ØMTÐ ^Ð IÐ IÐZ^ñ  ô ð ð ð ricóD ‡‡ ‡ ‡ ‡ —|j |jd¦«\}Š |sdSt‰ t¦«�rW‰  d¦«dk�r?‰  d¦«� |j ˆ fd„ddd¦«‰  d ¦«� |j ˆ fd „dd d¦«|j ˆ fd „d dd¦«|j ˆ fd„d dd¦«‰  d¦«r |j ˆ fd„d dd¦«‰ dD]-Š ‰ dkrŒ |j ˆ ˆ fd„d d‰ zd¦«Œ.‰  dg¦«D]&Š |j ˆ ˆ fd„d d‰ zd¦«Œ'‰ dD]-Š ‰ dkrŒ |j ˆ ˆ fd„d d‰ zd¦«Œ.‰  dg¦«D]&Š |j ˆ ˆ fd„d d ‰ zd¦«Œ'‰  d!g¦«D]¤Š |j ˆ ˆ fd"„d d#‰ zd¦«‰ ›d$�}‰ ›d%�}‰  |¦«xŠr#|j ˆfd&„d d#|zd¦«‰  |¦«xŠ r#|j ˆ fd'„d d#|zd¦«Œ¥‰  dg¦«D]-Š ‰ dkrŒ |j ˆ ˆ fd(„d d)‰ zd¦«Œ.‰  d*i¦« ¦«D]\Š }||jd+‰ z<Œ|j ˆ fd,„d d-d¦«|j ˆ fd.„d d/d¦«|j ˆ fd0„d d1d2¦«|j ˆ fd3„d d4d5¦«|j ˆ fd6„d7d8d9¦«|j ˆ fd:„d7d;d<¦«|j ˆ fd=„d7d>d?¦«|j ˆ fd@„d7dAdB¦«‰  dC¦«x}r+| ¦«D]\}}||jdD|›�<ŒdSdSdSdS)ENz!Can't get AccelerateWP statisticsr>rÁÚfeatures_visible_by_defaultcó•—‰dS)Nr7rh©Ú wpos_statss€rjrñz9CloudlinuxSummary._fill_wpos_statistics..ó ø€˜JÐ'DÔE€rirÚ wpos_features_visible_by_defaultz*Can't get statistic of using AccelerateWP.Úfeatures_allowed_by_defaultcó•—‰dS)Nr=rhr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..r;riÚ wpos_features_allowed_by_defaultcó •—‰ddS)NÚ enabled_sitesrrhr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics.. óø€˜  ?Ô3°GÔ<€rirªÚsites_count_with_enabled_wposcó •—‰ddS)NÚ allowed_usersrrhr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..rBriÚusers_count_with_allowed_wposÚ visible_userscó •—‰ddS)NrGrrhr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..sø€˜J Ô7¸Ô@€riÚusers_count_with_visible_wposrArcó •—‰d‰S)NrArh©rðr:s€€rjrñz9CloudlinuxSummary._fill_wpos_statistics..$óø€˜J Ô7¸Ô?€riÚsites_count_with_enabled_Ú enabled_userscó •—‰d‰S)NrNrhrKs€€rjrñz9CloudlinuxSummary._fill_wpos_statistics..+rLriÚusers_count_with_enabled_rEcó •—‰d‰S)NrErhrKs€€rjrñz9CloudlinuxSummary._fill_wpos_statistics..4rLriÚusers_count_with_allowed_Úallowed_suitescó •—‰d‰S)NrSrh©Úsuiter:s€€rjrñz9CloudlinuxSummary._fill_wpos_statistics..;óø€˜JÐ'7Ô8¸Ô?€riÚusers_count_with_allowed_suite_Úenabled_suitescó •—‰d‰S)NrYrhrUs€€rjrñz9CloudlinuxSummary._fill_wpos_statistics..BrWriÚusers_count_with_enabled_suite_Ú _billableÚ _non_billablecó•—‰Srgrh)Úenabled_billables€rjrñz9CloudlinuxSummary._fill_wpos_statistics..Msø€Ð 0€ricó•—‰Srgrh)Úenabled_non_billables€rjrñz9CloudlinuxSummary._fill_wpos_statistics..Usø€Ð 4€ricó •—‰d‰S)NrGrhrKs€€rjrñz9CloudlinuxSummary._fill_wpos_statistics.._rLriÚusers_count_with_visible_Ú upgrade_urlsÚ upgrade_url_có•—‰dS)NÚ4accelerate_wp_suite_enabled_premium_suite_disallowedrhr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..js ø€˜ Ð#YÔZ€rirgcó•—‰dS)NÚ1accelerate_wp_suite_enabled_premium_suite_visiblerhr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..ps ø€˜ Ð#VÔW€riricó.•—‰ d¦«S)NÚis_accelerate_wp_flag_enabledrrr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..wóø€˜ ŸšÐ'FÑGÔG€rirkz1Can't get statistic of AccelerateWP feature flag.có.•—‰ d¦«S)NÚis_accelerate_wp_icon_enabledrrr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..}rlrirnz0Can't get statistic of AccelerateWP icon status.có.•—‰ d¦«S)NÚ%is_smart_advice_notifications_enabledrrr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..„sø€˜ ŸšÐ'NÑOÔO€rirçrpzJCan't get statistic of AccelerateWP is_smart_advice_notifications_enabled.có.•—‰ d¦«S)NÚ!is_smart_advice_reminders_enabledrrr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..Šsø€˜ ŸšÐ'JÑKÔK€rirrzFCan't get statistic of AccelerateWP is_smart_advice_reminders_enabled.có.•—‰ d¦«S)NÚ+is_smart_advice_plugin_installation_enabledrrr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..�sø€˜ ŸšÐ'TÑUÔU€rirtzPCan't get statistic of AccelerateWP is_smart_advice_plugin_installation_enabled.có.•—‰ d¦«S)NÚis_object_cache_banners_enabledrrr9s€rjrñz9CloudlinuxSummary._fill_wpos_statistics..–sø€˜ ŸšÐ'HÑIÔI€rirvzDCan't get statistic of AccelerateWP is_object_cache_banners_enabled.r’Ú awp_whmcs_) r rrÚget_wpos_statsrOrPrrÚ format_metricr~) rrÁÚbillable_suite_metricÚnon_billable_suite_metricÚ upgrade_urlÚ whmcs_statsrýrår_rarðrVr:s @@@@@rjr(z'CloudlinuxSummary._fill_wpos_statisticsõsÛøøøøø€Ø"œo×;Ò;Ø Ô Ø /ñ ô ш�ðð Ø ˆFå �j¥$Ñ 'Ô 'ña @¨J¯NªN¸8Ñ,DÔ,DÈ Ò,QÑ,QØ�~Š~Ð;Ñ<Ô<ÐHØ”×*Ò*ØEÐEÐEÐEØØ6Ø@ñ ôðð �~Š~Ð;Ñ<Ô<ÐHØ”×*Ò*ØEÐEÐEÐEØØ6Ø@ñ ôðð ŒO× &Ò &Ø<Ð<Ð<Ð<ØØ/Ø<ñ  ô ð ð ŒO× &Ò &Ø<Ð<Ð<Ð<ØØ/Ø<ñ  ô ð ð �~Š~˜oÑ.Ô.ð Ø”×*Ò*Ø@Ð@Ð@Ð@ØØ3Ø@ñ ôðð% _Ô5ð ð �ؘWÒ$Ð$ØØ”×*Ò*Ø?Ð?Ð?Ð?Ð?ØØ/°&Ñ8Ø@ñ ôððð %Ÿ.š.¨¸"Ñ=Ô=ð ð �Ø”×*Ò*Ø?Ð?Ð?Ð?Ð?ØØ/°&Ñ8Ø@ñ ôððð % _Ô5ð ð �ؘWÒ$Ð$ØØ”×*Ò*Ø?Ð?Ð?Ð?Ð?ØØ/°&Ñ8Ø@ñ ôððð $ŸšÐ(8¸"Ñ=Ô=ð ð �Ø”×*Ò*Ø?Ð?Ð?Ð?Ð?ØØ5¸Ñ=Ø@ñ ôððð $ŸšÐ(8¸"Ñ=Ô=ð ð �Ø”×*Ò*Ø?Ð?Ð?Ð?Ð?ØØ5¸Ñ=Ø@ñ ôðð,1Ð(;Ð(;Ð(;Ð%Ø/4Ð,CÐ,CÐ,CÐ)à'1§~¢~Ð6KÑ'LÔ'LÐLÐ#ðØ”O×1Ò1Ø0Ð0Ð0Ð0ØØ9Ъ>Ð:SÑ+TÔ+TÐTÐ'ðØ”O×1Ò1Ø4Ð4Ð4Ð4ØØ9М>Ð)Ð)s�$AÁB Á(BÂB có6—| ¦«dS)z› a wrapper method for the get_users_and_resellers_with_faults method. return the number of users with faults in the past 24 hours. r©r‚rs rjrLz(CloudlinuxSummary._get_users_with_faultsÆó€ð ×7Ò7Ñ9Ô9¸!Ô<ÐŒ>ð $Ø#Ð#Ø ˜3Ð Ð Ð ricó—|€dSd|zdzS)z/Convert memory limit from mempages to megabytesNr?irh)rås rjr<z!CloudlinuxSummary._mempages_to_mbås€ð ˆ=Ø�4Ø�5‰y˜DÑ Ð ricóh—|€dStj||pd¬¦«}|€dSt|dz d¦«S)z,Convert cpu and ncpu to percents of one coreNr)ÚlncpugY@rV)rñÚconvert_to_kernel_formatÚround)r:r&r‰s rjr9z(CloudlinuxSummary._cpu_limit_to_percentsìsE€ð ˆ;Ø�4ÝÔ2°3¸d¸iÀaÐHÑHÔHˆØ ˆ=Ø�4Ý�U˜U‘] AÑ&Ô&Ð&ri.cóÆ—|j€Ôtt|j ¦«¦«¦«}d„|D¦«}t d„|D¦«¦«}t d„| ¦«D¦«d¬¦«|_d„|j ¦«D¦«}|r%t  dd „|D¦«¦«|jS) zC Return list of tuples [users_in_package, package] Ncó^—g|]*}|j® t|jjt¦«¯(|‘Œ+Srg©ÚpackagerOr¹rç©r1rós rjr|z?CloudlinuxSummary.get_users_amount_per_plan..ÿs>€ðððØØ”<Ð+µ ¸4¼<Ô;LÍcÑ0RÔ0RÐ+ðØ+Ð+Ð+ric3ó$K—|] }|jV—Œ dSrg)r˜r™s rjr4z>CloudlinuxSummary.get_users_amount_per_plan..s$èè€Ð$JÐ$J°d T¤\Ð$JÐ$JÐ$JÐ$JÐ$JÐ$Jricó$—g|] }|ddd…‘ŒS)Nr¿rh)r1Úitems rjr|z?CloudlinuxSummary.get_users_amount_per_plan..s"€Ð*YÐ*YÐ*Y¸$¨4°°°"°¬:Ð*YÐ*YÐ*YriT)Úreversecó^—g|]*}|j�t|jjt¦«°(|‘Œ+Srgr—r™s rjr|z?CloudlinuxSummary.get_users_amount_per_plan.. s>€ðððØØ”<Ð'­z¸$¼,Ô:KÍSÑ/QÔ/QÐ'ðØ'Ð'Ð'riz0Found invalid package names in original data: %scó*—g|]}|j|jf‘ŒSrh)Úidr˜r™s rjr|z?CloudlinuxSummary.get_users_amount_per_plan..s!€ÐGÐGÐG°�d”g˜tœ|Ð,ÐGÐGÐGri) rrrr±rõrÚsortedr~rDrE)rr Úusers_package_copyÚ valid_usersÚpackage_countsÚ invalid_userss rjÚget_users_amount_per_planz+CloudlinuxSummary.get_users_amount_per_planös€ð Ô Ð 'å!)­$Ð/?Ô/E×/LÒ/LÑ/NÔ/NÑ*OÔ*OÑ!PÔ!PÐ ððØ!3ðñôˆKõ %Ð$JÐ$J¸kÐ$JÑ$JÔ$JÑJÔJˆNå#)Ð*YÐ*YÀ.×BVÒBVÑBXÔBXÐ*YÑ*YÔ*YÐcgÐ#hÑ#hÔ#hˆDÔ ððØ!1Ô!7×!>Ò!>Ñ!@Ô!@ðñôˆMðð Ý× Ò ØFØGÐG¸ÐGÑGÔGñôððÔ#Ð#riÚ number_of_topcób— | |¦«|dz S#t$rYdSwxYwrP)r¦Ú IndexError)rr§r s rjrnz5CloudlinuxSummary._get_top_package_by_number_of_userssI€ð Ø×1Ò1Ð2BÑCÔCÀMÐTUÑDUÔVÐ VøÝð ð ð Ø�4�4ð øøøs ‚   .­.cór—t|¦«\}}|s"| t|¦«¦«|S)z% Parse CLI arguments )rWrFr2)rrrÆrËs rjr zCloudlinuxSummary._parse_argss>€õ5°TÑ:Ô:‰ ˆ�Øð 7à × Ò ¥°Ñ!5Ô!5Ñ 6Ô 6Ð 6؈ rirÁrr>rËÚ exit_coderMcóŠ—|tj¦«|dœ}|�||d<t|d¦«tj|¦«dS)z? Print data in default format for web and exit )r>rÃrËNÚstatistic_enabledT)rºr1rÙrÚ)r>rËr«rMrYs rjrÛz(CloudlinuxSummary._print_result_and_exit(sP€ð$µ$´)±+´+ÀtÐLÐLˆØ Ð +Ø+?ˆGÐ'Ñ (ݘ $Ñ'Ô'Ð'Ý Œ�ÑÔÐÐÐrirVrYrÍcóž—| dtj¦«i¦«t|d¦«tj|¦«dS)zŠ Print error and exit :param dict message: Dictionary with keys "result" as string and optional "context" as dict rÃTN)rQrºr1rÙrÚ)rYrÍs rjrFz!CloudlinuxSummary._error_and_exit7sG€ð �Š˜ ¥T¤Y¡[¤[Ð1Ñ2Ô2Ð2ݘ $Ñ'Ô'Ð'Ý Œ�ÑÔÐÐÐricóÔ—tj d¦«rHtjddgdtjtjd¬¦«}t j|j¦«SdS)zD Return mod_lsapi info from switch_mod_lsapi script r}z--statTF©rVr–r®r×N) rªr^r_rárâr´rNr7r–©ras rjr•z$CloudlinuxSummary.get_raw_lsapi_infoAsg€õ Œ7�>Š>Ð5Ñ 6Ô 6ð (Ý”Ø,¨hÐ7ØÝ!”Ý!”Øð ñôˆAõ”:˜aœhÑ'Ô'Ð 'ð (ð (ricód—d}t¦«r|dz }tj |¦«r{t j|dgdtjtjd¬¦«}tj|j ¦«  d¦«}d„|  ¦«D¦«}|Sd S) 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-getTFr°r;có4—i|]\}}|t|¦«“ŒSrh)rç)r1Úkr}s rjr~z9CloudlinuxSummary._get_wmt_api_config..as$€Ð%[Ð%[Ð%[±D°A°q a­¨Q©¬Ð%[Ð%[Ð%[riN) rrªr^r_rárâr´rNr7r–rr~)r—raÚwmt_api_config_summarys rjršz%CloudlinuxSummary._get_wmt_api_configPs¸€ð Bˆå Ñ Ô ð Ø �wÑ ˆGå Œ7�>Š>˜'Ñ "Ô "ð *ݔؘ.Ð)°½Z¼_ÕU_ÔUdÐlqðñôˆAõ&*¤Z°´Ñ%9Ô%9×%=Ò%=¸hÑ%GÔ%GÐ "à%[Ð%[ÐÔ>Ð>ricó@—tj d¦«S)Nz/etc/cloudlinux-containerr·rhrirjrÍz-CloudlinuxSummary._is_container_marker_existsms€åŒw�~Š~Ð9Ñ:Ô:Ð:ricóª—tj d¦«r3tjddgddd¬¦«}t j|j¦«SdS)zL Return statistics from cloudlinux-ssa-manager get-stat API z /usr/sbin/cloudlinux-ssa-managerúget-statTF©rVr�r×N©rªr^r_rárârNr7r–r±s rjrmzCloudlinuxSummary.get_ssa_statsqs_€õ Œ7�>Š>Ð<Ñ =Ô =ð (Ý”Ø3°ZÐ@ÀtÐ\`ÐhmðñôˆAõ”:˜aœhÑ'Ô'Ð 'ð  (ð (ricó4—d}d}d}d}tj |¦«r‹tj |¦«rlt¦«}|dkrXtj |¦«}tj |¦«}d}t ||z ¦«|krd}d}t j¦«tj krmtj |¦«rMd} d } tt| |d ¬ ¦«d ¦«} tt| |d ¬ ¦«d ¦«} | r| sd }nKd}nHtj |¦«r)d} tt| |d ¬ ¦«d ¦«}|rd }nd}|d krd}||dœ}|S)z; Return statistics from Leapp upgrade logs rz /var/log/leapp/leapp-upgrade.logz/var/log/elevate-cpanel.logz/var/log/cldeploy.logÚcl8i�'rVzHAn upgrade inhibitor detected\|Workflow interrupted due to the FailPhasez'Starting stage After of phase FirstBootT)r Nr°z Great SUCCESS)rürý) rªr^r_r#ÚgetmtimeÚabsrxr�rrVÚnextr&)rýÚ leapp_logfileÚelevate_cpanel_logfileÚcldeploy_logfileÚcurrent_os_versionÚ leapp_mtimeÚcldeploy_mtimeÚmonth_in_secondsÚupgrade_statusÚ fail_grep_strÚfirst_boot_grep_strÚ fail_grep_resÚfirst_boot_grep_resÚsuccess_grep_strÚgrep_resÚ stat_results rjrþz!CloudlinuxSummary.get_leapp_stats|sÍ€ð Ðà:ˆ Ø!>ÐØ2Ðå Œ7�>Š>˜-Ñ (Ô (ð *­R¬W¯^ª^Њ>˜$Ñ Ô ð 4Ý”  jÐ1¸ÈTÐY^Ð_Ñ_Ô_ˆAÝ”:˜aœhÑ'Ô'×+Ò+¨FÑ3Ô3Ð 3ð 4ð 4ricó"—dddœ}td¬¦«sy|j |jd¦«\}}|�T |d|ddœS#t$r5}t  dt|¦«|¦«|cYd}~Sd}~wwxYw|S) z= Construct dict with Smart Advice statistics N)Úsmart_advice_totalÚsmart_advice_appliedT)Úskip_marker_checkz!Can't get Smart Advice statisticsrÚappliedzAUnexpected json response from server, field %s is missing in "%s")rr rrràrUrDrrç)rr>rÁÚsa_statsr[s rjrRz.CloudlinuxSummary._get_smart_advice_statisticsÙsÓ€ð)-ÀdÐKÐKˆõ $°dÐ;Ñ;Ô;ð "Ø $¤× =Ò =ØÔ+Ø3ñ!ô!Ñ ˆG�XðÐ#ð"Ø2:¸7Ô2CÐ]eÐfoÔ]pÐqÐqÐqøÝð"ð"ð"Ý×(Ò(Ø[Õ]`ÐabÑ]cÔ]cÐemñôðð"�M�M�M�M�M�Møøøøð "øøøð ˆ s¼A Á B Á*BÂB ÂB cóì—i}tj d¦«�rtddd¬¦«5}t j|¦«}t |¦«|d<t| ¦«¦«}d„|D¦«}t |¦«|d<t d„|D¦«¦«|d <g|d <g|d <|D]‹}|d d kr9|  d¦«}|r!|d   |d¦«ŒG|d dkr8|  d¦«}|r!|d   |d¦«ŒŒtt|d ¦«¦«|d <tt|d ¦«¦«|d <t d„|D¦«¦«|d<t d„|D¦«¦«|d<t d„|D¦«¦«|d<t d„|D¦«¦«|d<t d„|D¦«¦«|d<ddd¦«n #1swxYwYtj d¦«rStddd¬¦«5}|  ¦«  ¦«|d<ddd¦«n #1swxYwY|j |jd¦«\} } | s|S|  ¦«D] \} } | || <Œ |S)zP Return statistics by parsing /var/lib/apache2nginx/server.json z!/var/lib/apache2nginx/server.jsonrorÀrfÚtotal_websitescó<—g|]}| d¦«¯|‘ŒS)Ú proxy_reasonrrr2s rjr|z.s)€ÐHÐHÐH °!·%²%¸Ñ2GÔ2GÐH˜1ÐHÐHÐHriÚtotal_proxy_passcó*—g|]}|ddk¯|‘ŒS)rêÚ directiverhr2s rjr|z.s)€Ð8pÐ8pÐ8p¸qÈqÐQ_ÔO`ÐdoÒOoÐOo¸ÐOoÐOoÐOoriÚproxy_pass_due_directiveÚfailing_directivesÚfailing_handlersrêríÚ proxy_detailsrDcó*—g|]}|ddk¯|‘ŒS)rêÚtestrhr2s rjr|z.ó(€Ð3fÐ3fÐ3f¸!È!ÈNÔJ[Ð_eÒJeÐJe°AÐJeÐJeÐJeriÚproxy_pass_due_testcó*—g|]}|ddk¯|‘ŒS)rêÚforcedrhr2s rjr|z.s(€Ð5jÐ5jÐ5j¸AÈAÈnÔL]ÐaiÒLiÐLi°aÐLiÐLiÐLiriÚproxy_pass_due_forcedcó*—g|]}|ddk¯|‘ŒS)rêrDrhr2s rjr|z.s(€Ð6lÐ6lÐ6l¸QÈQÈ~ÔM^ÐbkÒMkÐMk°qÐMkÐMkÐMkriÚproxy_pass_due_handlercó*—g|]}|ddk¯|‘ŒS)rêÚincludesrhr2s rjr|z.s)€Ð7nÐ7nÐ7n¸aÈaÐP^ÔN_ÐcmÒNmÐNm¸ÐNmÐNmÐNmriÚproxy_pass_due_includescó*—g|]}|ddk¯|‘ŒS)rêÚhttprhr2s rjr|z.rôriÚproxy_pass_due_httpNz/var/lib/apache2nginx/stater¶z"Can't get Max Webserver statistics)rªr^r_r«rNrçrÊrrõrrrÕrÉrpr rrÚget_max_webserver_statsr~) rrßrÍrËÚwebsitesÚproxiedr3Úfailing_directiveÚfailing_handlerrÁÚmax_webserver_statÚ metric_nameÚ metric_values rjr.z(CloudlinuxSummary.get_apache2nginx_statsósÉ€ðˆÝ Œ7�>Š>Ð=Ñ >Ô >ñ' hÝÐ9¸3ÈÐQÑQÔQð& hÐUVÝ”y ‘|”|�õ+.¨d©)¬)�Ð&Ñ'Ý § ¢ ¡ ¤ Ñ.Ô.�ðIÐH hÐHÑHÔH�å,/°©L¬L�Ð(Ñ)õ58Ð8pÐ8pÀGÐ8pÑ8pÔ8pÑ4qÔ4q�Ð0Ñ1à.0�Ð*Ñ+Ø,.�Ð(Ñ)Ø ðQðQ�AؘÔ(¨KÒ7Ð7Ø,-¯EªE°/Ñ,BÔ,BÐ)Ø,ðSØ!Ð"6Ô7×>Ò>¸qÀÔ?QÑRÔRÐRøØ˜>Ô*¨iÒ7Ð7Ø*+¯%ª%°Ñ*@Ô*@˜Ø*ðQØ!Ð"4Ô5×<Ò<¸Q¸Ô=OÑPÔPÐPøå.2µ3°uÐ=QÔ7RÑ3SÔ3SÑ.TÔ.T�Ð*Ñ+Ý,0µ°UÐ;MÔ5NÑ1OÔ1OÑ,PÔ,P�Ð(Ñ)å/2Ð3fÐ3f¸wÐ3fÑ3fÔ3fÑ/gÔ/g�Ð+Ñ,å14Ð5jÐ5jÀÐ5jÑ5jÔ5jÑ1kÔ1k�Ð-Ñ.å25Ð6lÐ6lÀ'Ð6lÑ6lÔ6lÑ2mÔ2m�Ð.Ñ/å36Ð7nÐ7nÀ7Ð7nÑ7nÔ7nÑ3oÔ3o�Ð/Ñ0å/2Ð3fÐ3f¸wÐ3fÑ3fÔ3fÑ/gÔ/g�Ð+Ñ,ðM& hð& hð& hñ& hô& hð& hð& hð& hð& hð& hð& høøøð& hð& hð& hð& hõR Œ7�>Š>Ð7Ñ 8Ô 8ð 2ÝÐ3°SÀ7ÐKÑKÔKð 2ÈqØ!"§¢¡¤§¢Ñ!1Ô!1��g‘ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð'+¤o×&CÒ&CØ Ô (Ø 0ñ' ô' Ñ#ˆÐ#ðð ØˆLà);×)AÒ)AÑ)CÔ)Cð .ð .Ñ %ˆK˜Ø!-ˆE�+Ñ Ð àˆ s$µG0H1È1H5È8H5É-*J#Ê#J'Ê*J'có¬—d}tj |¦«siStj|gddd¬¦«}t j|j¦«S)zE Return statistics from cmax-webserver-stats utility z,/usr/share/max_webserver/max-webserver-statsTFr¼)rªr^rrárârNr7r–rÞs rjrz)CloudlinuxSummary.get_max_webserver_stats2s\€ð >ˆÝŒw�~Š~˜dÑ#Ô#ð ØˆIÝ ŒNØ ˆFØØØð  ñ ô ˆõ Œz˜!œ(Ñ#Ô#Ð#ricó®—d}tj |¦«r3tj|dgddd¬¦«}t j|j¦«SdS)rÜz/usr/bin/clwpos-adminr»TFr¼Nr½rÞs rjrxz CloudlinuxSummary.get_wpos_statsBsd€ð 'ˆÝ Œ7�>Š>˜$Ñ Ô ð (Ý”Ø�zÐ"ØØ#Øð ñôˆAõ ”:˜aœhÑ'Ô'Ð 'ð (ð (ricó—d}d}d}t|d¬¦«5}|D]C}| ¦«}t|¦«dkrŒ*|d}|dkrd}Œ;|d krd}ŒD d d d ¦«n #1swxYwY|r|rd S|rd S|rd SdS)z9Detect cgroup version from /proc/mounts filesystem types.z /proc/mountsFrÀrfér°Úcgroup2Tr=NÚhybridÚv2Úv1Úno_mount)r«rrÊ)Ú _PROC_MOUNTSÚhas_v1Úhas_v2ÚfhräÚfieldsÚfstypes rjrOz$CloudlinuxSummary.get_cgroup_versionQs €ð&ˆ ØˆØˆÝ �,¨Ð 1Ñ 1Ô 1ð "°RØð "ð "�ØŸš™œ�Ý�v‘;”; ’?�?ØØ œ�ؘYÒ&Ð&Ø!�F�FؘxÒ'Ð'Ø!�Føð "ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð ð �fð Ø�8Ø ð Ø�4Ø ð Ø�4؈zs˜AA,Á,A0Á3A0rg)r—N)rÁNrN)rV)ËrrØrÙr`r‚rrãÚClassVarrPrçÚ__annotations__rrÚ itertoolsÚcompressrrrr#r"rrÏrGr[rÞr‘rÚ staticmethodrÚpropertyr!r#r'r+r<r\r;rbrarr{r€r‰r�r–r¦r¬r’r½rärûrþrr rrârrªr r(rÝrr*rrrÜrhrvrŒr‹rŠrZr°r¿rÈrÆrËrÖr÷rrr r rr4r@rMrorqr–r›rÂrr r¸Ú classmethodrÇrÕrËrÑr¹rárårér¶r²rrµr rr´rrrr4rr<rnr‰r�rŒr”r—rržr¥r¨rr«r­r¯r²r´r…r¼rÔr×rÛrçràrôrørýrr rrrrržr(r-rPrdr[rbrgrnrr…rŒr—ržr�r£rarørr rrrÐr)r'r(rr‚rLrr;r<r9r¦rnr ÚobjectÚNoReturnrÛrFr•ršrËrÌrÍrmrþrfràrRr.rrxrOrhrirjrørø½s΀€€€€€Ø<ÐØ7Ðà3HØ,:Ø7PØ5Lð DðDР¤°°c¸3°h´Ô!@ððñð IvÐ/°´ÀÔ1EÐuÐuÑuØIpÐ0°&´/À#Ô2FÐpÐpÑpà"� Ô"Ø$Ð$Ð$à ,ˆEÔ ,¨WÔ-DÑ EÔ EØ ,ˆEÔ ,¨WÔ-BÑ CÔ CØ ,ˆEÔ ,¨WÔ-DÑ EÔ Eð ñô€IðB€KØMÐØFÐØK€Lð $ð $ð $ðð@ð@ñ„\ð@ðððñ„Xððð˜3ðððñ„Xðð ð8ð8ñ„\ð8ðð@ð@ñ„\ð@ðððñ„\ðð - $ð-ð-ð-ð-ð^ð $ð $ñ„Xð $ðððð,ðððð  ¨ð  ð  ð  ñ„\ð  ðð;ð;ñ„\ð;ðð@¨Sð@°Sð@ð@ð@ñ„\ð@ð: ð ð ð5ð5ð5ð*#ð#ð#ð:ð$ð$ñ„\ð$ð Bð Bð Bð Bððððñ„\ððLðLðLð`ððñ„\ðð6ð  ð  ñ„\ð  ðð¨t°C¸°H¬~ðÀ$ðððñ„\ðð:+#ð+#ð+#ðZ"9ð"9ð"9ðHð : ð :°Vð :Àð :ð :ð :ñ„\ð :𠸸VÀS¸[Ô8Ið ÐPVð Ðeið Ðnrð ð ð ð ðððð:ð ð ñ„\ð ðD-ð-ð-ð^ððð ððð ð! ð!ð!ð!ñ„\ð!ðEðEðEðEð81 ð1 ð1 ð1 ðfððñ„\ðð<ððñ„\ðð*ððð(ð?ð?ñ„\ð?ð" ð ð ð ð6ðððð2]¨D°°c°¬Nð]ð]ð]ð]ð~ð˜3ð 4ðððñ„\ððð$¨Sð$¸DÀÀcÀ¼Nð$Èsð$ð$ð$ñ„\ð$ðL ð ð ð ðB P¸À#¼ð Pð Pð Pð Pð'¨x¸¬}ð'ð'ð'ð'ðð h¨s¤mðððñ„\ðð=<ð=<ð=<ð=<ð~> Ð@Qð> ÐVZð> ð> ð> ð> ð@ Ð>Oð ÐTXð ð ð ð ð>XÐ>OðXÐTXðXðXðXðXðv=ð=ð=ð=ðK@ðK@ðK@ðK@ðZ ð ð ð UBðUBðUBðn=¸(À4ÈÄ:Ô:Nð=ÐSWð=ð=ð=ð=ð,ð°d¸4´jðÀTÈ#ÈsÈ(Ä^ðððñ„[ðð&ð0%Øð0%Ø$(¨¨c¨¤Nð0%ØBEÀcÄ(ð0%à ð0%ð0%ð0%ñ„[ð0%ðdð ¨sð °tð ð ð ñ„\ð ð:=Ø   d¤Ô,ð=Ø?CÀDÈ$ÈsÌ)ÀOÔ?Tð=à ð=ð=ð=ð=ð(ðؘD”zðØ48¸¸tÀC¼y¸Ô4Iðà ˆc�3ˆhŒðððñ„[ðð*ð$%Øð$%Ø%)¨#¤Yð$%Ø8<¸SÀ#¸X¼ð$%ØVYÐZ]ÔV^ð$%à ð$%ð$%ð$%ñ„[ð$%ðLð  °ð  ¸ð  ð  ð  ñ„\ð  ðð ¸3ð ð ð ñ„\ð ð<ðL¸$¸t¼*ðLÈÈcÐSVÈhÌðLðLðLñ„\ðLð\ ð ð ð*<ð<ð<ðð+ cð+°Tð+ð+ð+ñ„\ð+ð7 à ˆt�DŒz˜4 œ: t¨C°¨H¤~°t¸DÀ$ÀsÄ)¸OÔ7LÐLÔ Mð7 ð7 ð7 ð7 ðr:°°s¸3´xÀÀSÄÐ7IÔ1Jð:ð:ð:ð:ð:=Øð=Ø"%ð=Ø<@ÀÀcÀ¼Nð=à ˆc�5˜˜s˜Ô#Ð#Ô $ð=ð=ð=ð=ð~$!°#ð$!¸#ð$!ð$!ð$!ð$!ðLØ€Y�tÐÑÔðGðGñÔñ„\ðGð,<:ð<:ð<:ð<:ð|KCðKCðKCðKCðZ  ð  ð  ð  ðð ¨D°°c°¬Nð ð ð ñ„\ð ðð 7°ð 7ÐQTð 7ÐYaÐbeÔYfð 7ð 7ð 7ñ„\ð 7ðð 5¨sð 5ÈSð 5ÐU]Ð^aÔUbð 5ð 5ð 5ñ„\ð 5ðð\¨ð\°#ð\ð\ð\ñ„\ð\ðð " tð "°ð "ð "ð "ñ„\ð "ðð " Tð "¨cð "ð "ð "ñ„\ð "ðð  ¨Dð  °Wð  ð  ð  ñ„\ð  ð "¨dð "°sð "ð "ð "ð "ðð ¨tð ¸ð ð ð ñ„\ð ðð ¨Tð °cð ð ð ñ„\ð ð&Èð&ÐRVð&ð&ð&ð&ððl¸tðlÈCðlÐTXÐY\ÔT]ðlðlðlñ„\ðlðð¨sð°tðððñ„\ðð}ð}¸dÀT¹kð}ÐUYð}ð}ð}ð}ð~\¸uð\ð\ð\ð\ð<. ð. ¸eÀd¹lð. ÐVZð. ð. ð. ð. ð`RÀsðRÈtðRðRðRðRðð! Dð!ð!ð!ñ„\ð!ð&ðððð2ððñ„\ðð ð ð ðð#ð#ñ„\ð#ðð /ð /ñ„\ð /ðð7ð7ñ„\ð7ðð °$ð ð ð ñ„\ð ðð "¨Dð "ð "ð "ñ„\ð "ðð sðððñ„\ððð°3ðððñ„\ðð ððñ„\ððb ðb ðb ðH  ð  ð  ðA VðA°¸´ ðAðAðAðAð+ ð+ ð+ ðZ ð ð ðððð2( ð( ð( ðT ð ð ð*ð$ 4ð$ð$ð$ñ„\ð$ðL ð ð ð@lðlðlð 0!¸EÀ#ÀsÈCÀ-ÔØ!$ðà/ðà4<¸UÀ3ÈÀ8¼_Ô4Mððððððððà#Ø"&ØØ04ð ð Øð à˜4‘-ð ðð ð#'¨¡+ð ð:@¼ð ð ð ñ„\ð ððð ð°3ð¸xȼ~ðððñ„\ððð ( ¨¤ð (ð (ð (ñ„\ð (ðð*ð*ñ„\ð*ð(ð>ð>ñ„\ð>ðð?ð?ñ„\ð?ðð;ð;ñ„\ð;ðð(˜8 Dœ>ð(ð(ð(ñ„\ð(ðð<˜Tð<ð<ð<ñ„\ð<ð|ðo¨Sðo°Sðoðoðoñ„\ðoð&ð4 H¨T¤Nð4ð4ð4ñ„\ð4ð¨dððððð4=¨°¬ð=ð=ð=ð=ð~ð $ X¨d¤^ð $ð $ð $ñ„\ð $ðð (˜H TœNð (ð (ð (ñ„\ð (ðð ðððñ„\ðððrirøcóT—t¦«}|j ¦«|Srg)r8rÚ link_xml_node)r!s rjr r is$€Ý ‰XŒX€FØ „O×!Ò!Ñ#Ô#Ð#Ø €Mri)ár¯r±rérrNrr4rªrPràr/rîrÄr6rárÙrºrãÚcopyrÚ collectionsrrÚ functoolsrrÚmultiprocessingrÚpathlibr Úsocketr r r r rrrrrÚ cldetectlibrxrñrrIÚcl_proc_hidepidrÚclcommonrÚclcommon.clwpos_librrrÚclcommon.constrÚclcommon.cpapirrÚ clcommon.librÚclcommon.lib.cleditionrrrÚclcommon.lib.cmt_utilsrÚclcommon.lib.constsr Úclcommon.sysctlr!Úclcommon.utilsr"r#r$r%r&r'r(r)r*r+r,Úclconfigr-r.r/Ú cldiaglibr0Ú cli_utilsr1r2Úcllimitslib_v2r3r4Ú clveconfigr5Úclwizard.modulesr6Ú lve_utilsr7rÉÚlveapir8Úvendors_api.configr9r:Úwebsiteisolationr;rÍr<rÓÚ&cl_website_collector.website_collectorr=Ú$cl_website_collector.feature_managerr>Úclsummary.net_acctr?rjr@Úclsummary.utilsrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQÚclsummary.hardware_statisticsrRrSrTÚ!clsummary.rpm_packages_statisticsrUÚ arg_parserWÚstoragerXÚclselect.clselectctlrYÚclselect.clselectstatisticsrZr[r\r]r^r_Úclselector.selectorlibr`Ú lvemanagerrarÏrÎÚ ImportErrorÚclselector.node_modules_storagerbrcÚclflagsreÚclcagefslib.domainrlrmrWrrDrYr†r…r­rír)r*r$rtr·rÏrÐrÑrÒrÇr×rÈrÉrÙrÛrÜrÚrÐrëÚcompileÚ IGNORECASEÚ MULTILINErÕr×rÒrârãrërìrírçr×r§rªr°r»rrÏrÒrØrærìrPrörør rhrirjúrRs™ ðð€€€Ø€€€Ø € € € ØÐÐÐØ € € € Ø€€€Ø € € € Ø € € € Ø€€€Ø € € € Ø€€€Ø € € € Ø € € € Ø € € € ØÐÐÐØ € € € Ø € € € Ø € € € ØÐÐÐÐÐØ,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø%Ð%Ð%Ð%Ð%Ð%ØÐÐÐÐÐØÐÐÐÐÐØLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLàÐÐÐØÐÐÐØ € € € Ø€€€Ø:Ð:Ð:Ð:Ð:Ð:ØÐÐÐÐÐððððððððððð #Ð"Ð"Ð"Ð"Ð"ØIÐIÐIÐIÐIÐIÐIÐIØ&Ð&Ð&Ð&Ð&Ð&ððððððððððð :Ð9Ð9Ð9Ð9Ð9Ø?Ð?Ð?Ð?Ð?Ð?Ø&Ð&Ð&Ð&Ð&Ð&ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðOÐNÐNÐNÐNÐNÐNÐNÐNÐNØ3Ð3Ð3Ð3Ð3Ð3Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø#Ð#Ð#Ð#Ð#Ð#Ø(Ð(Ð(Ð(Ð(Ð(Ø:Ð:Ð:Ð:Ð:Ð:ØÐÐÐÐÐØ=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ø8Ð8Ð8Ð8Ð8Ð8Ø?Ð?Ð?Ð?Ð?Ð?àCÐCÐCÐCÐCÐCØ?Ð?Ð?Ð?Ð?Ð?ððððððððððððððððððððððððððððððððððððððððððððððð(ðððððððððð DÐCÐCÐCÐCÐCà4Ð4Ð4Ð4Ð4Ð4Ø#Ð#Ð#Ð#Ð#Ð#ð"à8Ð8Ð8Ð8Ð8Ð8ððððððððððððððððð=Ð<Ð<Ð<Ð<Ð<Ø@Ð@Ð@Ð@Ð@Ð@Ø@Ð@Ð@Ð@Ð@Ð@Ð@øØð "ð "ð "Ø2ÐØ2ÐØ1ÐØ-ÐØ1ÐØ1ÐØ0ÐØ ÐØ!ÐØ!ÐÐÐð "øøøð+ð PÐOÐOÐOÐOÐOÐOøØð+ð+ð+Ø&*Ð#Ð#Ð#ð+øøøð6ð WÐVÐVÐVÐVÐVÐVøØð6ð6ð6Ø15Ð.Ð.Ð.ð6øøøðØ'Ð'Ð'Ð'Ð'Ð'Ð'øØðððððððððøøøð ðððððððððøððððððððððððð øøøð -€à ˆWÔ Ð3Ñ 4Ô 4€ à€Ø € Ø€ Ø#€Ø€ Ø €Ø €Ø€ Ø €ð$Ð ðH#CÐØ"BÐØ+TÐ(Ø*RÐ'ð$Ø#Ø,Ø+ð Ðð,#&Ðà$GÐ!Ø%IÐ"ðCÐð <ÐØ .ÐØ,ÐØ>Ðà&)Ð#ð �B”JÐEÀrÄ}ÐWYÔWcÑGcÑdÔdÐØ�”Ð4°b´mÀbÄlÑ6RÑSÔS€ð*Ðà=ÐØ ?ÐðCÐØ,Ðð"?ÐðI°#ðI¸%ÀÀSÀ¼/ðIðIðIðIð.˜4ð H¨S¤Mððððð #ð¨sð°xÀ´}ððððð:7˜Sð7¨ð7¸ð7ÀÀhÈsÄmÐUYÐFYÔ@Zð7ð7ð7ð7ð@ ð¨3ð°4ðððððj 8¨C¤=ðj°Tðjðjðjðjð¨Cð°F´OÀCÔ4Hððððð6U¨ðU°ðUðUðUðUðjBðjBðjBðjBðjBñjBôjBðjBðXEððððsZÆ(GÇGÇGÇ!G(Ç(G2Ç1G2Ç6G=Ç=HÈHÈ HÈHÈHÈ!H*È* H8È7H8