�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n! fc@sddlZddlZddlZddlZddlZddlZddlZddlmZddlm Z de fdYZ dZ dZ dZd Zd d Zd d ZddZddZdZdZdZddZedZdS(iN(tStringIO(tquotetModLsapiStatExceptioncBseZRS((t__name__t __module__(((s+/usr/share/lve/modlscapi/user/stat_utils.pyR scKsdjg|jD]$\}}tdj||^q}tjdjd|d|}ytjdj|}Wn5tk rtdj||dj|nXy |dSWn&t k rtd j|nXd S( s Perform cPanel WHM API console request and return data from result :param cmd: whm api command :return: data dict from result t s{0}={1}s*/usr/sbin/whmapi1 {cmd} {kw} --output jsontcmdtkwts>Failed to get JSON from this API request: {0} {1}; output: {2}tdatas,Failed to get data from this API result: {0}N( tjoint iteritemsRtformatt exec_commandtjsontloadst ValueErrorRtKeyError(Rtkwargstktvt joined_kwargstresultt dict_result((s+/usr/share/lve/modlscapi/user/stat_utils.pyt cpanel_whmapis@!    cKsdjg|jD]$\}}dj|t|^q}tjdjd|d|}ytjdj|SWn5tk rtdj||dj|nXdS( s Perform Plesk php_handler utility console request and return result :param cmd: php_handler command :return: dict result Rs-{0} {1}s6/usr/local/psa/bin/php_handler --{cmd} {kw} -json trueRRRsJFailed to get JSON from this API request: php_handler {0} {1}; output: {2}N( R R R RR RRRR(RRRRRR((s+/usr/share/lve/modlscapi/user/stat_utils.pytplesk_bin_php_handler(s@   c Csd}d}tj|}tj|}yhxa|D]Y}t|jd|d6}tg|jD]}|j^qh|||SXdS(s Convert simple php versions to pretty format :param php_ver: {major}.{minor} version :param pre: desired key start :return: alt-php{major}{minor} or desired `pre`{major}{minor} s{0}%s%st.N(R ttupleR(t Exception(tphp_vertprettemplate((s+/usr/share/lve/modlscapi/user/stat_utils.pytpretty_version_keyss  s/usr/sbin/httpdcCs]tjdjd|}y0tg|D]}|jjd^q(SWn tSXdS(s+ Get `httpd -t -D DUMP_RUN_LSAPI` info For httpd24 this default path is `/opt/rh/httpd24/root/usr/sbin/httpd`, generated in make_from_templates.sh script :param ctl_path: path to httpd (also apachectl may be used) :return: dict( lsapi_option: value ) s{ctl} -t -D DUMP_RUN_LSAPItctlRN(R R RtlowerR((tctl_pathtapache_conf_dataR.((s+/usr/share/lve/modlscapi/user/stat_utils.pyt dump_lsapis 0cCs]tjdjd|}y0tg|D]}|jjd^q(SWn tSXdS(s Get `httpd -M` For httpd24 this default path is `/opt/rh/httpd24/root/usr/sbin/httpd`, generated in make_from_templates.sh script :param ctl_path: path to httpd (also apachectl may be used) :return: dict( apache_module: value ) s{ctl} -MRURN(R R RRVR((RWtapache_modulesR.((s+/usr/share/lve/modlscapi/user/stat_utils.pytdump_loaded_moduless 0cCs+tjdk}djd|r$dndS(sR Retrieve path to liblsapi, depends on arch :return: path to liblsapi ii s/usr/lib{a}/liblscapi.sotat64RI(tsystmaxsizeR (t is_64bits((s+/usr/share/lve/modlscapi/user/stat_utils.pyt liblsapi_pathscCsoyVdjtjd|djd\}}djd|d|jdd SWntk rjd SXd S( sr Get version-release from rpm -q `pkg` :param pkg: package name to query :return: version-release Rs /bin/rpm -q s --qf %{v}-%{r}t-s {ver}-{rel}tvertrelRNiN(R R R(R RtNone(tpkgRcRd((s+/usr/share/lve/modlscapi/user/stat_utils.pyt rpm_querys /' cCsfyDgt|D]}||kr|^qdj|djSWntttfk radSXdS(s Filter strings by given template Also split string upon given template :param fname: path to file :param template: template to find in string :return: first template occurrence splitted by template iiN(tstringsR(R#t IndexErrorR%R$Re(tfnameRSR.((s+/usr/share/lve/modlscapi/user/stat_utils.pyt query_stringssDiccst|d}}d}xS|jD]E}|tjkrJ||7}q%nt||krd|Vnd}q%Wt||kr|VnWdQXdS(s Strings utility analog. Finds printable strings in executable :param fname: path to file :param n: minimum string length :return: generator, yeilds string RRN(R RFtstringt printabletlen(RjtnRKRtc((s+/usr/share/lve/modlscapi/user/stat_utils.pyRhs  cCst}x:|jD],\}}td|jD||sR6iN(RR RR(thandler_structt default_keyst only_lsapit result_statthR ((s+/usr/share/lve/modlscapi/user/stat_utils.pyt count_domainss $ (RlR^RR&RR:R RtpipesRRPRRRR/RCR8RTRYR[RaRgRkRhtTrueRw(((s+/usr/share/lve/modlscapi/user/stat_utils.pyts,