Browse Source

优化设备影子信息保存接口

zhangdongming 3 years ago
parent
commit
66ab04c313
1 changed files with 18 additions and 12 deletions
  1. 18 12
      Controller/ShadowController.py

+ 18 - 12
Controller/ShadowController.py

@@ -17,11 +17,12 @@
 # shadow.dvema.com
 # 设备影子更新
 import logging
+import threading
 import time
 
 import requests
 from django.http import JsonResponse
-from ratelimit.decorators import ratelimit
+
 from AnsjerPush.config import SERVER_TYPE
 from Model.models import Device_Info, UidSetModel, UID_Preview, VoicePromptModel, UID_Bucket, UidChannelSetModel, \
     AiService
@@ -57,7 +58,6 @@ def generate_utk(request):
 
 
 # 设备影子更新
-@ratelimit(key='ip', rate='1/1d', block=True)
 def update_device_shadow(request):
     request.encoding = 'utf-8'
     response = ResponseObject()
@@ -69,11 +69,23 @@ def update_device_shadow(request):
         return response.json(444)
     logger = logging.getLogger('info')
     try:
+        asy = threading.Thread(target=async_device_shadow,
+                               args=(request_dict, request))
+        asy.start()
+        return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+    except Exception as e:
+        logger.info('更新设备影子异常: {}'.format(repr(e)))
+        return JsonResponse(status=200, data={'code': 0, 'update_shadow_error': repr(e)})
+
+
+def async_device_shadow(request_dict, request):
+    try:
+        logger = logging.getLogger('info')
         etk = request_dict.get('etk', None)
         eto = ETkObject(etk)
         uid = eto.uid
         if not uid:
-            return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})
+            return False
         logger.info('使用配置: {}'.format(SERVER_TYPE))
         logger.info('data: {}'.format(request_dict.dict()))
 
@@ -119,8 +131,6 @@ def update_device_shadow(request):
             AiService.objects.filter(uid=uid, use_status=1).update(detect_status=0, detect_group='')
 
             logger.info('{}重置成功'.format(uid))
-
-        # return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
         ucode = request_dict.get('ucode', None)
         version = request_dict.get('version', None)
         p2p_region = request_dict.get('p2p_region', None)
@@ -131,7 +141,6 @@ def update_device_shadow(request):
         cloud_vod = request_dict.get('cloud_vod', None)
         push_status = request_dict.get('push_status', None)
         pwd = request_dict.get('pwd', None)
-        resetTime = request_dict.get('resetTime', None)
         is_alexa = request_dict.get('is_alexa', None)
         is_human = request_dict.get('is_human', None)
         is_custom_voice = request_dict.get('is_custom', None)
@@ -183,8 +192,6 @@ def update_device_shadow(request):
             if is_alexa and us_qs[0].is_alexa == 0:
                 qs_dict['is_alexa'] = is_alexa
             us_qs.update(**qs_dict)
-            # 如果推送状态开启,返回推送url
-            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
         # 新增
         else:
             if is_alexa:
@@ -192,8 +199,7 @@ def update_device_shadow(request):
             qs_dict['uid'] = uid
             qs_dict['addTime'] = nowTime
             UidSetModel.objects.create(**qs_dict)
-            # 如果推送状态开启,返回推送url
-            return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
+        logger.info('***设备影子保存成功{}'.format(uid))
     except Exception as e:
-        logger.info('更新设备影子异常: {}'.format(repr(e)))
-        return JsonResponse(status=500, data={'update_shadow_error': repr(e)})
+        print(repr(e))
+        print('异步保存设备影子信息报错,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))