diff --git a/update/consumers.py b/update/consumers.py
index 1b17e1e..1fe251b 100644
--- a/update/consumers.py
+++ b/update/consumers.py
@@ -1,6 +1,7 @@
import json
from update.views import get_cinema_update_status
from channels.generic.websocket import WebsocketConsumer
+from django_redis import get_redis_connection
class UpdateConsumer(WebsocketConsumer):
@@ -9,22 +10,29 @@ class UpdateConsumer(WebsocketConsumer):
self.send('你已经连接成功')
def receive(self, text_data=None, bytes_data=None):
+
+ redis_conn = get_redis_connection()
+
+
if text_data is None:
self.send('你发了啥')
else:
data = json.loads(text_data)
- cinema_update_status = get_cinema_update_status()
+ # cinema_update_status = get_cinema_update_status()
if data.get('msg', False):
if data['msg'] == 'ping':
self.send(json.dumps({'msg': 'pong'}))
if data.get('finish', False):
ip = data['finish']
- if cinema_update_status.get(ip):
- del cinema_update_status[ip]
+ redis_key = f'cinema_update_status_{ip}'
+ if redis_conn.exists(redis_key):
+ redis_conn.delete(redis_key)
print(cinema_update_status.get(ip, None))
if data.get('ip', False):
ip = data['ip']
- print('ws发送消息前', cinema_update_status)
- self.send(json.dumps({'status': {'ip': ip, 'result': cinema_update_status.get(ip, None)}}))
+ redis_key = f'cinema_update_status_{ip}'
+ # print('ws发送消息前', cinema_update_status)
+ data = json.loads(redis_conn.get(redis_key))
+ self.send(json.dumps({'status': {'ip': ip, 'result': data}}))
else:
self.send(text_data)
diff --git a/update/views.py b/update/views.py
index 87e22c1..2e345df 100644
--- a/update/views.py
+++ b/update/views.py
@@ -26,7 +26,7 @@ from update.utils.client_util import ClientUtil
# from consumers import UpdateConsumer
-cinema_update_status = dict()
+# cinema_update_status = dict()
# CacheResponseMixin 一定要放第一位
@@ -114,9 +114,6 @@ def update_cine(request):
cmd_dict[cmd['process']] = [cmd['id']]
print(cmd_dict)
- # 初始化redis
- redis_conn = get_redis_connection()
-
# 增加状态
update_status = {
'git': {'result': '', 'msg': ''},
@@ -127,10 +124,23 @@ def update_cine(request):
'client': {'result': '', 'msg': ''},
}
- cinema_update_status[cinema_ip] = copy.deepcopy(update_status)
+ # cinema_update_status[cinema_ip] = copy.deepcopy(update_status)
+
+ # 初始化redis
+ redis_conn = get_redis_connection()
+ redis_key = f'cinema_update_status_{cinema_ip}'
+
+ if redis_conn.exists(redis_key):
+ # update_status = copy.deepcopy(json.loads(redis_conn.get(redis_key)))
+ print('redis存在key', redis_key)
+ return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': '该影院正在升级中,请稍后再试!'})
+ else:
+ redis_conn.set(redis_key, json.dumps(update_status), 10*60)
+
+ print('update_status', update_status)
# redis_conn.set(f'cinema_update_status_{cinema_ip}', json.dumps(update_status), 10*60)
- print("ws调试", cinema_update_status)
+ # print("ws调试", cinema_update_status)
short_release = req.get('version')
cmd_list = json.loads(req.get('cmd'))
@@ -143,32 +153,36 @@ def update_cine(request):
# 获取并写入cine.sql
print('获取并写入cine.sql')
try:
- cinema_update_status[cinema_ip]['git']['result'] = 'running'
+ update_status['git']['result'] = 'running'
git_util = GitUtil(short_release)
git_output = git_util.handle_create_cine()
- cinema_update_status[cinema_ip]['git']['result'] = 'success'
- cinema_update_status[cinema_ip]['git']['msg'] = git_output
+ update_status['git']['result'] = 'success'
+ update_status['git']['msg'] = git_output
+ redis_conn.set(redis_key, json.dumps(update_status), 5*60)
except Exception as e:
print('git', e)
- cinema_update_status[cinema_ip]['git']['result'] = 'fail'
- cinema_update_status[cinema_ip]['git']['msg'] = str(e)
+ update_status['git']['result'] = 'fail'
+ update_status['git']['msg'] = str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
# 执行setup
print('执行setup')
try:
- cinema_update_status[cinema_ip]['setup']['result'] = 'running'
+ update_status['setup']['result'] = 'running'
setup_list = list(set(cmd_list) & set(cmd_dict['setup']))
update_cmd = UpdateCommandUtil()
result, setup_output = update_cmd.exec_cmd_by_type(cinema_ip, 'setup', setup_list, short_release)
if result is False:
raise Exception(setup_output)
- cinema_update_status[cinema_ip]['setup']['result'] = 'success'
- cinema_update_status[cinema_ip]['setup']['msg'] = setup_output
+ update_status['setup']['result'] = 'success'
+ update_status['setup']['msg'] = setup_output
+ redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
except Exception as e:
print('setup', e)
- cinema_update_status[cinema_ip]['setup']['result'] = 'fail'
- cinema_update_status[cinema_ip]['setup']['msg'] = str(e)
+ update_status['setup']['result'] = 'fail'
+ update_status['setup']['msg'] = str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
# 数据库对比
@@ -176,30 +190,34 @@ def update_cine(request):
if len(sql_list) > 0:
print('数据库对比')
try:
- cinema_update_status[cinema_ip]['sql']['result'] = 'running'
+ update_status['sql']['result'] = 'running'
db_compare = DbCompare(cinema_ip, short_release)
sql_output = db_compare.exec_diff_sql()
- cinema_update_status[cinema_ip]['sql']['result'] = 'success'
- cinema_update_status[cinema_ip]['sql']['msg'] = sql_output
+ update_status['sql']['result'] = 'success'
+ update_status['sql']['msg'] = sql_output
+ redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
except Exception as e:
print('sql', e)
- cinema_update_status[cinema_ip]['sql']['result'] = 'fail'
- cinema_update_status[cinema_ip]['sql']['msg'] = str(e)
+ update_status['sql']['result'] = 'fail'
+ update_status['sql']['msg'] = str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
# 修改设置
print('执行config(teardown前)')
try:
- cinema_update_status[cinema_ip]['config']['result'] = 'running'
+ update_status['config']['result'] = 'running'
config_list = list(set(cmd_list) & set(cmd_dict['config']))
update_config = UpdateConfigUtil(cinema_ip, config_list, True)
config_before_output = update_config.exec_config()
- cinema_update_status[cinema_ip]['config']['result'] = 'success'
- cinema_update_status[cinema_ip]['config']['msg'] = config_before_output
+ update_status['config']['result'] = 'success'
+ update_status['config']['msg'] = config_before_output
+ redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
except Exception as e:
print('config', e)
- cinema_update_status[cinema_ip]['config']['result'] = 'fail'
- cinema_update_status[cinema_ip]['config']['msg'] = str(e)
+ update_status['config']['result'] = 'fail'
+ update_status['config']['msg'] = str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
# 执行teardown
@@ -207,35 +225,38 @@ def update_cine(request):
if len(teardown_list) > 0:
print('执行teardown')
try:
- cinema_update_status[cinema_ip]['teardown']['result'] = 'running'
+ update_status['teardown']['result'] = 'running'
update_cmd = UpdateCommandUtil()
result, teardown_output = update_cmd.exec_cmd_by_type(cinema_ip, 'teardown', teardown_list, short_release)
if result is False:
raise Exception(teardown_output)
- cinema_update_status[cinema_ip]['teardown']['result'] = 'success'
- cinema_update_status[cinema_ip]['teardown']['msg'] = '执行升级脚本:执行成功'
+ update_status['teardown']['result'] = 'success'
+ update_status['teardown']['msg'] = '执行升级脚本:执行成功'
+ redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
except Exception as e:
print('teardown', e)
- cinema_update_status[cinema_ip]['teardown']['result'] = 'fail'
- cinema_update_status[cinema_ip]['teardown']['msg'] = str(e)
+ update_status['teardown']['result'] = 'fail'
+ update_status['teardown']['msg'] = str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
# 修改设置
print('执行config(teardown后)')
try:
- cinema_update_status[cinema_ip]['config']['result'] = 'running'
+ update_status['config']['result'] = 'running'
config_list = list(set(cmd_list) & set(cmd_dict['config']))
update_config = UpdateConfigUtil(cinema_ip, config_list, False)
config_after_output = update_config.exec_config()
- cinema_update_status[cinema_ip]['config']['result'] = 'success'
- cinema_update_status[cinema_ip]['config']['msg'] = config_before_output + '
' + config_after_output
+ update_status['config']['result'] = 'success'
+ update_status['config']['msg'] = config_before_output + '
' + config_after_output
+ redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
except Exception as e:
print('config', e)
- cinema_update_status[cinema_ip]['config']['result'] = 'fail'
- cinema_update_status[cinema_ip]['config']['msg'] = config_before_output + '
' + str(e)
+ update_status['config']['result'] = 'fail'
+ update_status['config']['msg'] = config_before_output + '
' + str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
- d = redis_conn.get(f'cinema_update_status_{cinema_ip}')
- print("redis", d)
+
# 传输客户端
client_list = list(set(cmd_list) & set(cmd_dict['client']))
if len(client_list) > 0:
@@ -243,15 +264,18 @@ def update_cine(request):
try:
client_release = ClientUtil()
client_release.client_process(cinema_ip, short_release)
- cinema_update_status[cinema_ip]['client']['result'] = 'success'
- cinema_update_status[cinema_ip]['client']['msg'] = '客户端上传成功'
+ update_status['client']['result'] = 'success'
+ update_status['client']['msg'] = '客户端上传成功'
+ redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
except Exception as e:
print('client', e)
- cinema_update_status[cinema_ip]['client']['result'] = 'fail'
- cinema_update_status[cinema_ip]['client']['msg'] = str(e)
+ update_status['client']['result'] = 'fail'
+ update_status['client']['msg'] = str(e)
+ # redis_conn.delete(redis_key)
return JsonResponse({'result': 'fail', 'ip': cinema_ip, 'msg': str(e)})
- print(cinema_update_status[cinema_ip])
+ print('update_status', update_status)
+ print('redis_get', redis_conn.get(redis_key))
return JsonResponse({'result': 'success', 'ip': cinema_ip, 'msg': ''})
@@ -261,11 +285,6 @@ def write_git_version_to_db(request):
git_util.set_release_to_db()
return JsonResponse({'result': 'success'})
-
-def get_cinema_update_status():
- print('return', cinema_update_status)
- return cinema_update_status
-
#
#
# def write_cine_sql(request):