a q?h$@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl Z Gddde Z ddZ dd Zd d Zd d Zd%ddZd&ddZd'ddZd(ddZddZddZddZd)d d!Zd*d#d$ZdS)+N)StringIO)quotec@s eZdZdS)StatUtilsExceptionN)__name__ __module__ __qualname__rr+/usr/share/lve/modlscapi/user/stat_utils.pyrsrc Ksddd|D}tdj||d}ztd|}Wn*tyjtd||d|Yn0z |dWStytd |Yn0d S) z Perform cPanel WHM API console request and return data from result :param cmd: whm api command :return: data dict from result  cSs g|]\}}td||qS)z{0}={1})rformat.0kvrrr $z!cpanel_whmapi..z*/usr/sbin/whmapi1 {cmd} {kw} --output jsoncmdkwz>Failed to get JSON from this API request: {0} {1}; output: {2}dataz,Failed to get data from this API result: {0}N) joinitems exec_commandr jsonloads ValueErrorrKeyError)rkwargs joined_kwargsresultZ dict_resultrrr cpanel_whmapis    r!c Ksnddd|D}tdj||d}ztd|WStyhtd||d|Yn0dS) z Perform Plesk php_handler utility console request and return result :param cmd: php_handler command :return: dict result r cSs g|]\}}d|t|qS)z-{0} {1})r rr rrr r=rz)plesk_bin_php_handler..z6/usr/local/psa/bin/php_handler --{cmd} {kw} -json truerrzJFailed to get JSON from this API request: php_handler {0} {1}; output: {2}N)rrrr rrrr)rrrr rrr plesk_bin_php_handler6s  r"c Csd}d}t|}t|}zZ|D]P}t|j|dd*}tdd|D||<Wdq"1sh0Yq"Wn.tt fyt d t d Yn0|S) ze Get domains per user :return: dict( user: list of domains ) z!/usr/local/directadmin/data/usersz5/usr/local/directadmin/data/users/{user}/domains.list)userrcSsg|] }|qSr)stripr lrrr rXrz"get_da_domains..Nr )oslistdirdictfromkeysopenr set readlinesOSErrorIOErrorrr traceback format_excsplit)Z da_users_pathZda_domains_pathZda_usersdomainsr#Zdomains_list_filerrr get_da_domainsIs  >r6c Csd}z@t|\}}||d}||d}||d}||d}Wn2tjyvtddt dYn0||d krd n|d ||d krd n|d d S) z Get php settings from options.conf :return: dict( first php setting: {version, mode}, second php setting: {version, mode}, ) z//usr/local/directadmin/custombuild/options.confZ php1_releaseZ php2_releaseZ php1_modeZ php2_modezNo option found: {0}rr(lsphplsapi)versionhandler)) read_da_configget configparser NoOptionErrorrr rr2r3r4)Z options_path config_parserglobal_sectionphp1_verphp2_ver php1_handler php2_handlerrrr get_da_php_options^s     $rG dummy_sectionc CszZt|(}tdj|d|}Wdn1s80Ytjdd}||Wn.ttfyt d t dYn0||fS)z Read DA config file with ConfigParser. Need to add dummy section for success :param conf_file: config file name :param append_section_name: name of section to place in the beginning of file :return: RawConfigParser instance z[{s}] )sNF)strictrr()r-rr readr?RawConfigParser read_filer0r1rrr2r3r4)Z conf_fileZappend_section_namefZ file_contentrArrr r=}s 6 r=phpcCs:d|}z|t|dWSty4|YS0dS)z 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} z{0}%s%s.N)r tupler4 Exception)Zphp_verpretemplaterrr pretty_version_keyss   rU/usr/sbin/httpdcCs>tdj|d}ztdd|DWStYS0dS)a+ 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 ) z{ctl} -t -D DUMP_RUN_LSAPIZctlcSsg|]}|dqSr lowerr4r&rrr rrzdump_lsapi..Nrr r+)ctl_pathZapache_conf_datarrr dump_lsapis r]cCs>tdj|d}ztdd|DWStYS0dS)a 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 ) z{ctl} -MrWcSsg|]}|dqSrXrYr&rrr rrz'dump_loaded_modules..Nr[)r\apache_modulesrrr dump_loaded_moduless r_cCstjdk}dj|rdnddS)zR Retrieve path to liblsapi, depends on arch :return: path to liblsapi lz/usr/lib{a}/liblscapi.soZ64r)a)sysmaxsizer )Z is_64bitsrrr liblsapi_paths rccCsVz.rr;N)stringsr4r% IndexErrorr1r0)fnamerTrrhr query_stringss*rlccs~t|dd^}d}|D].}|tjvr2||7}qt||krD|Vd}qt||kr\|VWdn1sp0YdS)z Strings utility analog. Finds printable strings in executable :param fname: path to file :param n: minimum string length :return: generator, yeilds string ignore)errorsrN)r-rKstringZ printablelen)rknrNr crrr ris    riTcCsrt}|D]"\}}tdd|D||<qz|r@|dn|WStyltdd|DdYS0dS)a Count domains :param handler_struct: handler: version: set_of_domains structure :param default_keys: sequence of keys to add as default if no `lsapi` found :param only_lsapi: return only lsapi statistics :return: statistics - number of lsapi domains per version if only_lsapi=True number of lsapi domains per version per handler otherwise css|]\}}|t|fVqdS)N)rqr rrr rz count_domains..r8cSsg|]}|dkr|qS)nor)r xrrr rrz!count_domains..rN)r+rrr,)Zhandler_structZ default_keysZ only_lsapi result_stathrrrr count_domainss  ry)rH)rO)rV)rV)rm)T)rprar)r2rr?iorZpipesrrrRrr!r"r6rGr=rUr]r_rcrgrlriryrrrr s,