#!/usr/bin/env python3 # -*- coding: utf-8 -*- from datetime import datetime from sqlalchemy.orm import Session from utils import * from utils.redis_util import * from models import * from exceptions import * from database import get_local_db from extensions import logger from common import YzyApi from config import settings import traceback from common import AvconH5API def proc(): lock_key = "avcon_job_proc" if redis_lock(lock_key): logger.info(datetime.now()) with get_local_db() as db: refresh_device(db) refresh_device_channel(db) db.close() redis_unlock(lock_key) def refresh_device(db: Session): dev_list = [] region_list = AvconH5API.get_region() if region_list is not None: for region_item in region_list: region_id = region_item['region_id'] region_name = region_item['region_name'] region_group_list = AvconH5API.get_group(region_id) if region_group_list is not None: for region_group_item in region_group_list: group_id = region_group_item['group_id'] group_name = region_group_item['group_name'] # 子节点下面才有设备 child_count = region_group_item['child_count'] if child_count > 0: child_region_group_list = AvconH5API.get_group(region_id, group_id) if child_region_group_list is not None: for child_region_group_item in child_region_group_list: child_group_id = child_region_group_item['group_id'] child_group_name = child_region_group_item['group_name'] device_list = AvconH5API.get_group_device(child_group_id) if device_list is not None: for device_item in device_list: dev_id = device_item['dev_id'] dev_name = device_item['dev_name'] device_item['parent_group_id'] = group_id dev_list.append(device_item) if len(dev_list) > 0: db.query(AvconDevice).delete() db.commit() for n in dev_list: new_dev = AvconDevice(**n) db.add(new_dev) db.commit() def refresh_device_channel(db: Session): channel_list = AvconH5API.get_channel_all() if len(channel_list) > 0: db.query(AvconDeviceChannel).delete() db.commit() for n in channel_list: new_dev = AvconDeviceChannel(**n) db.add(new_dev) db.commit() for n in channel_list: channel_id = n['channel_id'] if 'status' in n and n['status'] == 1: live_url = AvconH5API.get_live_streaming(channel_id) if live_url is not None: db.query(AvconDeviceChannel).filter(AvconDeviceChannel.channel_id == channel_id).update({"live_url": live_url, "create_time": datetime.now()}) db.commit() play_url = AvconH5API.get_live_playing(channel_id) if play_url is not None: db.query(AvconDeviceChannel).filter(AvconDeviceChannel.channel_id == channel_id).update({"play_url": play_url, "create_time": datetime.now()}) db.commit()