pull/382/head
midoks 2 years ago
parent c1f402b278
commit d44526004f
  1. 143
      plugins/migration_api/index.py
  2. 17
      plugins/migration_api/js/app.js

@ -70,21 +70,99 @@ class classApi:
except Exception as e:
return result
# 取面板日志
def getLogs(self):
# 拼接URL地址
url = self.__MW_PANEL + '/firewall/get_log_list'
def send_file(self,):
pass
def save(self):
# 保存迁移配置
mw.writeFile(self._INFO_FILE, json.dumps(self._SYNC_INFO))
def state(self, stype, index, state, error=''):
# 设置状态
self._SYNC_INFO[stype][index]['state'] = state
self._SYNC_INFO[stype][index]['error'] = error
if self._SYNC_INFO[stype][index]['state'] != 1:
self._SYNC_INFO['speed'] += 1
self.save()
def format_domain(self, domain):
# 格式化域名
domains = []
for d in domain:
domains.append("{}:{}".format(d['name'], d['port']))
return domains
def create_site(self, siteInfo, index):
pdata = {}
domains = self.format_domain(siteInfo['domain'])
pdata['webinfo'] = json.dumps(
{"domain": siteInfo['name'], "domainlist": domains, "count": len(domains)})
pdata['ps'] = siteInfo['ps']
pdata['path'] = siteInfo['path']
pdata['type'] = 'PHP'
pdata['version'] = '00'
pdata['type_id'] = '0'
pdata['port'] = siteInfo['port']
if not pdata['port']:
pdata['port'] = 80
result = self.send('/site/add', pdata)
if not result['status']:
err_msg = '站点[{}]创建失败, {}'.format(siteInfo['name'], result['msg'])
# self.state('sites', index, -1, err_msg)
# self.error(err_msg)
return False
return True
def send_site(self, siteInfo, index):
if not os.path.exists(siteInfo['path']):
err_msg = "网站根目录[{}]不存在,跳过!".format(siteInfo['path'])
self.state('sites', index, -1, err_msg)
self.error(err_msg)
return False
if not self.create_site(siteInfo, index):
return False
def sync_site(self):
data = getCfgData()
sites = data['ready']['sites']
for i in range(len(sites)):
siteInfo = mw.M('sites').where('name=?', (sites[i],)).field(
'id,name,path,ps,status,edate,addtime').find()
if not siteInfo:
err_msg = "指定站点[{}]不存在!".format(sites[i])
# self.state('sites', i, -1, err_msg)
# self.error(err_msg)
continue
pid = siteInfo['id']
# 准备POST数据
post_data = self.__get_key_data() # 取签名
post_data['limit'] = 10
post_data['p'] = '1'
siteInfo['port'] = mw.M('domain').where(
'pid=? and name=?', (pid, sites[i],)).getField('port')
siteInfo['domain'] = mw.M('domain').where(
'pid=? and name!=?', (pid, sites[i])).field('name,port').select()
# 请求面板接口
result = self.__http_post_cookie(url, post_data)
print(sites[i])
print("dd:", mw.M('domain').where(
'pid=? and name!=?', (pid, sites[i])).field('name,port').select())
# 解析JSON数据
return json.loads(result)
if self.send_site(siteInfo, i):
self.state('sites', i, 2)
write_log("=" * 50)
print(sites)
def run(self):
# 开始迁移
# mw.CheckMyCnf()
# self.sync_other()
self.sync_site()
# self.sync_database()
# self.sync_ftp()
# self.sync_path()
# self.write_speed('action', 'True')
write_log('|-所有项目迁移完成!')
def getPluginName():
@ -259,7 +337,7 @@ def stepThree():
def getPid():
result = mw.execShell(
"ps aux|grep index.py|grep -v grep|awk '{print $2}'|xargs")[0].strip()
"ps aux|grep plugins/migration_api/index.py|grep -v grep|awk '{print $2}'|xargs")[0].strip()
if not result:
import psutil
for pid in psutil.pids():
@ -272,14 +350,25 @@ def getPid():
cmd = p.cmdline()
if len(cmd) < 2:
continue
if cmd[1].find('psync_api_main.py') != -1:
if cmd[1].find('plugins/migration_api/index.py') != -1:
return pid
return None
def write_log(log_str):
log_file = getServerDir() + '/sync.log'
f = open(log_file, 'ab+')
log_str += "\n"
f.write(log_str.encode('utf-8'))
f.close()
return True
def bgProcessRun():
time.sleep(10)
return '123123'
data = getCfgData()
api = classApi(data['url'], data['token'])
api.run()
return ''
def bgProcess():
@ -329,26 +418,24 @@ def get_speed_data():
return json.loads(data)
def get_speed(args):
def getSpeed():
# 取迁移进度
if not os.path.exists(self._SPEED_FILE):
return public.returnMsg(False, '正在准备..')
path = getServerDir() + '/config/speed.json'
if not os.path.exists(path):
return mw.returnJson(False, '正在准备..')
try:
speed_info = json.loads(mw.readFile(self._SPEED_FILE))
speed_info = json.loads(mw.readFile(path))
except:
return False
return mw.returnJson(False, '正在准备..')
sync_info = self.get_sync_info(None)
speed_info['all_total'] = sync_info['total']
speed_info['all_speed'] = sync_info['speed']
speed_info['total_time'] = speed_info['end_time'] - speed_info['time']
speed_info['total_time'] = str(int(speed_info[
'total_time'] // 60)) + "" + str(int(speed_info['total_time'] % 60)) + ""
log_file = '/www/server/panel/logs/psync.log'
speed_info['log'] = public.ExecShell(
"tail -n 10 {}".format(log_file))[0]
# if len(speed_info['log']) > 20480 and speed_info['action'] != 'True':
# return False
return speed_info
log_file = getServerDir() + '/migration_api/sync.log'
speed_info['log'] = mw.execShell("tail -n 10 {}".format(log_file))[0]
return mw.returnJson(True, 'ok', speed_info)
if __name__ == "__main__":
func = sys.argv[1]
@ -370,5 +457,7 @@ if __name__ == "__main__":
print(stepFour())
elif func == 'bg_process':
print(bgProcessRun())
elif func == 'get_speed':
print(getSpeed())
else:
print('error')

@ -188,7 +188,20 @@ function initStep3(){
}
function renderMer
function renderMigrationProgress(){
maPost('get_speed',{}, function(rdata){
var rdata = $.parseJSON(rdata.data);
console.log('sss:',rdata);
if (rdata.status){
} else{
layer.msg(rdata.msg,{icon:1});
}
});
}
function initStep4(){
@ -232,6 +245,8 @@ function initStep4(){
$('.psync_data').hide();
$('.psync_migrate').html(progress);
$('.psync_migrate').show();
renderMigrationProgress();
});
}

Loading…
Cancel
Save