§ 1êÄj©.ãó¦—ddlmZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddlmZmZmZmZddlmZdd lmZmZmZmZmZdd lmZdd lmZdd lm Z dd l!m"Z"m#Z#m$Z$m%Z%e e&¦«Z'dZ(dZ)d„Z*Gd„d¦«Z+Gd„de+¦«Z,Gd„de+¦«Z-Gd„de+¦«Z.deedeefd„Z/d!de0de1de1fd „Z2dS)"é)Úabsolute_importN)ÚPath)ÚList)Úparse)Úwrite_file_via_tempfile)Ú getCPNameÚ CPANEL_NAMEÚ PLESK_NAMEÚDIRECTADMIN_NAME)Ú is_ubuntu)ÚRedisRequiredConstantsÚ EA_PHP_PREFIXÚPLESK_PHP_PREFIXÚDIRECTADMIN_PREFIXÚ CAGEFSCTL)Ú!get_cached_php_installed_versions)ÚPHP)Ú setup_logging)Údaemon_communicateÚrun_in_cagefs_if_neededÚcreate_pid_fileÚ acquire_lockz /opt/cpanelz/opt/plesk/phpcóÒ—t¦«}|tkrt¦«S|tkrt ¦«S|t krt ¦«Std¦«‚)z$Instantiate appropriate configuratorz)No PHP Redis configurator currently found)rr ÚEaPhpRedisConfiguratorr ÚPleskPhpRedisConfiguratorr ÚDirectAdminPhpRedisConfiguratorÚ Exception)Úpanels úV/opt/cloudlinux/venv/lib64/python3.11/site-packages/clwpos/object_cache/redis_utils.pyÚ configuratorr .sb€õ ‰KŒK€EØ • ÒÐÝ%Ñ'Ô'Ð'Ø •*Ò Ð Ý(Ñ*Ô*Ð*Ø Õ"Ò "Ð "Ý.Ñ0Ô0Ð0å Ð?Ñ @Ô @Ð@ócóŠ—eZdZd„Zd„Zd„Zd„Zed„¦«Zed„¦«Z de e fd„Z d e de fd „Zd e defd „Zd S)ÚRedisConfiguratorcóÈ—ttj d|j¦«d¬¦«5| ¦«ddd¦«dS#1swxYwYdS)Nz/var/runé)Úattempts)rÚosÚpathÚjoinÚ PHP_PREFIXÚconfigure_redis_extension©Úselfs rÚ configurezRedisConfigurator.configure>s¤€Ý �"œ'Ÿ,š, z°4´?ÑCÔCØ#$ð&ñ&ô&ð -ð -à × *Ò *Ñ ,Ô ,Ð ,ð -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -sµAÁAÁAcó�—|r¿|r¿tj t¦«r� t jtdgtjtjd¬¦«t jtddgtjtj¬¦«dS#tj$rt  d¦«YdSwxYwdSdSdS)Nz--check-cagefs-initializedT)ÚstdoutÚstderrÚcheckz --wait-lockz--force-update)r0r1z.CageFS in uninitialized, skipping force-update) r'r(ÚisfilerÚ subprocessÚrunÚDEVNULLÚCalledProcessErrorÚ_loggerÚinfo)r-Úneed_cagefs_updateÚwait_child_processs rÚ_update_cagefsz RedisConfigurator._update_cagefsCs €Ø ð /Ð"4ð /½¼¿ºÝñ:ô:ð /ð /Ý”¥ Ð+GÐHÝ&0Ô&8Ý&0Ô&8Ø%)ð+ñ+ô+ð+õ”Ý  Ð/?Ð@Ý%Ô-Ý%Ô-ð/ñ/ô/ð/ð/ð/øõ Ô0ð Fð Fð FÝ— ’ ØDñFôFðFðFðFðFð Føøøð /ð /ð /ð /ð /ð /sª3BÂ)B?Â>B?c óЗd}ttj d¦«¦«}g}| ¦«D]M}| d¦«r!t  d|j¦«Œ8|  |¦«ŒN|st  d¦«dStj  ¦«}t|j ¦«5|D�]P}|  d¦«�s | |¦«}ddd g|j¢|‘}t!¦«rd dd |g}| d d i¦«t  d |t%|¦«¦«t'j|dd|¬¦«}|jdkr>d|jvr5d|jvr,t  d||j›d|j›�¦«Œñt  d¦«| |¦«d}�Œ$| d¦«s| |¦«d}�ŒR| ||¦«ddd¦«dS#1swxYwYdS)zh Sets up redis if needed: - installing package - enables in .ini file FÚCL_WPOS_WAIT_CHILD_PROCESSÚredisz:Redis extension is already installed and configured for %sz3All ea-php versions have redis installed and activeNÚyumz-yÚinstallzapt-getÚDEBIAN_FRONTENDÚnoninteractivez+Trying to install package=%s via command=%sT)Úcapture_outputÚtextÚenvrz Nothing to dozis already the newest versionz/Failed to install package %s, due to reason: %sú z-Package successfully installed, activating it)Úboolr'ÚenvironÚgetÚget_supported_phpÚis_extension_loadedr8r9Ú identifierÚappendÚcopyrr*Úis_extension_installedÚ redis_packageÚ_additional_reposr ÚupdateÚstrr4r5Ú returncoder0Úerrorr1Úenable_redis_extensionr<) r-r:r;Úphp_versions_to_enable_redisÚphprFrQÚcommand_to_installÚresults rr+z+RedisConfigurator.configure_redis_extensionTsû€ð #ÐÝ!¥"¤*§.¢.Ð1MÑ"NÔ"NÑOÔOÐà')Ð$Ø×)Ò)Ñ+Ô+ð 5ð 5ˆCØ×&Ò& wÑ/Ô/ð Ý— ’ ÐYÐ[^Ô[iÑjÔjÐjØØ (× /Ò /°Ñ 4Ô 4Ð 4Ð 4à+ð Ý �LŠLÐNÑ OÔ OÐ OØ ˆFåŒj�oŠoÑÔˆå ˜Tœ_Ñ -Ô -ð Hð HØ3ð .ñ .�Ø×1Ò1°'Ñ:Ô:ñ.Ø$(×$6Ò$6°sÑ$;Ô$;�MØ*/°°yÐ)iÀ4ÔCYÐ)iÐ[hÐ)iÐ&Ý ‘{”{ðJØ.7¸¸yÈ-Ð-XÐ*ØŸ š Ð$5Ð7GÐ#HÑIÔIÐIÝ—L’LÐ!NØ!.Ý!$Ð%7Ñ!8Ô!8ñ:ô:ð:õ(œ^Ø*Ø'+Ø!Øð ñô�Fð Ô(¨AÒ-Ð-°?È&Ì-Ð3WÐ3WØ7VÐ^dÔ^kÐ7kÐ7kÝŸ š ØMØ)Ø%œ}Ð?Ð?°´ Ð?Ð?ñAôAðAð!Ý—L’LÐ!PÑQÔQÐQØ×/Ò/°Ñ4Ô4Ð4Ø)-Ð&Ñ&Ø×0Ò0°Ñ9Ô9ð.Ø×/Ò/°Ñ4Ô4Ð4Ø)-Ð&ùà × Ò Ð 2Ð4FÑ GÔ GÐ Gð? Hð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hð Hð HsÃ#E+IÉIÉ"Icó —| |¦«}d}tj |¦«s>t dt |¦«| |¦«¦«dSt|¦«5}|  ¦«}ddd¦«n #1swxYwYtj d|›�¦«}tj d|›�¦«}d|›d�}d} g} |D]^} |  | ¦«rdS| s-|  | ¦«r|   |¦«d } ŒI|   | ¦«Œ_| s|   |¦«td  | ¦«|d ¦«dS) zD Enables (if needed) redis extension in .ini config zredis.sozWRedis extension config: %s is not found, ensure corresponding rpm package installed: %sNz^\s*extension\s*=\s*z^\s*;\s*extension\s*=\s*z extension = rGFTÚi¤)Ú redis_inir'r(Úexistsr8rVrTrQÚopenÚ readlinesÚreÚcompileÚmatchrNrr)) r-Ú php_versionr(ÚkeywordÚfÚextension_dataÚuncommented_patternÚcommented_patternÚ enabled_lineÚ was_enabledÚlinesÚlines rrWz(RedisConfigurator.enable_redis_extension‹sÖ€ð�~Š~˜kÑ*Ô*ˆØˆÝŒw�~Š~˜dÑ#Ô#ð Ý �MŠMØiÝ�D‘ ” ˜4×-Ò-¨kÑ:Ô:ñ <ô <ð <ð ˆFÝ �$‰ZŒZð +˜1ØŸ[š[™]œ]ˆNð +ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +õ!œjÐ)JÀÐ)JÐ)JÑKÔKÐÝœJÐ'LÀ7Ð'LÐ'LÑMÔMÐØ1 gÐ1Ð1Ð1ˆ ؈ ؈à"ð #ð #ˆDØ"×(Ò(¨Ñ.Ô.ð Ø��Øð #Ð#4×#:Ò#:¸4Ñ#@Ô#@ð #Ø— ’ ˜\Ñ*Ô*Ð*Ø"� � à— ’ ˜TÑ"Ô"Ð"Ð"Øð 'Ø �LŠL˜Ñ &Ô &Ð &Ý §¢¨¡¤°°eÑ<Ô<Ð<Ð<ÐÔ>ð 2ÝœŸš Ô':Ñ;Ô;ð 2å% oÔ&@×&HÒ&HÈÐSUÑ&VÔ&VÑWÔWÐ[lÒlÐlØ× Ò  Ñ1Ô1Ð1øàÐr!có—|j›d�S)Nz -php-redis©rMrys rrQz$EaPhpRedisConfigurator.redis_package×s€Ø”.Ð,Ð,Ð,Ð,r!recóP—t|j¦« d¦«S)Nzetc/php.d/50-redis.ini©rÚdirÚjoinpathr|s rr^z EaPhpRedisConfigurator.redis_iniÚs!€Ý�K”OÑ$Ô$×-Ò-Ð.FÑGÔGÐGr!N) r}r~rÚ__doc__r€r*rrrKrQrr^r�r!rrr¾s‘€€€€€ðððððñ„Xðð 4¨¤9ððððð -ð-ð-ðH SðH¨TðHðHðHðHðHðHr!rcóL—eZdZdZed„¦«Zd„Zd„Zdee fd„Z dS)rzì Installs and configure redis extensions for DirectAdmin php NOTE: directadmin enables redis for all compiled versions or for none https://docs.directadmin.com/webservices/php/php-extensions.html#installing-extensions có—tSrp)rr,s rr*z*DirectAdminPhpRedisConfigurator.PHP_PREFIXås€å!Ð!r!cóh—| ¦«}|D]}| d¦«sdSŒdS)zR If at least for 1 supported version redis is not loaded -> False r?FT)rKrL)r-Úsupported_versionsÚ version_items rÚis_redis_already_enabledz8DirectAdminPhpRedisConfigurator.is_redis_already_enabledésL€ð"×3Ò3Ñ5Ô5ÐØ.ð ð ˆLØ×3Ò3°GÑ<Ô<ð Ø�u�uð àˆtr!cóÊ—ttj d¦«¦«}t |j¦«5 | ¦«sItjgd¢dd¬¦«tjddgdd¬¦«|  d|¬¦«n*#t$rt  d¦«YnwxYwddd¦«dS#1swxYwYdS) Nr>)ú(/usr/local/directadmin/custombuild/buildÚset_phpr?ÚyesT)rDrEržÚ php_redis)r:r;z4Error on configuring redis extension for DirectAdmin) rHr'rIrJrr*rœr4r5r<rr8Ú exception)r-r;s rr+z9DirectAdminPhpRedisConfigurator.configure_redis_extensionósk€Ý!¥"¤*§.¢.Ð1MÑ"NÔ"NÑOÔOÐÝ ˜Tœ_Ñ -Ô -ð Zð Zð ZØ×4Ò4Ñ6Ô6ðhÝ”NÐ#jÐ#jÐ#jØ26Ø(,ð.ñ.ô.ð.õ”NÐ$NÐP[Ð#\Ø26Ø(,ð.ñ.ô.ð.ð×'Ò'¸4ÐTfÐ'ÑgÔgÐgøøÝð Zð Zð ZÝ×!Ò!Ð"XÑYÔYÐYÐYÐYð Zøøøð Zð Zð Zñ Zô Zð Zð Zð Zð Zð Zð Zð Zøøøð Zð Zð Zð Zð Zð Zs7ÁCÁAB! CÂ!$CÃCÃCÃCÃCÃCrvcó—t¦«}td¦«}g}|D]b}|j t¦«rAt|j dd¦«¦«|kr| |¦«Œc|S)Nr…ú.r])rr‡rMrˆrÚversionrŠrNr‹s rrKz1DirectAdminPhpRedisConfigurator.get_supported_phps‹€Ý8Ñ:Ô:ˆ Ý)¨$Ñ/Ô/Ðàˆ Ø+ð 2ð 2ˆOØÔ*×5Ò5Õ6HÑIÔIð 2Ý! /Ô"9×"AÒ"AÀ#ÀrÑ"JÔ"JÑKÔKÐO`Ò`Ð`Ø× Ò  Ñ1Ô1Ð1øØÐr!N) r}r~rr–r€r*rœr+rrrKr�r!rrrÝsy€€€€€ðððð"ð"ñ„Xð"ðððð Zð Zð Zð  4¨¤9ð ð ð ð ð ð r!rcób—eZdZdZed„¦«Zed„¦«Zdeefd„Z d„Z d„Z dS) rz> Install and configure redis extensions for Plesk php có—dS)N)z --enablerepozPLESK*r�r,s rrRz+PleskPhpRedisConfigurator._additional_reposs€à'Ð'r!có—tSrp)rr,s rr*z$PleskPhpRedisConfigurator.PHP_PREFIXs€åÐr!rvcóL—t¦«}td¦«}g}|D]�}|j d¦«retj |j¦«rAt|j dd¦«¦«|kr|  |¦«Œ‚|S)z• Looks through /opt/plesk/php and gets installed phps. /opt/plesk/php contains plain version directories, e.g. 7.4; 8.0; 8.1 r…z plesk-phpr]r†r‹s rrKz+PleskPhpRedisConfigurator.get_supported_phps¦€õ 9Ñ:Ô:ˆ Ý)¨$Ñ/Ô/Ðàˆ Ø+ð 2ð 2ˆOØÔ)×4Ò4°[ÑAÔAð 2ÝœŸš Ô':Ñ;Ô;ð 2å% oÔ&@×&HÒ&HÈÐVXÑ&YÔ&YÑZÔZÐ^oÒoÐoØ× Ò  Ñ1Ô1Ð1øàÐr!có—|j›d�S)Nz-redisr‘rys rrQz'PleskPhpRedisConfigurator.redis_package,s€Ø”.Ð(Ð(Ð(Ð(r!cóP—t|j¦« d¦«S)Nzetc/php.d/redis.inir“r|s rr^z#PleskPhpRedisConfigurator.redis_ini/s!€Ý�K”OÑ$Ô$×-Ò-Ð.DÑEÔEÐEr!N) r}r~rr–r€rRr*rrrKrQr^r�r!rrrs–€€€€€ðððð(ð(ñ„Xð(ðð ð ñ„Xð ð 4¨¤9ððððð")ð)ð)ðFðFðFðFðFr!rrŒrvcó’—g}|D]A}| d¦«s*| d¦«r| |¦«ŒB|S)zr Filter list of given php versions to find out for which redis extension is presented but not loaded. r?)rLrPrN)rŒÚ"php_versions_with_not_loaded_redisr¥s rÚ)filter_php_versions_with_not_loaded_redisr®3s`€ð *,Ð&Øð?ð?ˆØ×*Ò*¨7Ñ3Ô3ð ?¸×8VÒ8VÐW^Ñ8_Ô8_ð ?Ø .× 5Ò 5°gÑ >Ô >Ð >øØ -Ð-r!ÚnoÚuidÚforceÚskip_last_reload_timecó>—d||dœ}|r||d<t|¦«dS)zÌ Make redis reload via CLWPOS daemon :param uid: User uid (optional) :param force: force reload w/o config check :param skip_last_reload_time: skip check of last redis reload for user Úreload)ÚcommandÚ force_reloadr²r°N)r)r°r±r²Úcmd_dicts rÚ reload_redisr¸?sB€ð$Ø %Ø)>ð@ð@€Hð ð؈�‰Ý�xÑ Ô Ð Ð Ð r!)Nr¯r¯)3Ú __future__rr'rbr4ÚpathlibrÚtypingrÚpackaging.versionrr‡ÚsecureiorÚclcommon.cpapirr r r Úclcommon.utilsr Úclwpos.constantsr rrrrÚclwpos.data_collector_utilsrÚclwpos.php.baserÚclwpos.logsetuprÚ clwpos.utilsrrrrr}r8ÚBASE_CPANEL_EA_PHP_DIRÚBASE_PLESK_PHP_DIRr r#rrrr®ÚintrTr¸r�r!rúrÈsÅðð'Ð&Ð&Ð&Ð&Ð&à € € € Ø € € € ØÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ4Ð4Ð4Ð4Ð4Ð4à,Ð,Ð,Ð,Ð,Ð,àOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOØ$Ð$Ð$Ð$Ð$Ð$ðððððððððððððððJÐIÐIÐIÐIÐIØÐÐÐÐÐØ)Ð)Ð)Ð)Ð)Ð)ððððððððððððð ˆ-˜Ñ !Ô !€à&ÐØ%Ðð Að Að Að"ð"ð"ð"ð"ñ"ô"ð"ðDHðHðHðHðHÐ.ñHôHðHð>.ð.ð.ð.ð.Ð&7ñ.ô.ð.ðb"Fð"Fð"Fð"Fð"FÐ 1ñ"Fô"Fð"FðJ .¸DÀ¼Ið .È$ÈsÌ)ð .ð .ð .ð .ð !ð !�cð !¨ð !ÈCð !ð !ð !ð !ð !ð !r!