|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding:utf-8 -*-
|
|
|
|
# project: 4月
|
|
|
|
# author: liuyu
|
|
|
|
# date: 2020/4/7
|
|
|
|
import datetime
|
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
import random
|
|
|
|
import time
|
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
|
|
|
|
from django.template import loader
|
|
|
|
|
|
|
|
from common.core.sysconfig import Config
|
|
|
|
from common.notify.notify import check_developer_status_notify
|
|
|
|
from fir_ser.settings import SUPER_SIGN_ROOT, SYNC_CACHE_TO_DATABASE
|
|
|
|
from xsign.models import UserInfo, AppIOSDeveloperInfo, APPSuperSignUsedInfo, AppleSignMessage
|
|
|
|
from xsign.utils.modelutils import get_developer_devices, add_sign_message
|
|
|
|
from xsign.utils.supersignutils import IosUtils
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def auto_delete_ios_mobile_tmp_file():
|
|
|
|
mobile_config_tmp_dir = os.path.join(SUPER_SIGN_ROOT, 'tmp', 'mobile_config')
|
|
|
|
for root, dirs, files in os.walk(mobile_config_tmp_dir, topdown=False):
|
|
|
|
now_time = time.time()
|
|
|
|
for name in files:
|
|
|
|
file_path = os.path.join(root, name)
|
|
|
|
st_mtime = os.stat(file_path).st_mtime
|
|
|
|
if now_time - st_mtime > SYNC_CACHE_TO_DATABASE.get('clean_local_tmp_file_from_mtime', 30 * 60):
|
|
|
|
try:
|
|
|
|
os.remove(file_path)
|
|
|
|
except Exception as e:
|
|
|
|
logger.error(f"auto_delete_tmp_file {file_path} Failed . Exception {e}")
|
|
|
|
|
|
|
|
|
|
|
|
def auto_check_ios_developer_active():
|
|
|
|
error_issuer_id = {}
|
|
|
|
|
|
|
|
def check_active_task(developer_obj):
|
|
|
|
time.sleep(random.randint(1, 5))
|
|
|
|
user_obj = developer_obj.user_id
|
|
|
|
err_issuer_id = error_issuer_id.get(user_obj.uid, [])
|
|
|
|
if user_obj.supersign_active:
|
|
|
|
status, result = IosUtils.active_developer(developer_obj, False)
|
|
|
|
msg = f"auto_check_ios_developer_active user:{user_obj} ios.developer:{developer_obj} status:{status} result:{result}"
|
|
|
|
if not status:
|
|
|
|
add_sign_message(user_obj, developer_obj, None, '开发者状态自动检测', result.get('return_info'), False)
|
|
|
|
err_issuer_id.append(developer_obj)
|
|
|
|
error_issuer_id[user_obj.uid] = list(set(err_issuer_id))
|
|
|
|
|
|
|
|
if status:
|
|
|
|
IosUtils.get_device_from_developer(developer_obj)
|
|
|
|
logger.info(msg)
|
|
|
|
else:
|
|
|
|
logger.error(msg)
|
|
|
|
|
|
|
|
ios_developer_queryset = AppIOSDeveloperInfo.objects.filter(status__in=Config.DEVELOPER_AUTO_CHECK_STATUS,
|
|
|
|
auto_check=True, user_id__is_active=True,
|
|
|
|
user_id__supersign_active=True)
|
|
|
|
pools = ThreadPoolExecutor(10)
|
|
|
|
|
|
|
|
for ios_developer_obj in ios_developer_queryset:
|
|
|
|
pools.submit(check_active_task, ios_developer_obj)
|
|
|
|
pools.shutdown()
|
|
|
|
|
|
|
|
for uid, developer_obj_list in error_issuer_id.items():
|
|
|
|
userinfo = UserInfo.objects.filter(uid=uid).first()
|
|
|
|
developer_used_info = get_developer_devices(AppIOSDeveloperInfo.objects.filter(user_id=userinfo))
|
|
|
|
|
|
|
|
end_time = datetime.datetime.now().date()
|
|
|
|
start_time = end_time - datetime.timedelta(days=1)
|
|
|
|
yesterday_used_number = APPSuperSignUsedInfo.objects.filter(developerid__user_id=userinfo,
|
|
|
|
created_time__range=[start_time, end_time]).count()
|
|
|
|
content = loader.render_to_string('check_developer.html',
|
|
|
|
{
|
|
|
|
'username': userinfo.first_name,
|
|
|
|
'developer_obj_list': developer_obj_list,
|
|
|
|
'developer_used_info': developer_used_info,
|
|
|
|
'yesterday_used_number': yesterday_used_number,
|
|
|
|
})
|
|
|
|
# send_ios_developer_active_status(userinfo, content)
|
|
|
|
check_developer_status_notify(userinfo, developer_obj_list, content)
|
|
|
|
|
|
|
|
|
|
|
|
def auto_clean_sign_log(clean_day=30 * 6):
|
|
|
|
clean_time = datetime.datetime.now() - datetime.timedelta(days=clean_day)
|
|
|
|
return AppleSignMessage.objects.filter(operate_time__lt=clean_time).delete()
|