LogManagementController.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import boto3
  4. import botocore
  5. import requests
  6. from django.db.models import Q
  7. from django.views.generic.base import View
  8. from Object.IPWeatherObject import IPQuery
  9. from Object.ResponseObject import ResponseObject
  10. from Object.TokenObject import TokenObject
  11. from Service.CommonService import CommonService
  12. from Model.models import Device_Info, RequestRecordModel, iotdeviceInfoModel, Access_Log, DeviceLogModel, LogModel, \
  13. AppLogModel, AppScannedSerial, StsFrequency, DeviceDomainRegionModel, IPAddr, CountryModel, RegionModel, \
  14. AbnormalEvent, DeviceTypeModel, AbnormalEventCode
  15. from Ansjer.config import REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, LOG_BUCKET
  16. class LogManagementView(View):
  17. def get(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. operation = kwargs.get('operation')
  20. return self.validation(request.GET, request, operation)
  21. def post(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. return self.validation(request.POST, request, operation)
  25. def validation(self, request_dict, request, operation):
  26. language = request_dict.get('language', 'en')
  27. response = ResponseObject(language, 'pc')
  28. if operation == '??':
  29. return 0
  30. else:
  31. tko = TokenObject(
  32. request.META.get('HTTP_AUTHORIZATION'),
  33. returntpye='pc')
  34. # if tko.code != 0:
  35. # return response.json(tko.code)
  36. response.lang = tko.lang
  37. userID = tko.userID
  38. if operation == 'getRequestList':
  39. return self.getRequestList(request_dict, response)
  40. elif operation == 'getDeviceIotInfoList':
  41. return self.getDeviceIotInfoList(request_dict, response)
  42. elif operation == 'requestPublishMqtt':
  43. return self.requestPublishMqtt(request_dict, response)
  44. elif operation == 'getAccessLogList':
  45. return self.getAccessLogList(request_dict, response)
  46. elif operation == 'getDeviceLogList':
  47. return self.getDeviceLogList(request_dict, response)
  48. # 操作日志
  49. elif operation == 'getOperationLogList':
  50. return self.getOperationLogList(request_dict, response)
  51. elif operation == 'getAppLogList': # 获取app日志
  52. return self.getAppLogList(request_dict, response)
  53. elif operation == 'getScanLog': # 获取扫码日志
  54. return self.getScanLog(request_dict, response)
  55. elif operation == 'getAlarmLog': # 获取警报日志
  56. return self.getAlarmLog(request_dict, response)
  57. elif operation == 'getDomainLog': # 获取域名日志
  58. return self.getDomainLog(request_dict, response)
  59. elif operation == 'getDomainScanLog': # 获取域名扫码日志
  60. return self.getDomainScanLog(request_dict, response)
  61. elif operation == 'getDeviceAbnormalEvent': # 获取设备异常事件
  62. return self.getDeviceAbnormalEvent(request_dict, response)
  63. else:
  64. return response.json(414)
  65. def getRequestList(self, request_dict, response):
  66. pageNo = request_dict.get('pageNo', None)
  67. pageSize = request_dict.get('pageSize', None)
  68. method = request_dict.get('method', None)
  69. url = request_dict.get('url', None)
  70. parameter = request_dict.get('parameter', None)
  71. status_code = request_dict.get('status_code', None)
  72. reason_phrase = request_dict.get('reason_phrase', None)
  73. if not all([pageNo, pageSize]):
  74. return response.json(444)
  75. page = int(pageNo)
  76. line = int(pageSize)
  77. try:
  78. request_qs = RequestRecordModel.objects.all()
  79. if method:
  80. request_qs = request_qs.filter(method=method)
  81. if url:
  82. request_qs = request_qs.filter(url__contains=url)
  83. if parameter:
  84. request_qs = request_qs.filter(parameter__contains=parameter)
  85. if status_code:
  86. request_qs = request_qs.filter(status_code=status_code)
  87. if reason_phrase:
  88. request_qs = request_qs.filter(reason_phrase=reason_phrase)
  89. count = request_qs.count()
  90. request_qs = request_qs[(page - 1) * line:page * line]
  91. qs_list = []
  92. for requsetobj in request_qs:
  93. qs_list.append({
  94. 'id': requsetobj.id,
  95. 'method': requsetobj.method,
  96. 'url': requsetobj.url,
  97. 'parameter': requsetobj.parameter,
  98. # 时间保留小数点后两位
  99. 'execute_time': round(requsetobj.execute_time, 2),
  100. 'status_code': requsetobj.status_code,
  101. 'reason_phrase': requsetobj.reason_phrase,
  102. 'add_time': requsetobj.add_time.strftime("%Y-%m-%d %H:%M:%S"),
  103. })
  104. return response.json(
  105. 0, {'list': qs_list, 'total': count})
  106. except Exception as e:
  107. print(e)
  108. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  109. def getDeviceIotInfoList(self, request_dict, response):
  110. serial_number = request_dict.get('serial_number', None)
  111. uid = request_dict.get('uid', None)
  112. pageNo = request_dict.get('pageNo', None)
  113. pageSize = request_dict.get('pageSize', None)
  114. if not all([pageNo, pageSize]):
  115. return response.json(444)
  116. page = int(pageNo)
  117. line = int(pageSize)
  118. try:
  119. if serial_number or uid:
  120. if serial_number:
  121. iot_device_info_qs = iotdeviceInfoModel.objects.filter(
  122. serial_number__contains=serial_number)
  123. if uid:
  124. iot_device_info_qs = iotdeviceInfoModel.objects.filter(
  125. uid__contains=uid)
  126. if not iot_device_info_qs.exists():
  127. return response.json(0)
  128. total = len(iot_device_info_qs)
  129. iot_device_info_qs = iot_device_info_qs.values(
  130. 'serial_number',
  131. 'uid',
  132. 'thing_name',
  133. 'thing_groups',
  134. 'add_time',
  135. 'update_time')[(page - 1) * line:page * line]
  136. else:
  137. total = iotdeviceInfoModel.objects.filter().count()
  138. iot_device_info_qs = iotdeviceInfoModel.objects.filter().values(
  139. 'serial_number',
  140. 'uid',
  141. 'thing_name',
  142. 'thing_groups',
  143. 'add_time',
  144. 'update_time')[(page - 1) * line:page * line]
  145. iot_device_info_list = CommonService.qs_to_list(iot_device_info_qs)
  146. # 获取序列号的uid
  147. for iot_device_info in iot_device_info_list:
  148. if not iot_device_info['uid']:
  149. device_info_qs = Device_Info.objects.filter(
  150. serial_number__contains=iot_device_info['serial_number']).values('UID')
  151. if device_info_qs.exists():
  152. iot_device_info['uid'] = device_info_qs[0]['UID']
  153. return response.json(
  154. 0, {'list': iot_device_info_list, 'total': total})
  155. except Exception as e:
  156. print(e)
  157. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  158. # 通用发布MQTT通知
  159. @staticmethod
  160. def requestPublishMqtt(request_dict, response):
  161. msg = request_dict.get('msg', None)
  162. thing_name = request_dict.get('thing_name', None)
  163. topic_name = request_dict.get('topic_name', None)
  164. if not all([msg, thing_name, topic_name]):
  165. return response.json(444)
  166. try:
  167. msg = eval(msg)
  168. identification_code = thing_name[thing_name.rindex('_') + 1:]
  169. if not CommonService.req_publish_mqtt_msg(identification_code, topic_name, msg):
  170. return response.json(10044)
  171. return response.json(0)
  172. except Exception as e:
  173. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  174. def getAccessLogList(self, request_dict, response):
  175. user = request_dict.get('user', None)
  176. operation = request_dict.get('operation', None)
  177. status = request_dict.get('status', None)
  178. pageNo = request_dict.get('pageNo', None)
  179. pageSize = request_dict.get('pageSize', None)
  180. if not all([pageNo, pageSize]):
  181. return response.json(444)
  182. page = int(pageNo)
  183. line = int(pageSize)
  184. try:
  185. if user or operation or status:
  186. if user:
  187. access_log_qs = Access_Log.objects.filter(
  188. user__contains=user)
  189. if operation:
  190. access_log_qs = Access_Log.objects.filter(
  191. operation__contains=operation)
  192. if status:
  193. access_log_qs = Access_Log.objects.filter(status=status)
  194. if not access_log_qs.exists():
  195. return response.json(0)
  196. total = access_log_qs.count()
  197. access_log_qs = access_log_qs.order_by('-time').values(
  198. 'user', 'operation', 'ip', 'status', 'content', 'time')[(page - 1) * line:page * line]
  199. else:
  200. total = Access_Log.objects.count()
  201. access_log_qs = Access_Log.objects.filter().order_by('-time').values('user',
  202. 'operation', 'ip', 'status',
  203. 'content', 'time')[
  204. (page - 1) * line:page * line]
  205. access_log_list = CommonService.qs_to_list(access_log_qs)
  206. return response.json(0, {'list': access_log_list, 'total': total})
  207. except Exception as e:
  208. print(e)
  209. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  210. def getDeviceLogList(self, request_dict, response):
  211. uid = request_dict.get('uid', None)
  212. serial_number = request_dict.get('serial_number', None)
  213. pageNo = request_dict.get('pageNo', None)
  214. pageSize = request_dict.get('pageSize', None)
  215. if not all([pageNo, pageSize]):
  216. return response.json(444)
  217. page = int(pageNo)
  218. line = int(pageSize)
  219. try:
  220. if uid or serial_number:
  221. if uid:
  222. device_log_qs = DeviceLogModel.objects.filter(
  223. uid=uid)
  224. if serial_number:
  225. device_log_qs = DeviceLogModel.objects.filter(
  226. serial_number=serial_number)
  227. if not device_log_qs.exists():
  228. return response.json(0)
  229. total = device_log_qs.count()
  230. device_log_qs = device_log_qs.order_by(
  231. '-add_time').values()[(page - 1) * line:page * line]
  232. else:
  233. total = DeviceLogModel.objects.count()
  234. device_log_qs = DeviceLogModel.objects.filter().order_by(
  235. '-add_time').values()[(page - 1) * line:page * line]
  236. device_log_list = CommonService.qs_to_list(device_log_qs)
  237. # 添加下载链接
  238. aws_s3_client = boto3.client(
  239. 's3',
  240. region_name=REGION_NAME,
  241. aws_access_key_id=ACCESS_KEY_ID,
  242. aws_secret_access_key=SECRET_ACCESS_KEY,
  243. config=botocore.client.Config(signature_version='s3v4'),
  244. )
  245. for device_log in device_log_list:
  246. obj = device_log['serial_number'] if device_log['serial_number'] else device_log['uid']
  247. obj = 'device_log/' + obj + \
  248. '/{}'.format(device_log['filename'])
  249. download_url = aws_s3_client.generate_presigned_url(
  250. ClientMethod='get_object',
  251. Params={
  252. 'Bucket': LOG_BUCKET,
  253. 'Key': obj
  254. },
  255. ExpiresIn=3600
  256. )
  257. device_log['download_url'] = download_url
  258. return response.json(0, {'list': device_log_list, 'total': total})
  259. except Exception as e:
  260. print(e)
  261. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  262. def getOperationLogList(self, request_dict, response):
  263. operation = request_dict.get('operation', None)
  264. url = request_dict.get('url', None)
  265. pageNo = request_dict.get('pageNo', None)
  266. pageSize = request_dict.get('pageSize', None)
  267. if not all([pageNo, pageSize]):
  268. return response.json(444)
  269. page = int(pageNo)
  270. line = int(pageSize)
  271. try:
  272. log_qs = LogModel.objects.all()
  273. if operation:
  274. log_qs = log_qs.filter(operation__contains=operation)
  275. if url:
  276. log_qs = log_qs.filter(url__contains=url)
  277. count = log_qs.count()
  278. log_qs = log_qs.values(
  279. 'operation', 'url', 'content', 'ip', 'time')[
  280. (page - 1) * line:page * line]
  281. log_list = list(log_qs)
  282. return response.json(
  283. 0, {'list': log_list, 'total': count})
  284. except Exception as e:
  285. print(e)
  286. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  287. def getAppLogList(self, request_dict, response):
  288. """
  289. 获取App日志信息
  290. @param request_dict:请求参数
  291. @param response:响应对象
  292. @request_dict userID:用户ID
  293. @request_dict uid:uid
  294. @return:
  295. """
  296. userName = request_dict.get('userName', None)
  297. uid = request_dict.get('uid', None)
  298. pageNo = request_dict.get('pageNo', None)
  299. pageSize = request_dict.get('pageSize', None)
  300. if not all([pageNo, pageSize]):
  301. return response.json(444)
  302. page = int(pageNo)
  303. line = int(pageSize)
  304. try:
  305. app_log_qs = AppLogModel.objects.all()
  306. if userName:
  307. app_log_qs = app_log_qs.filter(user__username=userName)
  308. elif uid:
  309. app_log_qs = app_log_qs.filter(uid=uid)
  310. count = app_log_qs.count()
  311. log_qs = app_log_qs.values(
  312. 'user__username', 'uid', 'average_delay', 'status', 'filename', 'add_time', 'user_id').order_by(
  313. '-add_time')[(page - 1) * line:page * line]
  314. app_log_list = CommonService.qs_to_list(log_qs)
  315. # 添加下载链接
  316. aws_s3_client = boto3.client(
  317. 's3',
  318. region_name=REGION_NAME,
  319. aws_access_key_id=ACCESS_KEY_ID,
  320. aws_secret_access_key=SECRET_ACCESS_KEY,
  321. config=botocore.client.Config(signature_version='s3v4'),
  322. )
  323. for app_log in app_log_list:
  324. filename = app_log['filename']
  325. if not filename.endswith('.txt'):
  326. filename += ".txt"
  327. obj = 'app_log/' + app_log['user_id'] + '/{}'.format(filename)
  328. appLog_url = aws_s3_client.generate_presigned_url(
  329. ClientMethod='get_object',
  330. Params={
  331. 'Bucket': LOG_BUCKET,
  332. 'Key': obj
  333. },
  334. ExpiresIn=3600
  335. )
  336. app_log['appLog_url'] = appLog_url
  337. return response.json(0, {'list': app_log_list, 'total': count})
  338. except Exception as e:
  339. print(e)
  340. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  341. def getScanLog(self, request_dict, response):
  342. serial = request_dict.get('serial', None)
  343. ip = request_dict.get('ip', None)
  344. pageNo = request_dict.get('pageNo', None)
  345. pageSize = request_dict.get('pageSize', None)
  346. if not all([pageNo, pageSize]):
  347. return response.json(444)
  348. page = int(pageNo)
  349. line = int(pageSize)
  350. try:
  351. scan_log_qs = AppScannedSerial.objects.all()
  352. if serial:
  353. scan_log_qs = scan_log_qs.filter(serial__contains=serial)
  354. if ip:
  355. scan_log_qs = scan_log_qs.filter(ip__contains=ip)
  356. count = scan_log_qs.count()
  357. scan_log_qs = scan_log_qs.order_by('-add_time').values(
  358. 'serial', 'ip', 'add_time', 'update_time')[
  359. (page - 1) * line:page * line]
  360. scan_log_list = list(scan_log_qs)
  361. return response.json(
  362. 0, {'list': scan_log_list, 'total': count})
  363. except Exception as e:
  364. print(e)
  365. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  366. def getAlarmLog(self, request_dict, response):
  367. page_no = request_dict.get('pageNo', None)
  368. page_size = request_dict.get('pageSize', None)
  369. uid = request_dict.get('uid', None)
  370. if not all([page_no, page_size]):
  371. return response.json(444)
  372. page = int(page_no)
  373. line = int(page_size)
  374. try:
  375. alarm_log_qs = StsFrequency.objects.all()
  376. if uid:
  377. alarm_log_qs = alarm_log_qs.filter(uid=uid)
  378. count = alarm_log_qs.count()
  379. alarm_log_qs = alarm_log_qs.order_by('-updateTime').values('id', 'uid', 'frequency', 'updateTime',
  380. 'addTime')[(page - 1) * line:page * line]
  381. return response.json(0, {'list': list(alarm_log_qs), 'total': count})
  382. except Exception as e:
  383. print(e)
  384. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  385. @staticmethod
  386. def getDomainLog(request_dict, response):
  387. page_no = request_dict.get('pageNo', None)
  388. page_size = request_dict.get('pageSize', None)
  389. serial_number = request_dict.get('serialNumber', None)
  390. if not all([page_no, page_size]):
  391. return response.json(444)
  392. page = int(page_no)
  393. line = int(page_size)
  394. try:
  395. device_domain_qs = DeviceDomainRegionModel.objects.filter(~Q(country_code=''))
  396. if serial_number:
  397. device_domain_qs = device_domain_qs.filter(serial_number__contains=serial_number)
  398. count = device_domain_qs.count()
  399. device_domain_qs = device_domain_qs.order_by('-update_time').values()[(page - 1) * line:page * line]
  400. device_domain_list = []
  401. for device_domain in device_domain_qs:
  402. ip = device_domain['ip']
  403. region_id = device_domain['region_id']
  404. country_code = device_domain['country_code']
  405. ip_addr_qs = IPAddr.objects.filter(ip=ip, is_geoip2=False).values('region')
  406. if ip_addr_qs.exists():
  407. region = ip_addr_qs[0]['region']
  408. else:
  409. ip_qs = IPQuery(ip)
  410. region = ip_qs.region
  411. # 港澳台返回美洲域名
  412. if country_code == 'CN' and region in ['香港', '澳门', '台湾']:
  413. country_code = region
  414. # 查询域名数据
  415. region_qs = RegionModel.objects.filter(id=region_id).values('api', 'name')
  416. api = 'https://www.dvema.com/'
  417. region_name = '美洲'
  418. if region_qs.exists():
  419. api = region_qs[0]['api']
  420. region_name = region_qs[0]['name']
  421. api_region = region_name + '域名'
  422. device_domain_list.append({
  423. 'id': device_domain['id'],
  424. 'serial_number': device_domain['serial_number'],
  425. 'ip': ip,
  426. 'region_id': region_id,
  427. 'country_code': country_code,
  428. 'api': api,
  429. 'api_region': api_region,
  430. 'add_time': device_domain['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
  431. 'update_time': device_domain['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
  432. })
  433. return response.json(0, {'list': device_domain_list, 'total': count})
  434. except Exception as e:
  435. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  436. @staticmethod
  437. def getDomainScanLog(request_dict, response):
  438. serial_number = request_dict.get('serialNumber', None)
  439. if not all([serial_number]):
  440. return response.json(444)
  441. try:
  442. scan_log_qs = AppScannedSerial.objects.filter(serial__contains=serial_number).values('ip', 'add_time',
  443. 'update_time')
  444. device_domain_qs = DeviceDomainRegionModel.objects.filter(serial_number__contains=serial_number).values()
  445. res = {}
  446. if scan_log_qs.exists() and device_domain_qs.exists():
  447. device_domain = device_domain_qs[0]
  448. domain_ip = device_domain['ip']
  449. region_id = device_domain['region_id']
  450. country_code = device_domain['country_code']
  451. ip_addr_qs = IPAddr.objects.filter(ip=domain_ip, is_geoip2=False).values('region')
  452. if ip_addr_qs.exists():
  453. region = ip_addr_qs[0]['region']
  454. else:
  455. ip_qs = IPQuery(domain_ip)
  456. region = ip_qs.region
  457. # 港澳台返回美洲域名
  458. if country_code == 'CN' and region in ['香港', '澳门', '台湾']:
  459. country_code = region
  460. # 查询域名数据
  461. region_qs = RegionModel.objects.filter(id=region_id).values('api', 'name')
  462. api = 'https://www.dvema.com/'
  463. region_name = '美洲'
  464. if region_qs.exists():
  465. api = region_qs[0]['api']
  466. region_name = region_qs[0]['name']
  467. api_region = region_name + '域名'
  468. res = {
  469. 'serial_number': device_domain['serial_number'],
  470. 'domain_ip': domain_ip,
  471. 'scan_ip': device_domain_qs[0]['ip'],
  472. 'region_id': region_id,
  473. 'country_code': country_code,
  474. 'api': api,
  475. 'api_region': api_region,
  476. 'domain_add_time': device_domain['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
  477. 'domain_update_time': device_domain['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
  478. 'scan_add_time': device_domain_qs[0]['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
  479. 'scan_update_time': device_domain_qs[0]['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
  480. }
  481. return response.json(0, res)
  482. except Exception as e:
  483. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  484. @staticmethod
  485. def getDeviceAbnormalEvent(request_dict, response):
  486. uid = request_dict.get('uid', None)
  487. device_type = request_dict.get('deviceType', None)
  488. version = request_dict.get('version', None)
  489. event_code = request_dict.get('eventCode', None)
  490. page_no = request_dict.get('pageNo', None)
  491. page_size = request_dict.get('pageSize', None)
  492. if not all([page_no, page_size]):
  493. return response.json(444)
  494. page = int(page_no)
  495. line = int(page_size)
  496. try:
  497. query = Q()
  498. if uid:
  499. query &= Q(uid=uid)
  500. if device_type:
  501. # 处理多个deviceType参数
  502. device_types = [int(t.strip()) for t in device_type.split(',') if t.strip().isdigit()]
  503. query &= Q(device_type__in=device_types)
  504. if version:
  505. query &= Q(version=version)
  506. if event_code:
  507. query &= Q(event_code=event_code)
  508. abnormal_events = AbnormalEvent.objects.filter(query)
  509. count = abnormal_events.count()
  510. event_list = abnormal_events.order_by('-created_time').values(
  511. 'id', 'uid', 'device_type', 'version', 'event_code',
  512. 'content', 'event_time', 'created_time'
  513. )[(page - 1) * line:page * line]
  514. # 查询device_type对应的name,事件编码对应的事件
  515. for event in event_list:
  516. device_type = DeviceTypeModel.objects.filter(type=event['device_type']).first()
  517. if device_type:
  518. event['device_type'] = device_type.name
  519. else:
  520. event['device_type'] = ''
  521. abnormal_event_code = AbnormalEventCode.objects.filter(event_code=event['event_code']).first()
  522. if abnormal_event_code:
  523. event['event'] = abnormal_event_code.event
  524. else:
  525. event['event'] = ''
  526. return response.json(0, {'list': list(event_list), 'total': count})
  527. except Exception as e:
  528. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))