提交指定客户端版本第一版

main
RogerWork 5 days ago
parent b56dc29a44
commit 333e411743
  1. 2
      update/serializers.py
  2. 1
      update/urls.py
  3. 54
      update/utils/client_util_custom.py
  4. 18
      update/views.py

@ -31,7 +31,7 @@ class ClientReleaseSerializer(serializers.ModelSerializer):
model = ClientRelease
fields = (
'id', 'origin_name', 'client_ver', 'main_ver', 'sub_ver', 'ver_id', 'upload_name', 'client_type',
'is_delete', 'update_time')
'is_delete', 'update_time', 'deploy_id', 'is_cached', 'file_name', 'md5')
class UpdateCommandSerializer(serializers.ModelSerializer):

@ -23,6 +23,7 @@ router = DefaultRouter()
router.register('cinema', views.CinemaViewSet, 'cinema')
router.register('user', views.CinemaUserViewSet, 'cinema_user')
router.register('update_alter', views.UpdateAlterViewSet, 'update_alter')
router.register('client_release', views.ClientReleaseViewSet, 'client_release')
urlpatterns = [
# path('cinema/search/', views.CinemaSearchAPIView.as_view()),

@ -120,3 +120,57 @@ class ClientUtilCustom:
local_file.close()
print(self.client_data)
# 传输客户端的方法
def upload(self, cine_ip, origin, target):
print('upload', cine_ip, origin, target)
# 创建Transport客户端
trans = paramiko.Transport((cine_ip, 22))
# 使用密码连接服务器
trans.connect(username='root', password='cine123456')
# 创建SFTP客户端
sftp = paramiko.SFTPClient.from_transport(trans)
# 上传文件 参数(本地文件路径, 远程文件路径)
sftp.put(
os.path.join(self.local_path, origin),
f"/data0/cine/resource/upload/client/{target}")
# 关闭客户端
print(f'完成上传,路径/data0/cine/resource/upload/client/{target}')
trans.close()
def upload_client(self, cinema_ip, client_ver, server_release):
print('upload_client', cinema_ip, client_ver, server_release)
# 上传操作
print(f'开始上传操作, 目标主机 {cinema_ip}, 客户端版本 {client_ver}')
release_ver = server_release[8:11] if server_release.startswith('2') else server_release[7:10]
if client_ver is None or client_ver == '':
print('1'*100)
client = ClientRelease.objects.filter(Q(ver_id=release_ver) & Q(is_cached=True)).order_by('-id').first()
else:
print('2' * 100)
print(client_ver[7:10])
client = ClientRelease.objects.filter(Q(client_ver=client_ver) & Q(is_cached=True)).order_by('-id').first()
print("client", client)
print('最终上传版本:', client.file_name, client.upload_name)
if not client:
return False
self.upload(cinema_ip, client.file_name, client.upload_name)
# 更新数据库
cine = Cinema.objects.filter(ip=cinema_ip).first()
db_config = {
'host': cinema_ip,
'user': cine.db_user,
'password': cine.db_pwd,
'port': 3306,
'database': 'cine'
}
db_conn = pymysql.Connect(**db_config)
db_cursor = db_conn.cursor(cursor=DictCursor)
db_cursor.execute('UPDATE cinema_version SET client_version = %s WHERE 1=1;', (client.client_ver,))
db_conn.commit()
db_cursor.close()
db_conn.close()
return client.origin_name

@ -53,13 +53,13 @@ class CinemaViewSet(CacheResponseMixin, viewsets.ModelViewSet):
# filter_fields = ('ip',)
filterset_fields = ('ip',)
GetVersion().main_process() # 修改数据model时需要注释调
# client_custom = ClientUtilCustom()
# client_custom.sync_client_db()
ClientUtilCustom().sync_client_db()
@action(methods=['get'], detail=False)
@method_decorator(cache_page(60 * 1))
def refresh(self, request, *args, **kwargs):
GetVersion().main_process()
ClientUtilCustom().sync_client_db()
queryset = Cinema.objects.filter(is_delete=False).all().order_by('ip')
serializer = self.get_serializer(instance=queryset, many=True)
return Response(serializer.data)
@ -74,6 +74,9 @@ class UpdateAlterViewSet(CacheResponseMixin, viewsets.ModelViewSet):
queryset = UpdateAlter.objects.all()
serializer_class = UpdateAlterSerializer
class ClientReleaseViewSet(CacheResponseMixin, viewsets.ModelViewSet):
queryset = ClientRelease.objects.filter(is_cached=True).order_by('-id').all()
serializer_class = ClientReleaseSerializer
# class CinemaSearchAPIView(APIView, CacheResponseMixin):
# @method_decorator(cache_page(60 * 5))
@ -111,6 +114,7 @@ def get_git_version(request):
def update_cine(request):
req = request.GET.dict()
cinema_ip = req.get('ip')
client_ver = req.get('client_ver')
print('-'*100)
print(f'开始更新 {cinema_ip}')
@ -340,11 +344,15 @@ def update_cine(request):
try:
update_status['client']['result'] = 'running'
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
client_release = ClientUtil()
client_name = client_release.client_process(cinema_ip, short_release)
# client_release = ClientUtil()
# client_name = client_release.client_process(cinema_ip, short_release)
client_custom = ClientUtilCustom()
if client_custom.upload_client(cinema_ip, client_ver, short_release):
update_status['client']['result'] = 'success'
update_status['client']['msg'] = f'客户端上传成功: {client_name}'
update_status['client']['msg'] = f'客户端上传成功: {client_ver}'
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
else:
raise ValueError(f'找不到对应的客户端:{client_ver}')
except Exception as e:
print('第七步:传输客户端异常', e)
update_status['result'] = 'fail'

Loading…
Cancel
Save