avcon_job.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from datetime import datetime
  4. from sqlalchemy.orm import Session
  5. from utils import *
  6. from utils.redis_util import *
  7. from models import *
  8. from exceptions import *
  9. from database import get_local_db
  10. from extensions import logger
  11. from common import YzyApi
  12. from config import settings
  13. import traceback
  14. from common import AvconH5API
  15. def proc():
  16. lock_key = "avcon_job_proc"
  17. if redis_lock(lock_key):
  18. logger.info(datetime.now())
  19. with get_local_db() as db:
  20. refresh_device(db)
  21. refresh_device_channel(db)
  22. db.close()
  23. redis_unlock(lock_key)
  24. def refresh_device(db: Session):
  25. dev_list = []
  26. region_list = AvconH5API.get_region()
  27. if region_list is not None:
  28. for region_item in region_list:
  29. region_id = region_item['region_id']
  30. region_name = region_item['region_name']
  31. region_group_list = AvconH5API.get_group(region_id)
  32. if region_group_list is not None:
  33. for region_group_item in region_group_list:
  34. group_id = region_group_item['group_id']
  35. group_name = region_group_item['group_name']
  36. # 子节点下面才有设备
  37. child_count = region_group_item['child_count']
  38. if child_count > 0:
  39. child_region_group_list = AvconH5API.get_group(region_id, group_id)
  40. if child_region_group_list is not None:
  41. for child_region_group_item in child_region_group_list:
  42. child_group_id = child_region_group_item['group_id']
  43. child_group_name = child_region_group_item['group_name']
  44. device_list = AvconH5API.get_group_device(child_group_id)
  45. if device_list is not None:
  46. for device_item in device_list:
  47. dev_id = device_item['dev_id']
  48. dev_name = device_item['dev_name']
  49. device_item['parent_group_id'] = group_id
  50. dev_list.append(device_item)
  51. if len(dev_list) > 0:
  52. db.query(AvconDevice).delete()
  53. db.commit()
  54. for n in dev_list:
  55. new_dev = AvconDevice(**n)
  56. db.add(new_dev)
  57. db.commit()
  58. def refresh_device_channel(db: Session):
  59. channel_list = AvconH5API.get_channel_all()
  60. if len(channel_list) > 0:
  61. db.query(AvconDeviceChannel).delete()
  62. db.commit()
  63. for n in channel_list:
  64. new_dev = AvconDeviceChannel(**n)
  65. db.add(new_dev)
  66. db.commit()
  67. for n in channel_list:
  68. channel_id = n['channel_id']
  69. if 'status' in n and n['status'] == 1:
  70. live_url = AvconH5API.get_live_streaming(channel_id)
  71. if live_url is not None:
  72. db.query(AvconDeviceChannel).filter(AvconDeviceChannel.channel_id == channel_id).update({"live_url": live_url, "create_time": datetime.now()})
  73. db.commit()
  74. play_url = AvconH5API.get_live_playing(channel_id)
  75. if play_url is not None:
  76. db.query(AvconDeviceChannel).filter(AvconDeviceChannel.channel_id == channel_id).update({"play_url": play_url, "create_time": datetime.now()})
  77. db.commit()