asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T 3 Ui$@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.pyrsrcKsdjdd|jD}tjdj||d}ytjdj|}Wn,tk rltdj||dj|YnXy|dStk rtd j|YnXd 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|]\}}tdj||qS)z{0}={1})rformat).0kvrrr $sz!cpanel_whmapi..z*/usr/sbin/whmapi1 {cmd} {kw} --output json)cmdkwz>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_whmapisrc Ksndjdd|jD}tjdj||d}ytjdj|Stk rhtdj||dj|YnXdS) z Perform Plesk php_handler utility console request and return result :param cmd: php_handler command :return: dict result r cSs g|]\}}dj|t|qS)z-{0} {1})r r)r r rrrr r=sz)plesk_bin_php_handler..z6/usr/local/psa/bin/php_handler --{cmd} {kw} -json true)rrrzJFailed to get JSON from this API request: php_handler {0} {1}; output: {2}N)rrrr rrrr)rrrrrrr plesk_bin_php_handler6s  rcCsd}d}tj|}tj|}yJxD|D]<}t|j|dd }tdd|jD||<WdQRXq$WWn0tt fk rt dj t j jd YnX|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|] }|jqSr)strip)r lrrr rXsz"get_da_domains..Nr )oslistdirdictfromkeysopenr set readlinesOSErrorIOErrorrr traceback format_excsplit)Z da_users_pathZda_domains_pathZda_usersdomainsr Zdomains_list_filerrr get_da_domainsIs   ,r2c Csd}y@t|\}}|j|d}|j|d}|j|d}|j|d}Wn4tjk rxtdjdjtjj dYnX||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 rr.r/r0)Z options_path config_parserglobal_sectionphp1_verphp2_ver php1_handler php2_handlerrrr get_da_php_options^s    $rC dummy_sectioncCsyFt|}tdj|d|j}WdQRXtjdd}|j|Wn0ttfk rvt dj t j j dYnX||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_filer,r-rrr.r/r0)Z conf_fileZappend_section_namefZ file_contentr=rrr r9}s " r9phpc Cs6dj|}y|t|jdStk r0|SXdS)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 tupler0 Exception)Zphp_verpretemplaterrr pretty_version_keyss  rQ/usr/sbin/httpdc Cs6tjdj|d}ytdd|DStSdS)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_LSAPI)ctlcSsg|]}|jjdqS)r )lowerr0)r r#rrr rszdump_lsapi..N)rr r')ctl_pathZapache_conf_datarrr dump_lsapis rVc Cs6tjdj|d}ytdd|DStSdS)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} -M)rScSsg|]}|jjdqS)r )rTr0)r r#rrr rsz'dump_loaded_modules..N)rr r')rUapache_modulesrrr dump_loaded_moduless rXcCstjdk}dj|rdnddS)zR Retrieve path to liblsapi, depends on arch :return: path to liblsapi r8 z/usr/lib{a}/liblscapi.soZ64r)al)sysmaxsizer )Z is_64bitsrrr liblsapi_paths r]c CsTy:djtjd|djd\}}dj||jdddStk rNd SXd S) zr Get version-release from rpm -q `pkg` :param pkg: package name to query :return: version-release rz /bin/rpm -q z --qf %{v}-%{r}-z {ver}-{rel}rLr)verrelN)rrr0r r)Zpkgr_r`rrr rpm_querys "rac sHy(fddt|DdjdjStttfk rBdSXdS)z 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 csg|]}|kr|qSrr)r r#)rPrr rsz!query_strings..rr7N)stringsr0r" IndexErrorr-r,)fnamerPr)rPr query_stringss(rec csnt|ddX}d}x:|jD].}|tjkr4||7}qt||krF|Vd}qWt||kr`|VWdQRXdS)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)rGstringZ printablelen)rdnrJrcrrr rbs   rbTc Csrt}x.|jD]"\}}tdd|jD||<qWy|rD|dS|Stk rltjdd|DdSXdS)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)rj)r r rrrr sz count_domains..r4cSsg|]}|dkr|qS)nor)r xrrr rsz!count_domains..rN)r'rrr()Zhandler_structZ default_keysZ only_lsapi result_stathrrrr count_domainss rr)rD)rK)rR)rR)rf)T)rir[r%r.rr;iorZpipesrrrNrrrr2rCr9rQrVrXr]rarerbrrrrrr s,