Your IP : 216.73.216.246


Current Path : /proc/self/root/opt/sharedrads/__pycache__/
Upload File :
Current File : //proc/self/root/opt/sharedrads/__pycache__/disk_cleanup.cpython-313.pyc

�

��}j,����SrSSKrSSKrSSKJr SSKJr SSKrSSKJ	r	J
r
 SSKrSSKrSSK
JrJr SSKrSSKJr SSKJr SS	KJr SS
KJr SrSr\"\5R8R;5r\S
-r\S-r \!"\"SS9RE55r#Sr$"SS5r%Sr&\'S:Xa\RPS:Xde\&"5 gg!\)a \RT"S5 gf=f)z�Grand Unified Disk Scanner.

For More Information and Usage:
http://wiki.inmotionhosting.com/index.php?title=RADS#disk_cleanup.py�N)�	timedelta)�Path)�ThreadPoolExecutor�as_completed)�whmapi1�
CpAPIError)�run_disk_change)�run_aux)�
ModuleBase)�get_argszv1.0 Grand Unified Disk ScannerzSeanC, MadeleineFzguds_modules/deleterszguds_modules/notifiers�)�daysz/var/log/guds_timerc��\rSrSrSrS\S\\S\\\\	4S\\\\	44Sjr
SrS	r\
S
\4Sj5r\
S\\\\\	4\\\\	444S
j5rS\S\4SjrS\\4SjrS\	S\S\S\4SjrSrSrg)�DiskCleaner�#zRAutomates a combination of techniques used to reclaim disk space
on Shared Servers�args�modules�delete�notec�8�[R"S5Ul[R"USUSUSS9 USUlUSUl0Ul[R"5Ul	SUl
SUlURS	:XaUS
Ul
O�URS;a�USUl[U5S
:XdzUR5H$upVU"UR
UR5X5'M& UR5H$upVU"UR
UR5XE'M& X4S.UlOXURRS5 [SSURS3[ R"S9 [ R$"S
5 0Ulg)z!Initialize the DiskCleaner Objectzdisk_cleanup.py�log_file�loglevel�output)�pathr�	print_out�dry_run�command��changer)rr�threadsrz'action=main warning=no modules selectedzPlease select modules with z`disk_cleanup.py z` as shown above.)�fileN)�logging�	getLogger�logger�rads�
setup_loggingrrr�all_cpusers�usersrr �len�items�warning�print�sys�stderr�exit�timeout_list)�selfrrrr�name�mods       �/opt/sharedrads/disk_cleanup.py�__init__�DiskCleaner.__init__'sY���'�'�(9�:�������j�!��*�%��8�n�	
�"�)�_��� ��O�������%�%�'��
���	�����<�<�8�#��V��D�I�
�\�\�/�
/��	�?�D�L��w�<�1�$�!'����I�D�#&�t�|�|�T�[�[�#A�F�L�"0�!%����I�D�!$�T�\�\�4�;�;�!?�D�J�".�*0�?������#�#�$M�N��1�'����~�5F�G�����
��������c�N�X R;a=URURU[[R"5505 O-U[[R"550URU'URRSX!5 UR
5 g)z:Format user information and timestamp for the timeout listz*user=%s action=add_timeout_list timeout=%sN)r0�update�int�timer$�info�write_timeout_list)r1�reason�users   r4�add_timeout_list�DiskCleaner.add_timeout_listYs|���$�$�$����d�#�*�*�F�C��	�	��4D�+E�F�'-�s�4�9�9�;�/?�&@�D���d�#������8�$�	
�	
���!r7c	��[USS9n[R"U[R5UlSSS5 [UR[5(deURRSUR5 [URR55H�upEUR5VVs0sH2upg[!["R""55U-
[$:dM0Xg_M4 snnURU'URU0:XdMwURU	M� [USSS9n[R"URUSS9 SSS5 URRS
5 g!,(df   GNQ=f![[4a� URRS5 [USSS9n[R"0USS9 SSS5 O!,(df   O=f0UlURRS	5 URRSUR5 GN�f=fs snnf!,(df   N�=f)zlReturns timeout list from specified file in dict format
:param target_file: - file to read timeout data from�ascii��encodingNztimeout_list=%szerror=invalid timeout list�w���indentznew empty timeout list createdzFaction=load_timeout_list status=/var/log/guds_timer has been refreshed)�open�yaml�load�
SafeLoaderr0�
isinstance�dictr$�debug�AssertionError�OSError�error�dumpr<�listr*r:r;�USER_TIMEOUT)r1�target_file�timeoutlist�outfiler?�data�cleaner�timers        r4�load_timeout_list�DiskCleaner.load_timeout_listds���
	D��k�G�4��*.�)�)�����+��!�5��d�/�/��6�6�6�6��K�K���/��1B�1B�C��t�0�0�6�6�8�9�J�D�'+�j�j�l�'�&2�N�G��t�y�y�{�#�e�+�l�:����&2�'�D���d�#�
� � ��&�"�,��%�%�d�+�:��+�s�W�
5���I�I�d�'�'���;�6������
!�	
�75�4����(�	D��K�K���:�;��k�3��9�W��	�	�"�g�a�0�:�9�9�� "�D���K�K���=�>��K�K���/��1B�1B�C�
	D��'�6�
5�sY�
F�+F�AF�/I	�4I	�<!I�
F�F�6I�	G)� 	I�)
G7	�3AI�I�
Irc#��# �UR5HXnURRS5(dM%URRS5(aMGURSSv� MZ g7f)z%Yield names of modules in a directoryz.py�_N���)�iterdirr2�endswith�
startswith)r�entrys  r4�	iter_mods�DiskCleaner.iter_mods�sP����\�\�^�E��z�z�"�"�5�)�)�%�*�*�2G�2G��2L�2L��j�j��"�o�%�$�s�2A0�A0�A0�returnc��[[R[55n0n[	S[5[
5US5nUHn[X#5RX'M [[R[55n[	S[5[
5US5n0nUHn[XS5RXc'M X4$)z>Import submodules. Submodules are added to available argumentszguds_modules.deletersrzguds_modules.notifiers)
rUrrf�DELETER_PATH�
__import__�globals�locals�getattr�Module�
NOTIFIER_PATH)�deleter_mod_names�deleters�guds_d_modules�mod_name�notifier_mod_names�guds_n_modules�	notifierss       r4�load_submodules�DiskCleaner.load_submodules�s���!��!6�!6�|�!D�E����#�#�W�Y���:K�Q�
��*�H�!(��!B�!I�!I�H��*�"�+�"7�"7�
�"F�G��#�$�g�i���;M�q�
���	�*�H�")�.�"C�"J�"J�I��+��"�"r7�msgpackr?c�r�[RS:Xai[R"5nUW;a[R"U5nX#;a2URRSU5 [
R"S5 [R"5nUR"S
SU0UD6n[US5(aURS:waURRS5 gURR!S	U5 g![a*n[
R"[U55 SnAGNSnAff=f)zBUnpack the message and stuff it into the pp_api to notify the user�resellerNz;user=%s action=notify_user status=unable to determine ownerz&Unable to determine owner of that user�
cpanelUser�statusrz<user=%s action=notify_user status=pp api failed unexpectedlyz$user=%s action=notify_user status=OK)znotification.send)r%�	IMH_CLASSr�
listresellersrr-r/�str�	get_ownerr$rS�pp_api�
PowerPanel�call�hasattrr~r<)r1rzr?�	resellers�exc�
pp_connect�resultss       r4�notify_user�DiskCleaner.notify_user�s���>�>�Z�'�
#�#�1�1�3�	��9�$��~�~�d�+���$����!�!�&���
���A�B��&�&�(�
��/�/��
�,0�
�4;�
���w��)�)�W�^�^�q�-@��K�K���N�
�
�K�K���C�T�J��/�
#�����S��"�"��
#�s�D�
D6�D1�1D6c
��URRSURU5 URS:Xa![5 [R
"S5 O1URS:Xa![
U5 [R
"S5 UR[5 US/:XaURURn[URSURS3SS	9 [US
S06 [UR5n0nURH�n[R"U5(dURRSU5 M<[R "U5nUHAnURURUnUR'UR(X�XE5n	XG4X9'MC M� [+U5H�n	X9upGU	R-5n
U
(dM"X@R.;aKXpR.U;a7UR0(d$UR3X�5 UR5Xt5 MxMzM|UR0(aM�UR3X�5 UR5Xt5 M� SSS5 g![R"a(nURR%S
XF5 SnAGM�SnAff=f!,(df   g=f)z-DiskCleaner object main flow control functionz action=run command=%s modules=%s�auxrr�allz running in z threadsz: )�end�sepz, z1user=%s action=cpuser_safe status=restricted userz$user=%s action=get_homedir status=%sN)r$rPrr
r-r/r	r]�SPAM_TIMER_LISTrr,r rr(r%�cpuser_safe�get_homedir�CpuserErrorrS�submit�
mod_threadr�resultr0rr�r@)r1r�pool�futuresr?�homedirr�r[r3�future�notifys           r4�run�DiskCleaner.run�s@�������.����g�	
��<�<�5� ��I��H�H�Q�K�
�\�\�X�
%��D�!��H�H�Q�K�	
����/��u�g���l�l�4�<�<�0�G�
�����l�4�<�<�.��A�t�L�
�w�!�D�!�
����
-���G��
�
���'�'��-�-��K�K�%�%�K�����"�.�.�t�4�G� '�G��,�,�t�|�|�4�W�=�C�!�[�[�����t��F�(,�o�G�O� '�#�('�w�/�� '��
����������,�,�,��&7�&7��&=�=�#�|�|� �,�,�V�:� �1�1�'�@� ,�>�
 �<�<�<��(�(��6��-�-�g�<�0�-.�
-���'�'���K�K�%�%�>�����	��.�
-�s>�AJ8�I9�%C!J8�
&J8�9J5�
J0�)J8�0J5�5J8�8
Kr3r[r�c��URRSX25 URU5n[U[5(deU$)Nz#user=%s action=module:%s status=run)r$rP�
run_modulerNrO)r1r3r[r?r�r�s      r4r��DiskCleaner.mod_threadsA��	
�����?��O�����(���&�$�'�'�'�'��
r7c��URRSUR5 [[SSS9n[
R"URUSS9 SSS5 URRS5 g!,(df   N*=f![a&nURRS	U5 SnAgSnAff=f)
z8Write contents of self.timeout_list() to SPAM_TIMER_LISTz(action=write_timeout_list update data=%srFrCrDrGrHNz*action=write_timeout_list update status=okz)action=write_timeout_list update error=%s)
r$rPr0rJr�rKrTr<rRrS)r1rY�es   r4r=�DiskCleaner.write_timeout_list
s���	N��K�K���:�D�<M�<M�
��o�s�W�=���	�	�$�+�+�W�Q�?�>��K�K���I�J�>�=���	N��K�K���I�1�M�M��	N�s.�5B
�!A<�#B
�<
B
�B
�
B=�B8�8B=)rrrr$rr r0r(N)�__name__�
__module__�__qualname__�__firstlineno__�__doc__rOrUr��typerr5r@r]�staticmethodrrf�tuplerxr�r�r�r=�__static_attributes__�r7r4rr#s���0��0��c��0��S�$�z�*�*�+�	0�
�3��Z�(�(�)�0�d	"�#
�J�&��&��&��#�
�d�3��Z�(�(�)�4��T�*�5E�0E�+F�F�G�#��#�0K�4�K�s�K�<7=�4��9�7=�r���(+��36��AD��
Nr7rc��[R5up[X5up#[X#X5nURU5 g)zMain function: get argsN)rrxrr�)rrrrr[s     r4�mainr�s6���.�.�0�L�F��V�*�M�D��$��6�G��K�K��r7�__main__�sharedr)+r�r"r-�datetimer�pathlibrr;�concurrent.futuresrrr�rK�cpapisrrr%�guds_modules.changer	�guds_modules.auxr
�guds_modules.baser�guds_modules.cli_argsr�__version__�
__author__�__file__�parent�resolve�TOPDIRrjrpr:�
total_secondsrVr�rr�r��IMH_ROLE�KeyboardInterruptr/r�r7r4�<module>r�s���H��
����?�
��&��/�$�(�*�/��
 �
�	
�h��	�	�	&�	&�	(���/�/���1�1�
��9�"�%�3�3�5�6��'��qN�qN�h��z���=�=�H�$�$�$��������������s�?C�C#�"C#