90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
# Create your tasks here
 | 
						|
from __future__ import absolute_import, unicode_literals
 | 
						|
from datetime import timedelta
 | 
						|
from apps.ops.models import DrfRequestLog
 | 
						|
from apps.utils.tasks import CustomTask
 | 
						|
from celery import shared_task
 | 
						|
from django.utils import timezone
 | 
						|
from django.conf import settings
 | 
						|
import os
 | 
						|
 | 
						|
import subprocess
 | 
						|
from server.settings import DATABASES, BACKUP_PATH, SH_PATH, SD_PWD
 | 
						|
 | 
						|
 | 
						|
@shared_task
 | 
						|
def backup_database():
 | 
						|
    """
 | 
						|
    备份数据库
 | 
						|
    """
 | 
						|
    import datetime
 | 
						|
    name = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
 | 
						|
    command = 'echo "{}" | sudo -S pg_dump "user={} password={} dbname={}" > {}/bak_{}.sql'.format(
 | 
						|
        SD_PWD,
 | 
						|
        DATABASES['default']['USER'],
 | 
						|
        DATABASES['default']['PASSWORD'],
 | 
						|
        DATABASES['default']['NAME'],
 | 
						|
        BACKUP_PATH + '/database',
 | 
						|
        name)
 | 
						|
    completed = subprocess.run(command, shell=True, capture_output=True, text=True)
 | 
						|
    if completed.returncode != 0:
 | 
						|
        return completed.stderr
 | 
						|
 | 
						|
 | 
						|
@shared_task
 | 
						|
def reload_server_git():
 | 
						|
    command = 'bash {}/git_server.sh'.format(SH_PATH)
 | 
						|
    completed = subprocess.run(command, shell=True, capture_output=True, text=True)
 | 
						|
    if completed.returncode != 0:
 | 
						|
        return completed.stderr
 | 
						|
 | 
						|
 | 
						|
@shared_task
 | 
						|
def reload_web_git():
 | 
						|
    command = 'bash {}/git_web.sh'.format(SH_PATH)
 | 
						|
    completed = subprocess.run(command, shell=True, capture_output=True, text=True)
 | 
						|
    if completed.returncode != 0:
 | 
						|
        return completed.stderr
 | 
						|
 | 
						|
 | 
						|
@shared_task
 | 
						|
def reload_server_only():
 | 
						|
    command = 'echo "{}" | sudo -S supervisorctl reload'.format(SD_PWD)
 | 
						|
    completed = subprocess.run(command, shell=True, capture_output=True, text=True)
 | 
						|
    return completed
 | 
						|
 | 
						|
 | 
						|
@shared_task
 | 
						|
def backup_media():
 | 
						|
    command = 'bash {}/backup_media.sh'.format(SH_PATH)
 | 
						|
    completed = subprocess.run(command, shell=True, capture_output=True, text=True)
 | 
						|
    if completed.returncode != 0:
 | 
						|
        return completed.stderr
 | 
						|
 | 
						|
 | 
						|
@shared_task(base=CustomTask)
 | 
						|
def clear_drf_log(days: int = 7):
 | 
						|
    """清除N天前的日志记录,默认七天
 | 
						|
 | 
						|
    清除N天前的日志记录
 | 
						|
    """
 | 
						|
    now = timezone.now()
 | 
						|
    days7_ago = now - timedelta(days=days)
 | 
						|
    DrfRequestLog.objects.filter(create_time__lte=days7_ago).delete()
 | 
						|
 | 
						|
 | 
						|
@shared_task(base=CustomTask)
 | 
						|
def clear_dbbackup(num: int = 7):
 | 
						|
    """
 | 
						|
    清除N条前的数据库备份记录,默认七条
 | 
						|
 | 
						|
    清除N条前的数据库备份记录
 | 
						|
    """
 | 
						|
    from apps.ops.views import get_file_list
 | 
						|
    backpath = settings.BACKUP_PATH + '/database'
 | 
						|
    files = get_file_list(backpath)
 | 
						|
    files_remove_list = files[num:]
 | 
						|
    for f in files_remove_list:
 | 
						|
        filepath = os.path.join(backpath, f)
 | 
						|
        os.remove(filepath)
 |