/opt/cloudlinux/venv/lib/python3.11/site-packages/clwpos/__pycache__
NameSizeModeActions
billing.cpython-311.opt-1.pyc93200644editdlrm
billing.cpython-311.pyc93200644editdlrm
cl_wpos_exceptions.cpython-311.opt-1.pyc77200644editdlrm
cl_wpos_exceptions.cpython-311.pyc77200644editdlrm
constants.cpython-311.opt-1.pyc64540644editdlrm
constants.cpython-311.pyc65160644editdlrm
create_user_uid_dirs.cpython-311.opt-1.pyc12310644editdlrm
create_user_uid_dirs.cpython-311.pyc12310644editdlrm
cron.cpython-311.opt-1.pyc30780644editdlrm
cron.cpython-311.pyc30780644editdlrm
daemon.cpython-311.opt-1.pyc467460644editdlrm
daemon.cpython-311.pyc467460644editdlrm
daemon_base.cpython-311.opt-1.pyc42180644editdlrm
daemon_base.cpython-311.pyc42180644editdlrm
daemon_config.cpython-311.opt-1.pyc14400644editdlrm
daemon_config.cpython-311.pyc14400644editdlrm
daemon_redis_lib.cpython-311.opt-1.pyc207820644editdlrm
daemon_redis_lib.cpython-311.pyc207820644editdlrm
daemon_subscription_handler.cpython-311.opt-1.pyc296670644editdlrm
daemon_subscription_handler.cpython-311.pyc296670644editdlrm
data_collector_utils.cpython-311.opt-1.pyc133400644editdlrm
data_collector_utils.cpython-311.pyc133400644editdlrm
logsetup.cpython-311.opt-1.pyc69940644editdlrm
logsetup.cpython-311.pyc69940644editdlrm
papi.cpython-311.opt-1.pyc160660644editdlrm
papi.cpython-311.pyc160660644editdlrm
parse.cpython-311.opt-1.pyc41240644editdlrm
parse.cpython-311.pyc41240644editdlrm
redis_configuration_pid_file_cleaner.cpython-311.opt-1.pyc13500644editdlrm
redis_configuration_pid_file_cleaner.cpython-311.pyc13500644editdlrm
report_generator.cpython-311.opt-1.pyc329570644editdlrm
report_generator.cpython-311.pyc329570644editdlrm
scoped_cache.cpython-311.opt-1.pyc22210644editdlrm
scoped_cache.cpython-311.pyc22210644editdlrm
socket_utils.cpython-311.opt-1.pyc72000644editdlrm
socket_utils.cpython-311.pyc72000644editdlrm
stats.cpython-311.opt-1.pyc145360644editdlrm
stats.cpython-311.pyc145360644editdlrm
utils.cpython-311.opt-1.pyc1110890644editdlrm
utils.cpython-311.pyc1110890644editdlrm
whmcs_utils.cpython-311.opt-1.pyc170700644editdlrm
whmcs_utils.cpython-311.pyc170700644editdlrm
wpos_admin.cpython-311.opt-1.pyc890820644editdlrm
wpos_admin.cpython-311.pyc890820644editdlrm
wpos_hooks.cpython-311.opt-1.pyc115290644editdlrm
wpos_hooks.cpython-311.pyc115290644editdlrm
wpos_req_scanner.cpython-311.opt-1.pyc66440644editdlrm
wpos_req_scanner.cpython-311.pyc66440644editdlrm
wp_config.cpython-311.opt-1.pyc42070644editdlrm
wp_config.cpython-311.pyc42070644editdlrm
wp_utils.cpython-311.opt-1.pyc233820644editdlrm
wp_utils.cpython-311.pyc233820644editdlrm
__init__.cpython-311.opt-1.pyc6570644editdlrm
__init__.cpython-311.pyc6570644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/clwpos/__pycache__/daemon.cpython-311.pyc (46746B)
§ Pû#‘[¯­ãó—ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z m Z ddlmZddlmZddlmZmZmZddlmZddlmZmZmZmZmZmZddl m!Z!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'm(Z(m)Z)m*Z*ddl+m,Z,dd l-m.Z.dd l/m0Z0dd l1m2Z2dd l3m4Z4edgd¢¦«Z5ej6e7¦«Z8ed„¦«Z9dejfd„Z:edefd„¦«Z;ddedS)éN)ÚOptionalÚDictÚTuple)Úcontextmanager)Ú namedtuple)ÚBoundedSemaphoreÚLockÚThread)Úgettext)ÚcpusersÚget_domains_php_infoÚdocrootÚget_installed_php_versionsÚget_main_username_by_uidÚcpinfo)Úget_process_pidÚremove_pid_fileÚwrite_pid_fileÚis_litespeed_runningÚis_nginx_running)Úis_user_redis_aliveÚkill_all_users_redisesÚreload_redis_for_user_threadÚ parse_redises)ÚWposDaemonBase)ÚWPOS_DAEMON_SOCKET_FILE)ÚWposDaemonLockError)ÚPendingSubscriptionWatcherÚ User_data©Ú redis_pidÚlockÚlast_reload_timec#ó–K—tjd¦«} dV—tj|¦«dS#tj|¦«wxYw)z, Context manager for dropping umask rN)ÚosÚumask)Úprevs úpy/clwpos/daemon.pyÚ_umask_0r)3sHèè€õ Œ8�A‰;Œ;€DðØ ˆˆˆõ Œ�‰Œˆˆˆø�Œ�‰Œˆˆøøøs ˜2²AÚreturncóî—t¦«5tjtj¦«}| t¦«| ¦«|cddd¦«S#1swxYwYdS)zr Create world-writable socket in given sock_location or reuse existing one :return: socket object N)r)ÚsocketÚAF_UNIXÚbindrÚlisten)Úsockobjs r(Ú_create_socketr1Cs©€õ ‰ŒððÝ”-¥¤Ñ/Ô/ˆØ� Š Õ,Ñ-Ô-Ð-Ø�ŠÑÔÐØð ðððñôððððððøøøððððððs�AA*Á*A.Á1A.r"c#óÔK—| d¬¦«sttd¦«¬¦«‚ |V—| ¦«dS#| ¦«wxYw)z= Non-blocking lock implementation for with statement F©Úblockingz/Can't acquire lock. May be it already acquired.)ÚmessageN)ÚacquirerÚ_Úrelease)r"s r(Únon_blocking_lockr9Psjèè€ð �<Š< ˆ<Ñ 'Ô 'ð`Ý!­!Ð,]Ñ*^Ô*^Ð_Ñ_Ô_Ð_ðØˆ ˆ ˆ à � Š ‰Œˆˆˆøˆ� Š ‰Œˆˆøøøs ·AÁA'ÚfunctionÚinput_parameterscóÞ—|rd„| ¦«D¦«ng}tjdd|g|¢d¬¦«}tj|j ¦«¦«dS)Ncó"—g|] \}}|›d|›�‘Œ S)ú=©)Ú.0ÚkeyÚvalues r(ú zwhmapi1..^s*€Ð\Ð\Ð\±Z°S¸% 3Ð 0Ð 0¨Ð 0Ð 0Ð\Ð\Ð\óz/usr/sbin/whmapi1z --output=jsonT)Úcapture_outputÚdata)ÚitemsÚ subprocessÚrunÚjsonÚloadsÚstdoutÚdecode)r:r;Úinput_parameters_as_listÚresults r(Úwhmapi1rP]s}€Ø`pÐxÐ\Ð\ÐCS×CYÒCYÑC[ÔC[Ð\Ñ\Ô\Ð\ÐvxÐÝ Œ^Ø ˜o¨xÐSÐ:RÐSÐdhðñô€Fõ Œ:�f”m×*Ò*Ñ,Ô,Ñ -Ô -¨fÔ 5Ð5rDcóp‡—eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZeeeee e e e e eeeeegZee e eeeeegZdZdZdZdZdZdZˆfd„ZdIdededede fd„Z!dedefd„Z"d„Z#d „Z$d!„Z%d"„Z&d#„Z'de(j(fd$„Z)d%„Z*d&„Z+dJd)efd*„Z,e-de.fd+„¦«Z/e-de.fd,„¦«Z0e-de.fd-„¦«Z1d.e(j(de2eee3ee3e.effd/„Z4d.e(j(d0ed1efd2„Z5d3edefd4„Z6 dKd.e(j(d0ed1ed5eded6ef d7„Z7e-dLd9ede8fd:„¦«Z9d.e(j(fd;„Z:d.e(j(fd<„Z;d.e(j(fd=„Z„Z=d.e(j(fd?„Z>d.e(j(fd@„Z?d.e(j(fdA„Z@d.e(j(fdB„ZAd.e(j(fdC„ZBd.e(j(fdD„ZCd.e(j(dd8fdE„ZDdF„ZEd1edd8fdG„ZFd.e(j(d1edd8fdH„ZGˆxZHS)MÚ WposDaemonzW AccelerateWP daemon main class. Socket operations, redis process control, etc z/var/lve/wpos_reloadÚreloadzget-redis-statuszget-litespeed-statuszget-nginx-statuszget-apache2nginx-statusÚphp_get_vhost_versionsÚphp_get_installed_versionsÚget_upgrade_linkÚ get_unique_idÚsuite_allowed_callbackÚdaemon_register_upgradeÚdaemon_get_upgrade_statusÚ&daemon_get_supported_suites_by_licenseÚdaemon_is_owned_by_resellerÚdaemon_is_wp2_environmentééé2éécó(•—t¦« ¦«i|_g|_d|_d|_d|_d|_t|j ¦«|_ i|_ t¦«|_ t¦«|_dS)NrT)ÚsuperÚ__init__Ú_monitoring_users_dictÚ_username_list_to_processÚ_socketÚ _reload_uidÚ_socket_threadÚ_socket_thread_workrÚ_MAX_CONCURRENT_CONNECTIONSÚ_connection_semaphoreÚ_uid_connection_countsr Ú_uid_connection_lockrÚ_suite_watcher)ÚselfÚ __class__s €r(rezWposDaemon.__init__¤s…ø€Ý ‰Œ×ÒÑÔÐð =?ˆÔ#Ø)+ˆÔ&Ø04ˆŒ àˆÔØ04ˆÔØ#'ˆÔ Ý%5°dÔ6VÑ%WÔ%WˆÔ"Ø68ˆÔ#Ý$(¡F¤FˆÔ!å8Ñ:Ô:ˆÔÐÐrDÚnoÚuser_uidÚis_store_last_reload_timeÚ force_reloadr*cóB— |j |¦«}|€d}n|j}t|¦«}t d||¦«t |||¦«\}}|ddkrCt d|¦«t|t¦«d¬¦«|j|<|S|rv|j j r|sd} ntj ¦«} t|t¦«| ¬¦«} | |j|<t d|t| ¦«¦«n,||jvr#t d |¦«|j|=nB#t$r5} t | ¦«dt| ¦«icYd} ~ Sd} ~ wwxYwddiS) aP Starts/stops redis for user and updates dict for monitoring (self._monitoring_users_dict) :param user_uid: uid to reload redis :param is_store_last_reload_time: True - write last reload time to user data, False - write 0 :return: dict {"result": "success"} / {"result": "error", "context": {}} Nz.Reloading redis for user: %s, force reload: %srOÚsuccessz^Redis reloading failed for user: %s, adding to monitoring list to try again in several minutesrr z)Saving user=%s to monitoring with data=%sz Removing user=%s from monitoring)rfÚgetr!rÚloggerÚinforrr Ú_configÚenable_reload_rate_limitÚtimeÚstrÚ ExceptionÚ exception) rqrtrurvÚuserdataÚ old_redis_pidÚusernameÚ new_redis_pidÚ result_dictr#Úuser_redis_dataÚes r(Ú_reload_redis_for_userz!WposDaemon._reload_redis_for_user·sÜ€ð' &ØÔ2×6Ò6°xÑ@Ô@ˆHØÐØ $� � à (Ô 2� å/°Ñ9Ô9ˆHå �KŠKÐHÈ(ÐT`Ñ aÔ aÐ aÝ)EÀhÐP]Ð_kÑ)lÔ)lÑ &ˆM˜;à˜8Ô$¨ Ò1Ð1Ý— ’ ØtØñôðõ 9BØ+µ$±&´&È1ð9ñ9ô9�Ô+¨HÑ5ð#Ð"Øð >ð”|Ô<ð3ÐD]ð3Ø'(Ð$Ð$å'+¤y¡{¤{Ð$Ý"+°mÍ$É&Ì&ÐcsÐ"tÑ"tÔ"t�Ø8G�Ô+¨HÑ5Ý— ’ ÐGÈÕSVÐWfÑSgÔSgÑhÔhÐhÐhð˜tÔ:Ð:Ð:Ý—K’KÐ BÀHÑMÔMÐMØÔ3°HÐ=øøÝð &ð &ð &Ý × Ò ˜QÑ Ô Ð Ø�c !™fœfÐ%Ð %Ð %Ð %Ð %Ð %Ð %øøøøð &øøøð˜)Ð$Ð$s%‚B3EÂ6B$EÅ FÅ%*FÆFÆFcóÀ—|j|}d} t|j¦«5t|¦«\}}}|s ddd¦«dS|r ddd¦«dSt |¦«}t  d|¦«t||j|j¦«\}}|€|ddkr ddd¦«dSt||jd¬ ¦«|j|<ddd¦«n #1swxYwYne#t$r,} t   d | j ||¦«Yd} ~ n4d} ~ wt$r$} t  | ¦«Yd} ~ nd} ~ wwxYwdS) a" One user monitoring actions :param user_uid: uid to reload redis :return: User remove flag: True - user has stopped his redis (or user absent in system), remove it from monitoring list False - redis still active, should be monitored again ÚNTFz/Redis instance died for username=%s, restartingrOrxrr zSLock error: %s. User %s (uid=%d) is working with his redis, skip monitoring actions)rfr9r"rrrzr{rr!rrÚdebugr5r€r�) rqrtÚ user_datar„Úis_redis_aliveÚis_user_presentr7r!r†rˆs r(Ú_user_monitoringzWposDaemon._user_monitoringësM€ð $Ô:¸8ÔDˆ ؈ð Ý" 9¤>Ñ2Ô2ð ð Ý5HÈÑ5RÔ5RÑ2� °Ø&ð Øð ð ð ñ ô ð ð ð ð"ð!Ø ð  ð ð ñ ô ð ð ð õ4°HÑ=Ô=�Ý— ’ ÐMÈxÑXÔXÐXÝ)EؘdÔ9¸(ÔCÔMñ*ô*Ñ&� ˜;ðÐ$¨°XÔ)>À)Ò)KÐ)Kàð ð ð ñ ô ð ð ð õ 9BØ'¨i¬nÈqð9ñ9ô9�Ô+¨HÑ5ð! ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øøõ&#ð ð ð å �LŠLØeØ” ØØñ  ô ð ð ð ð ð ð øøøøõ ð ð ð Ý × Ò ˜QÑ Ô Ð Ð Ð Ð Ð Ð øøøøð øøøàˆusj‘C9¥C-¼ C9Á C-Á C9ÁAC-Â5 C9ÃC-Ã! C9Ã-C1Ã1C9Ã4C1Ã5C9Ã9 EÄ"D*Ä* EÄ7EÅEcó®—g}t dt|j ¦«¦«¦«t |j ¦«¦«D].}| |¦«}|r| |¦«Œ/|D];}||jvr0t dt|¦«¦«|j|=ŒÔ>Ñ?Ô?ð 8ð 8ˆGØ×-Ò-¨gÑ6Ô6ˆIØð 8Ø'×.Ò.¨wÑ7Ô7Ð7øà.ð 9ð 9ˆGؘ$Ô5Ð5Ð5Ý— ’ ÐCÅSÈÁ\Ä\ÑRÔRÐRØÔ/°Ð8øð 9ð 9rDcó´—|jrÎd|_t¦«}t dt |¦«¦«|D]�} t j|¦«j}n#t$rYŒ)wxYw|j   |¦«}t dt |¦«¦«|r|j s|  |d¦«Œ�dSdS)zC Process all requests - start/stop redis for users Fz*Checking redis instance for those users=%sz2Current user data for redis instance monitoring=%sN) Ú_reload_config_needr rzr{rÚpwdÚgetpwnamÚpw_uidÚKeyErrorrfryr!r‰)rqÚ all_usersr„r–Úmonitored_user_datas r(Ú_reload_all_userszWposDaemon._reload_all_users&s€ð Ô #ð @à',ˆDÔ $å™ œ ˆIÝ �KŠKÐDÅcÈ)ÁnÄnÑ UÔ UÐ UØ%ð @ð @�ðÝ!œl¨8Ñ4Ô4Ô;�G�GøÝðððØ�Hðøøøð'+Ô&A×&EÒ&EÀgÑ&NÔ&NÐ#Ý— ’ ÐPÕRUÐViÑRjÔRjÑkÔkÐkØ*ð@Ð2EÔ2Oð@Ø×/Ò/°¸Ñ?Ô?Ð?øð @ð @ð @ð @sÁ A$Á$ A1Á0A1c óJ—d}t¦«}t d|¦«|D]F}|j |dt |dt ¦«d¬¦«i¦«ŒG|js§ | ¦«|  ¦«|jrdStj d¦«|dz }||j j kr| ¦«d}n,#t$rt dd¬¦«YnwxYw|j¯¥dSdS)NrzFound existing redises: %sér z,Cloudlinux AccelerateWP daemon general errorT©Úexc_info)rrzr{rfÚupdaterr Ú _is_terminateÚ _force_reloadr¡r~Úsleepr|Úmonitoring_intervalr˜r€r�)rqÚiÚexisting_redisesÚitems r(Ú _main_cyclezWposDaemon._main_cycle;sa€à ˆÝ(™?œ?ÐÝ� Š Ð0Ð2BÑCÔCÐCØ$ð yð yˆDØ Ô '× .Ò .°°Q´½ÈTÐRSÌWÕ[_Ñ[aÔ[aÐtuÐ9vÑ9vÔ9vÐ/wÑ xÔ xÐ xÐ xØÔ$ð `ð `à×"Ò"Ñ$Ô$Ð$Ø×&Ò&Ñ(Ô(Ð(ØÔ%ðØ�EÝ” ˜1‘ ” � Ø�Q‘�Ø�t”|Ô7Ò7Ð7à×,Ò,Ñ.Ô.Ð.Ø�AøøÝð `ð `ð `Ý× Ò Ð!OÐZ^Ð Ñ_Ô_Ð_Ð_Ð_ð `øøøðÔ$ð `ð `ð `ð `ð `sÁ=/C.Â.?C.Ã.&DÄDcól—t|j¬¦«|_|j ¦«dS)z; Create and start socket processing thread )ÚtargetN)r Ú_process_socket_connectionsrjÚstart©rqs r(Ú_create_and_start_socket_threadz*WposDaemon._create_and_start_socket_threadRs5€õ%¨DÔ,LÐMÑMÔMˆÔØ Ô×!Ò!Ñ#Ô#Ð#Ð#Ð#rDcód—t|j¦«�"t d|j¦«dS| ¦«|_t d¦«| ¦«t|j¦«|  ¦«|  ¦«|  ¦«d|_ |j  ¦«| ¦«t!|j¦«t d¦«dS)z+ Main work daemon function NzCPID file %s existing. Cloudlinux AccelerateWP daemon already works?z&Cloudlinux AccelerateWP daemon startedFz)Cloudlinux AccelerateWP daemon terminated)rÚ _PID_FILENAMErzÚwarningÚ_create_socket_with_retryrhr{Ú_setup_signalsrrSr´r®rkrjÚjoinÚ_remove_socketrr³s r(rIzWposDaemon.runYs€õ ˜4Ô-Ñ .Ô .Ð :å �NŠNÐ`ÐbfÔbtÑ uÔ uÐ uØ ˆFà×5Ò5Ñ7Ô7ˆŒ Ý� Š Ð<Ñ=Ô=Ð=Ø ×ÒÑÔÐÝ�tÔ)Ñ*Ô*Ð*à � Š ‰ Œ ˆ Ø ×,Ò,Ñ.Ô.Ð.à ×ÒÑÔÐà#(ˆÔ Ø Ô× Ò Ñ"Ô"Ð"Ø ×ÒÑÔÐݘÔ*Ñ+Ô+Ð+Ý� Š Ð?Ñ@Ô@Ð@Ð@Ð@rDc ó—td|jdz¦«D]»}tj t ¦«r| ¦« t¦«cS#ttf$r]}t  d||jt|¦«¦«||jkrtj|j¦«Yd}~Œ´d}~wwxYwt  d|j¦«t!d¦«‚)a Create the daemon socket, removing a stale socket file first. Retries because at boot the filesystem holding the socket may still be read-only: the stale file can't be unlinked and bind() fails with EADDRINUSE (CLPRO-3351). If all attempts fail, exits with a non-zero code so that systemd (Restart=on-failure) restarts the service instead of leaving it dead until manual intervention. r£zHCan't create AccelerateWP daemon socket (attempt %s of %s). Error is: %sNzkFailed to create AccelerateWP daemon socket after %s attempts, exiting so that systemd restarts the service)ÚrangeÚ_SOCKET_CREATE_ATTEMPTSr%ÚpathÚexistsrr»r1ÚOSErrorÚIOErrorrzr·rr~r©Ú_SOCKET_CREATE_RETRY_PERIODÚ SystemExit)rqÚattemptrˆs r(r¸z$WposDaemon._create_socket_with_retryrs€õ˜Q Ô <¸qÑ @ÑAÔAð Að AˆGÝŒw�~Š~Õ5Ñ6Ô6ð &Ø×#Ò#Ñ%Ô%Ð%ð AÝ%Ñ'Ô'Ð'Ð'Ð'øÝ�WÐ%ð Að Að Aå—’Ø^ØØÔ0ݘ‘F”Fñ ôðð ˜TÔ9Ò9Ð9Ý”J˜tÔ?Ñ@Ô@Ð@øøøøøøøøøð Aøøøõ �Šð ;à Ô (ñ ô ð õ ˜‰mŒmÐsÁ A$Á$CÁ5AC à CcóÞ—tj |j¦«rH| ¦« tj|j¦«dS#t tf$rYdSwxYwdS)z% Force reload daemon N)r%r¿ÚisfileÚ_WPOS_DAEMON_RELOAD_FILErSÚremoverÁrÂr³s r(r¨zWposDaemon._force_reload’sy€õ Œ7�>Š>˜$Ô7Ñ 8Ô 8ð à �KŠK‰MŒMˆMð Ý” ˜$Ô7Ñ8Ô8Ð8Ð8Ð8øÝ�WÐ%ð ð ð Ø��ð øøøð  ð sºAÁA*Á)A*có”— t dt¦«|j�|j ¦«t jt¦«t dt¦«dS#ttf$r9}t  dtt|¦«¦«Yd}~dSd}~wwxYw)z- Remove daemon's socket file zRemoving socket %sNzSocket %s removedz!Can't remove socket %s. Error: %s) rzr{rrhÚcloser%rÉrÁrÂr·r)rqrˆs r(r»zWposDaemon._remove_socketŸsÀð aÝ �KŠKÐ,Õ.EÑ FÔ FÐ FØŒ|Ð'Ø” ×"Ò"Ñ$Ô$Ð$Ý ŒIÕ-Ñ .Ô .Ð .Ý �KŠKÐ+Õ-DÑ EÔ EÐ EÐ EÐ EøÝ�Ð!ð að að aÝ �NŠNÐ>Õ@WÕY\Ð]^ÑY_ÔY_Ñ `Ô `Ð `Ð `Ð `Ð `Ð `Ð `Ð `øøøøð aøøøs‚A9A=Á=CÂ.CÃCFr£Úgracefulcó~—t|j¦«}|�rG t d|¦«t j|t j¦«n3#t$r&}t d||¦«Yd}~nd}~wwxYwd}||kra t j|d¦«n+#t$rt d|¦«Yn’wxYw||z }tj |¦«||k°at d|¦« t j|t j ¦«n3#t$r&}t d||¦«Yd}~nd}~wwxYw|r.t d¦«tt¦«t|j¦«t d¦«dS) z0 Stops a working daemon process zKilling process with PID %sz4Process with pid %s is not possible to be killed: %sNrz#Process with pid %s is finally deadz:Process with pid %s did not exit in timeout, sigkilling itz7Graceful shutdown, killing all existing redis processesz&Cloudlinux AccelerateWP daemon stopped)rr¶rzr{r%ÚkillÚsignalÚSIGTERMrÁr~r©ÚSIGKILLrr)rqrÌÚtimeoutÚintervalÚpidrˆr«s r(ÚstopzWposDaemon.stop¬sî€õ˜dÔ0Ñ1Ô1ˆØ ñ `ð \Ý— ’ Ð9¸3Ñ?Ô?Ð?Ý”˜�Vœ^Ñ,Ô,Ð,Ð,øÝð \ð \ð \Ý— ’ ÐRÐTWÐYZÑ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[øøøøð \øøøðˆAØ�g’+�+ðÝ”G˜C ‘O”O�O�OøÝðððÝ—K’KÐ EÀsÑKÔKÐKØ�Eðøøøð�X‘ �Ý” ˜8Ñ$Ô$Ð$ð�g’+�+õ— ’ ÐXÐZ]Ñ^Ô^Ð^ð`Ý”G˜C¥¤Ñ0Ô0Ð0Ð0øÝð`ð`ð`Ý—K’KÐ VÐX[Ð]^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_øøøøð`øøøà ð +Ý �KŠKÐQÑ RÔ RÐ Rå "¥6Ñ *Ô *Ð *å˜Ô*Ñ+Ô+Ð+Ý� Š Ð<Ñ=Ô=Ð=Ð=Ð=sA™:AÁ BÁA?Á?BÂB&Â&%Cà CÄ D,Ä, EÄ6EÅEcóH—dtj¦«t¦«dœS)zy Get litespeed webserver status: running or not. :return: Dict to send to clwpos-user via socket rx©rOÚ timestampÚstatus)r~rr?rDr(Ú_get_litespeed_statusz WposDaemon._get_litespeed_statusÕs!€ð $µ$´)±+´+ÕI]ÑI_ÔI_Ð`Ð`Ð`rDcóH—dtj¦«t¦«dœS)zu Get nginx webserver status: running or not. :return: Dict to send to clwpos-user via socket rxr×)r~rr?rDr(Ú_get_nginx_statuszWposDaemon._get_nginx_statusÝs!€ð $µ$´)±+´+ÕIYÑI[ÔI[Ð\Ð\Ð\rDcóL—ddlm}dtj¦«|¦«dœS)z| Get apache2nginx webserver status: running or not. :return: Dict to send to clwpos-user via socket r©Úis_apache2nginx_runningrxr×)Úclcommon.utilsrßr~rÞs r(Ú_get_apache2nginx_statusz#WposDaemon._get_apache2nginx_statusås6€ð ;Ð:Ð:Ð:Ð:Ð:à#µ$´)±+´+ÐI`ÐI`ÑIbÔIbÐcÐcÐcrDÚclient_socket_objcó0—tj|¦«} t|¦«}n=#t$r0tj|dd|it j¦«dœ¦«YdSwxYw tj|¦«}nE#tjtj tj tjttf$rd}YnwxYw|€tj|dd|idœ¦«dSd |vr+tj|d t j¦«d œ¦«dS|d krÆd|vr+tj|d t j¦«d œ¦«dS|d} t|¦«}n=#t$r0tj|dd|it j¦«dœ¦«YdSwxYw|d |jvr+tj|dt j¦«d œ¦«dSd|||dfS|d |jvr+tj|dt j¦«d œ¦«dSd|||dfS)a, Validate socket connection. Check: - root connections - connection user presense - command validity :return: tuple(is_connection_valid, uid, username, user_request_dict, is_root_query) is_connection_valid: True - Socket connection valid, should be processed. uid, username and user_request_dict filled False - invalid connection, should be skipped. uid == -1, username and user_request_dict = None is_root_query - True - root query, do not check reload interval zNo user uid=%(uid)dÚuid)rOÚcontextrØ)FéÿÿÿÿNNFNz>User %(username)s sent invalid query to CL AccelerateWP daemonr„©rOråÚcommandz0Daemon received malformed query (command absent)©rOrØrz)Root request to daemon should contain uidzDaemon received invalid commandTF)Ú socket_utilsÚget_uid_from_socketrržÚ(send_dict_to_socket_connection_and_closer~Ú'read_unpack_response_from_socket_daemonr,ÚerrorrÒrJÚJSONDecodeErrorÚstructÚAttributeErrorÚUnicodeDecodeErrorÚ_DAEMON_VALID_COMMANDS_FOR_ROOTÚ_DAEMON_VALID_COMMANDS)rqrâÚ_uidr„Ú user_requests r(Ú_validate_socket_connectionz&WposDaemon._validate_socket_connectionïsÈ€õÔ/Ð0AÑBÔBˆð 0Ý/°Ñ5Ô5ˆHˆHøÝð 0ð 0ð 0Ý Ô AØ!Ð.CÐQVÐX\ÐP]ÕlpÔluÑlwÔlwÐ#xÐ#xñ ô ð ð0Ð/Ð/ð  0øøøð  Ý+7Ô+_Ð`qÑ+rÔ+rˆLˆLøÝ” �fœn­dÔ.BÅFÄLÕR`ÕbtÐuð ð ð ØˆLˆLˆLð øøøà Ð å Ô AØ!à^Ø *¨HÐ5ððñ ô ð ð0Ð/Ø ˜LÐ (Ð (å Ô AØ!ØMÕ\`Ô\eÑ\gÔ\gÐhÐhñ ô ð ð0Ð/à �1Š9ˆ9à˜LÐ(Ð(ÝÔEØ%Ð2]ÕlpÔluÑlwÔlwÐ'xÐ'xñôðð4Ð3à Ô&ˆDð 4Ý3°DÑ9Ô9��øÝð 4ð 4ð 4ÝÔEØ%Ø4À%ÈÀÕ]aÔ]fÑ]hÔ]hÐiÐiñôðð4Ð3Ð3ð  4øøøð ˜IÔ&¨dÔ.RÐRÐRåÔEØ%Ð2SÕbfÔbkÑbmÔbmÐ'nÐ'nñôðð4Ð3à˜˜x¨°tÐ;Ð ;à ˜ Ô "¨$Ô*EÐ EÐ Eå Ô AØ!Ð.OÕ^bÔ^gÑ^iÔ^iÐ#jÐ#jñ ô ð ð0Ð/à�T˜8 \°5Ð8Ð8s3–&¦6A ÁA Á$A9Á9?B;Â:B;Å EÅ6FÆFr„räcó*—|j |d¦«}|€tj|dd|idœ¦«dS|j5t |¦«\}}}|ddkr||d<tj||¦«ddd¦«dS#1swxYwYdS)zµ Get redis status for user (socket query) :param client_socket_obj: Client socket connection :param username: User name :param uid: User uid Nz"User %(username)s has no redis yetr„rçrOrxrÙ)rfryrêrìr"r)rqrâr„rär�rŽr7r†s r(Ú_socket_user_get_redis_statusz(WposDaemon._socket_user_get_redis_status>s€ð $Ô:×>Ò>¸sÀDÑIÔIˆ Ø Ð å Ô AØ!Ð.RÐ`jÐltÐ_uÐ#vÐ#vñ ô ð ð ð ð”ð fð fÝ1DÀSÑ1IÔ1IÑ.�  ;à˜xÔ(¨IÒ5Ð5Ø,:�K Ñ)ÝÔEÐFWÐYdÑeÔeÐeð  fð fð fñ fô fð fð fð fð fð fð fð føøøð fð fð fð fð fð fsÁ:BÂB ÂB r#cóL—|dkptj¦«|z |jkS)zv Checks is reload available by checking time :return: True - available, False - not available r)r~Ú_MIN_ALLOWED_RELOAD_PERIOD)rqr#s r(Ú_is_reload_availablezWposDaemon._is_reload_availableTs(€ð   1Ò$Ðh­¬ © ¬ Ð6FÑ(FÈÔIhÒ(hÐhrDÚ is_root_queryÚskip_last_time_checkcó —|j |¦«}t dt |¦«t |¦«¦«|�|j€a| |d|¬¦«}tj¦«|d<tj ||¦«t  d||¦«dS|j } |sM|sK|  | ¦«s6tj¦«d||j dœd œ}tj ||¦«dS|j5| |d¦«}tj¦«|d<tj ||¦«t d ||¦«ddd¦«dS#1swxYwYdS) a> Reload redis for user (socket query) :param client_socket_obj: Client socket connection :param username: User name :param uid: User uid :param is_root_query: True - reload redis by root, do not check reload interval False - user reload, check reload interval z.[Redis reload request] Current user=%s data=%sNT)rvrØzX[Redis user data not found] Cloudlinux AccelerateWP daemon reloaded for user %s (uid=%d)zSCan't reload redis for user %(user)s. Last reload was less than %(sec)s seconds ago)ÚuserÚsec)rØrOråzT[Redis user data found] Cloudlinux AccelerateWP daemon reloaded for user %s (uid=%d))rfryrzr{rr!r‰r~rêrìrŒr#rürûr") rqrâr„rärýrvrþr�r†r#s r(Ú_socket_user_redis_reloadz$WposDaemon._socket_user_redis_reload[së€ð" $Ô:×>Ò>¸sÑCÔCˆ Ý� Š ÐDÅcÈ(ÁmÄmÕUXÐYbÑUcÔUcÑdÔdÐdà Ð   Ô 3Ð ;à×5Ò5°c¸4ÈlÐ5Ñ[Ô[ˆKÝ'+¤y¡{¤{ˆK˜ Ñ $Ý Ô AÐBSÐU`Ñ aÔ aÐ aÝ �LŠLØjØØñ ô ð ð ˆFà$Ô5ÐØ#ð ¨Mð À$×B[ÒB[Ð\lÑBmÔBmð õ"œY™[œ[ØoØ$,°TÔ5TÐUÐUððˆKõ Ô AÐBSÐU`Ñ aÔ aÐ aØ ˆFà Œ^ð ð Ø×5Ò5°c¸4Ñ@Ô@ˆKÝ'+¤y¡{¤{ˆK˜ Ñ $Ý Ô AÐBSÐU`Ñ aÔ aÐ aÝ �KŠKØfÐhpÐruñ ô ð ð  ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð sÄAFÆFÆ FNÚaccountc ó‡—dtdtdtfd„}|p t¦«}‰� ˆfd„| ¦«D¦«}|r#| dt|¦«¦«g}| ¦«D]~\}} | ||d|d||d |d ¦«t |¦«d d œ¦«ŒW#t $r|r| d |¦«YŒ{wxYw|S)NÚ handler_nameÚ version_idr*có2—|dkrdSd|vrdS|rd|vrdS|S)NÚfpmzphp-fpmz x-httpd-lsphpÚlsapiÚlsphpr?)rrs r(Ú_castz1WposDaemon._php_get_vhost_versions.._cast’s?€Ø˜uÒ$Ð$Ø �yØ  JÐ.Ð.Ø�wàð  '¨\Ð"9Ð"9Ø�wàÐ rDcó4•—i|]\}}|d‰k¯||“ŒS)r„r?)r@rArBrs €r(ú z6WposDaemon._php_get_vhost_versions.. s0ø€ÐlÐlÐl©*¨#¨uÈuÐU_ÔO`ÐdkÒOkÐOk˜3 ÐOkÐOkÐOkrDz[PHP vhost info]: %sr„Údisplay_versionÚ handler_typeÚphp_version_idr)ÚvhostrÚversionÚhandlerÚ documentrootz)Error on getting php version for %s, skip)rr rGr{r”rr€r�)rrzÚphp_vhost_datar Ú vhosts_datarOrArBs` r(Ú_php_get_vhost_versionsz"WposDaemon._php_get_vhost_versions�seø€ð ¥ð µð ½ð ð ð ð ð%Ð>Õ(<Ñ(>Ô(>ˆ à Ð ØlÐlÐlÐl¸ ×8IÒ8IÑ8KÔ8KÐlÑlÔlˆKð ð BØ �KŠKÐ.µ°KÑ0@Ô0@Ñ AÔ AÐ AàˆØ%×+Ò+Ñ-Ô-ð ð ‰JˆC�ð Ø— ’ à!$Ø#(¨Ô#4Ø#(Ð):Ô#;Ø#( 5¨¨~Ô)>ÀÐFVÔ@WÑ#XÔ#XÝ(/°© ¬ °Q¬ð ðñôððøõð ð ð àðWØ×$Ò$Ð%PÐRUÑVÔVÐVØ�ð  øøøð ˆ sÂACÃ"DÄDcóX—| ¦«}tj||¦«dS)z/ Get litespeed status for user N)rÚrêrì©rqrârOs r(Ú_socket_user_litespeed_statusz(WposDaemon._socket_user_litespeed_statusºs0€ð ×1Ò1Ñ3Ô3ˆÝÔ=Ð>OÐQWÑXÔXÐXÐXÐXrDcóX—| ¦«}tj||¦«dS)z+ Get nginx status for user N)rÜrêrìrs r(Ú_socket_user_nginx_statusz$WposDaemon._socket_user_nginx_statusÂs0€ð ×-Ò-Ñ/Ô/ˆÝÔ=Ð>OÐQWÑXÔXÐXÐXÐXrDcóX—| ¦«}tj||¦«dS)z2 Get apache2nginx status for user N)rárêrìrs r(Ú _socket_user_apache2nginx_statusz+WposDaemon._socket_user_apache2nginx_statusÊs0€ð ×4Ò4Ñ6Ô6ˆÝÔ=Ð>OÐQWÑXÔXÐXÐXÐXrDcóÈ— | |t¬¦«}d|dœ}n)#t$r}dt|¦«dœ}Yd}~nd}~wwxYwt j||¦«dS)N)rzrx©rOrFz)Daemon cannot get vhosts data: %(reason)srç)rrzr€rrêrì)rqrârÚ vhost_dataÚresponserˆs r(Ú#_socket_user_php_get_vhost_versionsz.WposDaemon._socket_user_php_get_vhost_versionsÒs˜€ð Ø×5Ò5°gÅfÐ5ÑMÔMˆJð $Ø"ððˆHˆHøõð hð hð hØ(SÕ`cÐdeÑ`fÔ`fÐgÐgˆHˆHˆHˆHˆHˆHøøøøð høøøõ Ô=Ð>OÐQYÑZÔZÐZÐZÐZs‚$¤ A ®AÁA cóR—dt¦«dœ}tj||¦«dS)Nrxr )rrêrì)rqrâr"s r(Ú'_socket_user_php_get_installed_versionsz2WposDaemon._socket_user_php_get_installed_versionsÞs7€àÝ.Ñ0Ô0ð ð ˆõ Ô=Ð>OÐQYÑZÔZÐZÐZÐZrDcó¼—ddlm}|¦«}d| |t|d¬¦«dd|¬¦«dœ}t j||¦«dS)Nr)Úget_server_wide_optionsrx)Údns)Úkeyls)r„ÚdomainÚfeature)rOÚ upgrade_url)Ú clwpos.utilsr'Úget_upgrade_url_for_userrrêrì)rqrâr„r+r'Úserver_optionsr"s r(Ú_get_upgrade_linkzWposDaemon._get_upgrade_linkåsˆ€ð 9Ð8Ð8Ð8Ð8Ð8à0Ð0Ñ2Ô2ˆàØ)×BÒBØ!­&°ÀÐ*JÑ*JÔ*JÈ1Ô*MÈaÔ*PÐZaðCñôð ð ˆõ Ô=Ð>OÐQYÑZÔZÐZÐZÐZrDcóX—ddlm}d||¦«dœ}tj||¦«dS)zI Get unique identifier which we use as user's auth token r)Úget_or_create_unique_identifierrx)rOÚ unique_idN)Úclwpos.billingr2rêrì)rqrâr„r2r"s r(Ú_get_unique_idzWposDaemon._get_unique_idôsL€ð CÐBÐBÐBÐBÐBà$-Ð<[Ð<[Ð\dÑOÐQYÑZÔZÐZÐZÐZrDcób—ddlm}|¦«\}}d||dœ}tj||¦«dS)Nr)Úget_suites_status_from_licenserx)rOÚaccelerate_wp_premiumÚaccelerate_wp_cdn)r-r7rêrì)rqrâr7Úawp_premium_statusÚawp_cdn_statusr"s r(Ú _get_supported_suites_by_licensez+WposDaemon._get_supported_suites_by_licenseýsZ€Ø?Ð?Ð?Ð?Ð?Ð?à-KÐ-KÑ-MÔ-MÑ*ИNàØ%7Ø!/ð ð ˆõ Ô=Ð>OÐQYÑZÔZÐZÐZÐZrDcó`—ddlm}||d¬¦«}d|dœ}tj||¦«dS)Nr)Úis_user_owned_by_resellerT)Ú force_as_rootrx)rOÚis_owned_by_reseller)r-r>rêrì)rqrâr„r>r@r"s r(Ú_get_is_user_owned_by_resellerz)WposDaemon._get_is_user_owned_by_resellersT€Ø:Ð:Ð:Ð:Ð:Ð:à8Ð8¸ÐQUÐVÑVÔVÐØ$-ÐG[Ð\Ð\ˆÝÔ=Ð>OÐQYÑZÔZÐZÐZÐZrDcóZ—ddlm}|¦«}d|dœ}tj||¦«dS)Nr)Úis_wp2_environmentrx)rOÚis_wp2)Úclcommon.cpapirCrêrì)rqrârCrDr"s r(Ú_get_is_wp2_environmentz"WposDaemon._get_is_wp2_environmentsJ€Ø5Ð5Ð5Ð5Ð5Ð5à#Ð#Ñ%Ô%ˆØ$-¸Ð@Ð@ˆÝÔ=Ð>OÐQYÑZÔZÐZÐZÐZrDcóR— | |¦«\}}}}}|sdSt dt|¦«¦«|d|jkr| |||¦«dS|d|jkrR| dd¦«}|dvrd}| dd¦«dk}| ||||||¦«dS|d|j kr|  |¦«dS|d|j kr|  |¦«dS|d|j kr| |¦«dS|d|jkr| ||¦«dS|d|jkr| |¦«dS|d|jkr-| ||| d d ¦«¦«dS|d|jkr| ||¦«dS|d|jkr"|j ||j¦«dS|d|jkr|j |||¦«dS|d|jkr2|j ||| d d ¦«¦«dS|d|jkr|  |¦«dS|d|j!kr| "||¦«dS|d|j#kr| $|¦«dSdS#tJ$rvt &d d ¬ ¦« tOj(|dtSj)¦«dœ¦«YdS#tT$rt +d¦«YYdSwxYwwxYw)z� Process client's socket connection (Works in thread) :param client_socket_obj: Client socket connection NzIncome user request=%srèrvrs)ÚyesrsÚskip_last_reload_timerHr+Ú object_cachez"Socket connection processing errorTr¤zInternal daemon errorréz!Broken pipe during error response),r÷rzr{rÚ _DAEMON_GET_REDIS_STATUS_COMMANDrùÚ_DAEMON_RELOAD_COMMANDryrÚ$_DAEMON_GET_LITESPEED_STATUS_COMMANDrÚ _DAEMON_GET_NGINX_STATUS_COMMANDrÚ'_DAEMON_GET_APACHE2NGINX_STATUS_COMMANDrÚ%DAEMON_PHP_GET_VHOST_VERSIONS_COMMANDr#Ú)DAEMON_PHP_GET_INSTALLED_VERSIONS_COMMANDr%ÚDAEMON_GET_UPGRADE_LINK_COMMANDr0ÚDAEMON_GET_UNIQUE_ID_COMMANDr5ÚDAEMON_SUITE_ALLOWED_CALLBACKrprXrhÚDAEMON_REGISTER_UPGRADE_ATTEMPTÚadd_pending_upgrade_taskÚ!DAEMON_GET_UPGRADE_ATTEMPT_STATUSÚget_upgrade_task_statusÚ&DAEMON_GET_SUPPORTED_SUITES_BY_LICENSEr<Ú DAEMON_IS_USER_OWNED_BY_RESELLERrAÚDAEMON_IS_WP2_ENVIRONMENTrFr€r�rêrìr~ÚBrokenPipeErrorr·) rqrâÚis_connection_validrär„rörýrvrþs r(Ú _handle_client_socket_connectionz+WposDaemon._handle_client_socket_connections‚€ð < DØNR×NnÒNnØ!ñOôOÑ KÐ   h° ¸mð'ð Ø�å �KŠKÐ0µ#°lÑ2CÔ2CÑ DÔ DÐ Dð˜IÔ&¨$Ô*OÒOÐOà×2Ò2Ð3DÀhÐPSÑTÔTÐTÐTÐTؘiÔ(¨DÔ,GÒGÐGà+×/Ò/°ÀÑEÔE� ð  }Ð4Ð4Ø#'�LØ'3×'7Ò'7Ð8OÐQUÑ'VÔ'VÐZ_Ò'_Ð$Ø×.Ò.Ø% x°°mÀ\ÐSgñôðððð˜iÔ(¨DÔ,UÒUÐUØ×2Ò2Ð3DÑEÔEÐEÐEÐEؘiÔ(¨DÔ,QÒQÐQØ×.Ò.Ð/@ÑAÔAÐAÐAÐAؘiÔ(¨DÔ,XÒXÐXØ×5Ò5Ð6GÑHÔHÐHÐHÐHؘiÔ(¨DÔ,VÒVÐVØ×8Ò8Ð9JÈHÑUÔUÐUÐUÐUؘiÔ(¨DÔ,ZÒZÐZØ×<Ò<Ð=NÑOÔOÐOÐOÐOؘiÔ(¨DÔ,PÒPÐPØ×&Ò&Ð'8¸(ÀL×DTÒDTÐU^Ð`nÑDoÔDoÑpÔpÐpÐpÐpؘiÔ(¨DÔ,MÒMÐMØ×#Ò#Ð$5°xÑ@Ô@Ð@Ð@Ð@ؘiÔ(¨DÔ,NÒNÐNØÔ#×:Ò:Ð;LÈdÌlÑ[Ô[Ð[Ð[Ð[ؘiÔ(¨DÔ,PÒPÐPØÔ#×<Ò<Ð=NÐP\Ð^aÑbÔbÐbÐbÐbؘiÔ(¨DÔ,RÒRÐRØÔ#×;Ò;Ø% s¨L×,<Ò,<¸YÈÑ,WÔ,Wñôðððð˜iÔ(¨DÔ,WÒWÐWØ×5Ò5Ð6GÑHÔHÐHÐHÐHؘiÔ(¨DÔ,QÒQÐQØ×3Ò3Ð4EÀxÑPÔPÐPÐPÐPؘiÔ(¨DÔ,JÒJÐJØ×,Ò,Ð->Ñ?Ô?Ð?Ð?Ð?ðKÐJøåð Dð Dð DÝ × Ò ÐAÈDÐ Ñ QÔ QÐ Qð DÝÔEØ%Ð2IÕX\ÔXaÑXcÔXcÐ'dÐ'dñôððððøõ#ð Dð Dð DÝ—’ÐBÑCÔCÐCÐCÐCÐCÐCð Døøøð  Døøøs…‚L&¡AL&Á3A!L&Ã&L&Ã>&L&Ä&&L&Å'L&Å7&L&Æ Process socket connections (works in thread) z4Cloudlinux AccelerateWP daemon socket thread startedr£rNFr3)r°ÚargszFailed to start handler threadzSocket connection errorTr¤z4Cloudlinux AccelerateWP daemon socket thread stopped)rzr{rkÚselectrhÚacceptrêrër€rËrornryÚ_MAX_CONNECTIONS_PER_UIDrmr6Ú_release_uid_connectionr Ú(_handle_client_socket_connection_trackedr²r�r8r,rî)rqÚreadabler7Ú _sock_objectrâräÚts r(r±z&WposDaemon._process_socket_connectionsYs €õ � Š ÐJÑKÔKÐKØÔ&ñ OÝ#œ]¨D¬L¨>¸2¸rÀ1ÑEÔE‰NˆH�a˜Ø (ð Oñ O� ðOØ+7×+>Ò+>Ñ+@Ô+@Ñ(Ð% qð!Ý*Ô>Ð?PÑQÔQ˜˜øÝ$ð!ð!ð!Ø)×/Ò/Ñ1Ô1Ð1Ø ˜ð!øøøðÔ2ðgðgØÔ6×:Ò:¸3ÀÑBÔBÀdÔFcÒcÐcØ-×3Ò3Ñ5Ô5Ð5Ø$ðgðgðgñgôgðgðgð<@Ô;V×;ZÒ;ZÐ[^Ð`aÑ;bÔ;bÐefÑ;f˜Ô3°CÑ8ð gðgðgñgôgðgðgðgðgðgðgøøøðgðgðgðgð  Ô5×=Ò=ÀuÐ=ÑMÔMð!Ø×4Ò4°SÑ9Ô9Ð9Ø)×/Ò/Ñ1Ô1Ð1Ù ð2Ý"¨$Ô*WÐ_pÐruÐ^vÐwÑwÔw˜ØŸš™ œ ˜ ˜ øÝ$ð2ð2ð2Ý×(Ò(Ð)IÑJÔJÐJØÔ2×:Ò:Ñ<Ô<Ð<Ø×4Ò4°SÑ9Ô9Ð9Ø)×/Ò/Ñ1Ô1Ð1Ð1Ð1ð 2øøøùøõ ”|ðOðOðOÝ×$Ò$Ð%>ÈÐ$ÑNÔNÐNÐNÑNðOøøøð7Ô&ñ Oõ: � Š ÐJÑKÔKÐKÐKÐKsŒÁ HÁ"A7Á6HÁ7BÂHÂB HÂ":Dà HÃ(&DÄ HÄD ÄHÄ!D Ä"AHÅ,,FÆHÆA&HÇ?HÈHÈHÈ+H6È5H6cóÚ—|j5|j |d¦«dz }|dkr|j |d¦«n ||j|<ddd¦«dS#1swxYwYdS)zYDecrement the per-UID active connection counter and remove the entry if it drops to zero.r£rN)rornryÚpop)rqräÚcounts r(rdz"WposDaemon._release_uid_connection}s¾€à Ô &ð 9ð 9ØÔ/×3Ò3°C¸Ñ;Ô;¸aÑ?ˆEؘŠzˆzØÔ+×/Ò/°°TÑ:Ô:Ð:Ð:à38�Ô+¨CÑ0ð  9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9sˆA A Á A$Á'A$cóô— | |¦«|j ¦«| |¦«dS#|j ¦«| |¦«wxYw)zn Wrapper around _handle_client_socket_connection that tracks per-UID active connection counts N)r^rmr8rd)rqrâräs r(rez3WposDaemon._handle_client_socket_connection_tracked†s}€ð .Ø × 1Ò 1Ð2CÑ DÔ DÐ Dà Ô &× .Ò .Ñ 0Ô 0Ð 0Ø × (Ò (¨Ñ -Ô -Ð -Ð -Ð -øð Ô &× .Ò .Ñ 0Ô 0Ð 0Ø × (Ò (¨Ñ -Ô -Ð -Ð -øøøs ‚AÁ0A7)rs)Fr^r£)rsF)NNN)IÚ__name__Ú __module__Ú __qualname__Ú__doc__rÈrLrKrMrNrOrPrQrRrSrTrUrWrYrZr[rôrórûÚ_REDIS_SOCKET_WAIT_TIMEOUTrlrcr¾rÃreÚintÚboolrrr‰r�r˜r¡r®r´rIr,r¸r¨r»rÕÚ staticmethodÚdictrÚrÜrárrr÷rùrürr’rrrrr#r%r0r5r<rArFr^r±rdreÚ __classcell__)rrs@r(rRrRfsØø€€€€€ððð 6ÐØ%ÐØ'9Ð$Ø+AÐ(Ø'9Ð$Ø.GÐ+Ø,DÐ)Ø0LÐ-Ø&8Ð#Ø#2Ð Ø$<Ð!Ø&?Ð#à(CÐ%Ø-UÐ*Ø'DÐ$Ø ;ÐàØ(Ø,Ø(Ø/Ø-Ø1Ø'Ø$Ø'Ø)Ø.Ø(Ø!ðÐð" Ø'Ø$Ø)Ø%Ø.Ø(Ø!ð 'Ð#ð"$Ðà!#Ðà"$Ðà Ðð ÐØ"#Ðð;ð;ð;ð;ð;ð&2%ð2%¨sð2%Ètð2%Ðcfð2%Ðrvð2%ð2%ð2%ð2%ðh(¨ð(°ð(ð(ð(ð(ðT9ð9ð9ð"@ð@ð@ð*`ð`ð`ð.$ð$ð$ðAðAðAð2¨6¬=ððððð@ ð ð ð að að að$>ð$>˜Tð$>ð$>ð$>ð$>ðRða 4ðaðaðañ„\ðaðð]˜tð]ð]ð]ñ„\ð]ððd dðdðdðdñ„\ðdðM9Ø!'¤ðM9à ˆt�S˜( 3œ-¨°$¬¸Ð=Ô >ðM9ðM9ðM9ðM9ð^f¸v¼}ðfÐX[ðfÐbeðfðfðfðfð,i°Sði¸Tðiðiðiðið!Ø%*ð2ð2à!œ=ð2ðð2ðð 2ð ð 2ð ð 2ð#ð2ð2ð2ð2ðhð(ð(¨ð(ÐZ^ð(ð(ð(ñ„\ð(ðTY¸v¼}ðYðYðYðYðY¸6¼=ðYðYðYðYðYÀ&Ä-ðYðYðYðYð [ÀVÄ]ð [Ð]`ð [ð [ð [ð [ð[ÈÌð[ð[ð[ð[ð [°6´=ð [ð [ð [ð [ð[°´ ð[ð[ð[ð[ð [À&Ä-ð [ð [ð [ð [ð[ÀÄ ð[ð[ð[ð[ð[¸¼ð[ð[ð[ð[ðADÀ&Ä-ðADÐTXðADðADðADðADðF"Lð"Lð"LðH9¨3ð9°4ð9ð9ð9ð9ð.È&Ì-ð.Ð^að.Ðfjð.ð.ð.ð.ð.ð.ð.ð.rDrR)N)?Úloggingr%rÏrHr~rJr,rar›rðÚtypingrrrÚ contextlibrÚ collectionsrÚ threadingrr r Úclwposr r7rEr r rrrrràrrrrrÚclwpos.daemon_redis_librrrrÚclwpos.socket_utilsrêÚclwpos.daemon_baserÚclwpos.constantsrÚclwpos.cl_wpos_exceptionsrÚ"clwpos.daemon_subscription_handlerrrÚ getLoggerrmrzr)r1r9rrPrRr?rDr(úr„sæðð€€€Ø € € € Ø € € € ØÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø%Ð%Ð%Ð%Ð%Ð%Ø"Ð"Ð"Ð"Ð"Ð"Ø4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4àÐÐÐÐÐðððððððððððððððððtÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsððððððððððððð +Ð*Ð*Ð*Ð*Ð*Ø-Ð-Ð-Ð-Ð-Ð-Ø4Ð4Ð4Ð4Ð4Ð4Ø9Ð9Ð9Ð9Ð9Ð9ØIÐIÐIÐIÐIÐIà ˆJ�{Ð$MÐ$MÐ$MÑ NÔ N€ à ˆÔ ˜8Ñ $Ô $€ðð ð ñ„ð 𠘜 ð ð ð ð ðð ˜Dð ð ð ñ„ð ð6ð6�cð6¨X°d¸3À¸8´nÔ-Eð6ð6ð6ð6ðh .ðh .ðh .ðh .ðh .�ñh .ôh .ðh .ðh .ðh .rD