Compare commits
No commits in common. "d367127b4e2dc73174d9d40c6bf319c3335c6cf5" and "d66a589dfc49a34e6d4cc4a74b6b80d758e87c6a" have entirely different histories.
d367127b4e
...
d66a589dfc
27
constant.py
27
constant.py
@ -5,18 +5,18 @@ KEEP_FILES = [".bashrc", ".bash_logout", ".bash_profile", "public-html", ".ssh",
|
|||||||
WHITE_LIST = ["mysql", "unix_manager", "unixmanager215", "gangxing", "how083012", "yulunliu", "amie12349", "minliwu", "chenyuyang", "unixmanager5xx"]
|
WHITE_LIST = ["mysql", "unix_manager", "unixmanager215", "gangxing", "how083012", "yulunliu", "amie12349", "minliwu", "chenyuyang", "unixmanager5xx"]
|
||||||
|
|
||||||
# filter date
|
# filter date
|
||||||
DATE = '2024-04-01'
|
DATE = '2024-02-01'
|
||||||
|
|
||||||
# owner, you have to change the GOOGLE_CODE if change this variable
|
# owner, you have to change the GOOGLE_CODE if change this variable
|
||||||
GOOGLE_OWNER = "snsd0805@cmlab.csie.ntu.edu.tw"
|
GOOGLE_OWNER = "snsd0805@cmlab.csie.ntu.edu.tw"
|
||||||
|
|
||||||
# notify_template
|
# notify_template
|
||||||
MAIL_MSG = '''
|
MAIL_MESSAGE = '''
|
||||||
Hi, {}<br>
|
Hi, {}<br>
|
||||||
<br>
|
<br>
|
||||||
因 CML Server 掛載家目錄(~)的 NAS 空間即將不足,我們將於 4/28(日) 00:00 開始清除長時間沒有修改紀錄的資料夾<br>
|
因 CML Server 掛載家目錄(~)的 NAS 空間即將不足,我們將於 4/28(日) 00:00 開始清除長時間沒有修改紀錄的資料夾<br>
|
||||||
<br>
|
<br>
|
||||||
本次清理,我們將移除 '''+ DATE +''' 以後沒有修改紀錄的資料夾、檔案<br>
|
本次清理,我們將移除 2024/02/01 以後沒有修改紀錄的資料夾、檔案<br>
|
||||||
以下是您家目錄中可能被移除的內容:<br>
|
以下是您家目錄中可能被移除的內容:<br>
|
||||||
<ul>
|
<ul>
|
||||||
{}
|
{}
|
||||||
@ -43,24 +43,3 @@ Email: unix_manager@cmlab.csie.ntu.edu.tw<br>
|
|||||||
</pre>
|
</pre>
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# leave msg for the user
|
|
||||||
MOVE_MSG = """
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
we have move out your files:
|
|
||||||
{}
|
|
||||||
|
|
||||||
If you have any problem, please contact us!
|
|
||||||
|
|
||||||
Best,
|
|
||||||
CMLab Unix Manager, Ting-Jun Wang
|
|
||||||
CMLab, National Taiwan University
|
|
||||||
Email: unix_manager@cmlab.csie.ntu.edu.tw
|
|
||||||
__ __ _
|
|
||||||
/ / / /__ (_)_ __
|
|
||||||
__ ___/ /_/ / _ \/ /\ \ /
|
|
||||||
/ |/ /\____/_//_/_//_\_\____ ____
|
|
||||||
/ /|_/ / _ `/ _ \/ _ `/ _ `/ -_) __/
|
|
||||||
/_/ /_/\_,_/_//_/\_,_/\_, /\__/_/
|
|
||||||
/___/
|
|
||||||
"""
|
|
||||||
|
|||||||
37
main.py
37
main.py
@ -32,12 +32,41 @@ CLEAN_PATH
|
|||||||
|
|
||||||
from src.mailer import Mailer
|
from src.mailer import Mailer
|
||||||
from src.cleaner import Cleaner
|
from src.cleaner import Cleaner
|
||||||
from src.users import *
|
|
||||||
import os
|
import os
|
||||||
from constant import GOOGLE_OWNER
|
from constant import KEEP_FILES, WHITE_LIST, DATE, GOOGLE_OWNER, MAIL_MESSAGE
|
||||||
|
|
||||||
GOOGLE_CODE = os.environ['GOOGLE_CODE']
|
GOOGLE_CODE = os.environ['GOOGLE_CODE']
|
||||||
|
|
||||||
|
def get_master():
|
||||||
|
ans = []
|
||||||
|
for year in os.listdir(f'/home/master/'):
|
||||||
|
if os.path.isdir(f'/home/master/{year}'):
|
||||||
|
for user in os.listdir(f'/home/master/{year}'):
|
||||||
|
ans.append(f'/home/master/{year}/{user}')
|
||||||
|
return ans
|
||||||
|
|
||||||
|
def get_phd():
|
||||||
|
ans = []
|
||||||
|
for dir_name in os.listdir(f'/home/phd/'):
|
||||||
|
if dir_name.isnumeric():
|
||||||
|
year = dir_name
|
||||||
|
for user in os.listdir(f'/home/phd/{year}'):
|
||||||
|
ans.append(f'/home/phd/{year}/{user}')
|
||||||
|
else:
|
||||||
|
ans.append(f'/home/phd/{dir_name}')
|
||||||
|
return ans
|
||||||
|
|
||||||
|
def get_ra():
|
||||||
|
ans = []
|
||||||
|
for user in os.listdir(f'/home/ra/'):
|
||||||
|
ans.append(f'/home/ra/{user}')
|
||||||
|
return ans
|
||||||
|
|
||||||
|
def get_extra():
|
||||||
|
ans = []
|
||||||
|
for user in os.listdir(f'/home/extra/'):
|
||||||
|
ans.append(f'/home/extra/{user}')
|
||||||
|
return ans
|
||||||
|
|
||||||
def main(clean_type, test=True, notify_stage=True):
|
def main(clean_type, test=True, notify_stage=True):
|
||||||
mailer = Mailer(GOOGLE_OWNER, GOOGLE_CODE)
|
mailer = Mailer(GOOGLE_OWNER, GOOGLE_CODE)
|
||||||
@ -52,8 +81,8 @@ def main(clean_type, test=True, notify_stage=True):
|
|||||||
# start clean
|
# start clean
|
||||||
for index, student_dir in enumerate(student_list):
|
for index, student_dir in enumerate(student_list):
|
||||||
print(f'{index+1}/{len(student_list)} {student_dir}')
|
print(f'{index+1}/{len(student_list)} {student_dir}')
|
||||||
cleaner = Cleaner(student_dir, mailer)
|
cleaner = Cleaner(student_dir, DATE, WHITE_LIST, KEEP_FILES, mailer, MAIL_MESSAGE)
|
||||||
cleaner.run(test=test, notify_stage=notify_stage)
|
cleaner.run(test=test, notify_stage=notify_stage)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main('home', test=True, notify_stage=True)
|
main('home', test=True, notify_stage=False)
|
||||||
|
|||||||
@ -1,11 +1,14 @@
|
|||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
from constant import WHITE_LIST, KEEP_FILES, DATE, MAIL_MSG, MOVE_MSG
|
|
||||||
|
|
||||||
class Cleaner():
|
class Cleaner():
|
||||||
def __init__(self, user_dir, mailer=None):
|
def __init__(self, user_dir, date, white_list, keep_files, mailer=None, mail_template=""):
|
||||||
self.user_dir = user_dir
|
self.user_dir = user_dir
|
||||||
|
self.date = date
|
||||||
|
self.white_list = white_list
|
||||||
|
self.keep_files = keep_files
|
||||||
self.mailer = mailer
|
self.mailer = mailer
|
||||||
|
self.mail_template = mail_template
|
||||||
|
|
||||||
def run(self, test=True, notify_stage=True):
|
def run(self, test=True, notify_stage=True):
|
||||||
'''
|
'''
|
||||||
@ -15,13 +18,13 @@ class Cleaner():
|
|||||||
notify_stage=0, test=0: 會刪除,不會寄信(刪除階段)
|
notify_stage=0, test=0: 會刪除,不會寄信(刪除階段)
|
||||||
'''
|
'''
|
||||||
username = self.user_dir.split('/')[-1]
|
username = self.user_dir.split('/')[-1]
|
||||||
if username in WHITE_LIST:
|
if username in self.white_list:
|
||||||
print(f' WHITE LIST: {username}')
|
print(f' WHITE LIST: {username}')
|
||||||
return
|
return
|
||||||
|
|
||||||
remove_objs = []
|
remove_objs = []
|
||||||
for obj in sorted(os.listdir(self.user_dir)):
|
for obj in sorted(os.listdir(self.user_dir)):
|
||||||
if obj in KEEP_FILES:
|
if obj in self.keep_files:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
obj = obj.replace(' ', '\ ')
|
obj = obj.replace(' ', '\ ')
|
||||||
@ -35,7 +38,7 @@ class Cleaner():
|
|||||||
# print $2: column 2 (get date)
|
# print $2: column 2 (get date)
|
||||||
modify_date = subprocess.getoutput(f"stat {self.user_dir}/{obj} | grep Modify | awk -F ' ' '{{print $2}}'" )
|
modify_date = subprocess.getoutput(f"stat {self.user_dir}/{obj} | grep Modify | awk -F ' ' '{{print $2}}'" )
|
||||||
|
|
||||||
if modify_date < DATE:
|
if modify_date < self.date:
|
||||||
remove_objs.append((obj, modify_date))
|
remove_objs.append((obj, modify_date))
|
||||||
print(f' {modify_date} {obj}')
|
print(f' {modify_date} {obj}')
|
||||||
|
|
||||||
@ -45,26 +48,12 @@ class Cleaner():
|
|||||||
elif not notify_stage and len(remove_objs) != 0:
|
elif not notify_stage and len(remove_objs) != 0:
|
||||||
# delete files
|
# delete files
|
||||||
remove_obj_names = [ name for name, date in remove_objs ]
|
remove_obj_names = [ name for name, date in remove_objs ]
|
||||||
|
command = 'rm -rf {}'.format(" ".join(remove_obj_names))
|
||||||
if test:
|
if test:
|
||||||
command = 'rm -rf {}'.format(" ".join(remove_obj_names))
|
|
||||||
print(f' we will run:\n {command}')
|
print(f' we will run:\n {command}')
|
||||||
else:
|
else:
|
||||||
if not os.path.isdir(f'/volume1/cmlabhome/home_backup/{username}'):
|
print('remove')
|
||||||
os.mkdir(f'/volume1/cmlabhome/home_backup/{username}')
|
# subprocess.getoutput(command)
|
||||||
|
|
||||||
msg = ""
|
|
||||||
for name, date in remove_objs:
|
|
||||||
if name[0] != '.' and 'conda' not in name:
|
|
||||||
command = f'mv {self.user_dir}/{name} /volume1/cmlabhome/home_backup/{username}/{name}'
|
|
||||||
else:
|
|
||||||
command = f'rm -rf {self.user_dir}/{name}'
|
|
||||||
print(command)
|
|
||||||
subprocess.getoutput(command)
|
|
||||||
msg += f" - {name}\n"
|
|
||||||
msg = MOVE_MSG.format(msg)
|
|
||||||
|
|
||||||
with open(f'{self.user_dir}/PLEASE_READ_ME', 'w') as fp:
|
|
||||||
fp.write(msg)
|
|
||||||
|
|
||||||
def notify(self, username, test, remove_objs):
|
def notify(self, username, test, remove_objs):
|
||||||
if self.mailer == None:
|
if self.mailer == None:
|
||||||
@ -79,6 +68,6 @@ class Cleaner():
|
|||||||
msg = ''
|
msg = ''
|
||||||
for obj, date in remove_objs:
|
for obj, date in remove_objs:
|
||||||
msg += f'<li>{date} - {obj}</li>'
|
msg += f'<li>{date} - {obj}</li>'
|
||||||
msg = MAIL_MSG.format(username, msg)
|
msg = self.mail_template.format(username, msg)
|
||||||
|
|
||||||
self.mailer.send(sender, receiver, subject, msg)
|
self.mailer.send(sender, receiver, subject, msg)
|
||||||
|
|||||||
36
src/users.py
36
src/users.py
@ -1,36 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
def get_master():
|
|
||||||
ans = []
|
|
||||||
for year in os.listdir(f'/volume2/m3/master/'):
|
|
||||||
if os.path.isdir(f'/volume2/m3/master/{year}'):
|
|
||||||
for user in os.listdir(f'/volume2/m3/master/{year}'):
|
|
||||||
ans.append(f'/volume2/m3/master/{year}/{user}')
|
|
||||||
for user in os.listdir(f'/volume2/m3/master08'):
|
|
||||||
ans.append(f'/volume2/m3/master08/{user}')
|
|
||||||
for user in os.listdir(f'/volume2/m3/master09'):
|
|
||||||
ans.append(f'/volume2/m3/master09/{user}')
|
|
||||||
return ans
|
|
||||||
|
|
||||||
def get_phd():
|
|
||||||
ans = []
|
|
||||||
for dir_name in os.listdir(f'/volume2/m3/phd/'):
|
|
||||||
if dir_name.isnumeric():
|
|
||||||
year = dir_name
|
|
||||||
for user in os.listdir(f'/volume2/m3/phd/{year}'):
|
|
||||||
ans.append(f'/volume2/m3/phd/{year}/{user}')
|
|
||||||
else:
|
|
||||||
ans.append(f'/volume2/m3/phd/{dir_name}')
|
|
||||||
return ans
|
|
||||||
|
|
||||||
def get_ra():
|
|
||||||
ans = []
|
|
||||||
for user in os.listdir(f'/volume2/m3/ra/'):
|
|
||||||
ans.append(f'/volume2/m3/ra/{user}')
|
|
||||||
return ans
|
|
||||||
|
|
||||||
def get_extra():
|
|
||||||
ans = []
|
|
||||||
for user in os.listdir(f'/volume2/m3/extra/'):
|
|
||||||
ans.append(f'/volume2/m3/extra/{user}')
|
|
||||||
return ans
|
|
||||||
Loading…
Reference in New Issue
Block a user