123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import getopt
- import os, sys
- PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
- sys.path.insert(0, PROJECT_ROOT)
- import sys
- import os
- from concurrent.futures import ThreadPoolExecutor, as_completed
- try:
- options, args = getopt.getopt(sys.argv[1:], 'v:e:m:r:p:',
- ['version=', 'env=', 'platform-version=',
- 'platform='])
- except getopt.GetoptError as e:
- print(str(e))
- sys.exit()
- upgrade_version = ''
- system_env = 'testing'
- platform_version = ''
- platform = ''
- for name, value in options:
- if name in ('-v', '--version'):
- upgrade_version = value
- if name in ('-e', '--env'):
- system_env = value
- if name in ('-r', '--platform-version'):
- platform_version = value
- if name in ('-p', '--platform'):
- platform = value
- upgrade_soft_ver = 'v{version}'.format(version = upgrade_version)
- if platform == 'ASR1802':
- upgrade_core_ver = 'Luat_V{platform_version}_{platform}_720D'.format(
- platform_version = '{0:0>4}'.format(platform_version),
- platform = platform)
- else:
- upgrade_core_ver = 'Luat_V{platform_version}_{platform}_SSL'.format(
- platform_version = '{0:0>4}'.format(platform_version),
- platform = platform)
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.{env}'.format(env = system_env))
- from script.base import init_env
- init_env(interactive = False)
- from script.device_upgrade import DeviceUpgradeLog
- from apps.web.core.networking import MessageSender
- from apps.web.device.models import Device, DeviceDict
- update_key = DeviceUpgradeLog.make_update_key(upgrade_core_ver, upgrade_soft_ver)
- def get_device():
- return [item for item in
- DeviceUpgradeLog.objects(updateKey = update_key, status__ne = DeviceUpgradeLog.Status.INIT,
- reboot = False).all()]
- def reboot_device(item):
- devNo = item.devNo
- dev = Device.get_dev(devNo) # type: DeviceDict
- if not dev:
- print("dev {} is not exists.".format(devNo))
- item.reboot = True
- item.remark = 'noDev'
- item.save()
- return False, True, item
- if not dev.online:
- return False, False, item
- if item.afterSoftVer <= dev['softVer']:
- item.reboot = True
- item.status = DeviceUpgradeLog.Status.SUCCESS
- item.save()
- return True, True, item
- server = dev.get("server", '120.27.251.159:1883')
- ip1, port = server.split(":")
- print server
- result = MessageSender.send(dev, 202, {
- "IMEI": devNo,
- "addr_set": {
- "ip1": ip1,
- "port": port
- }
- }, timeout = 30)
- if result.get("rst") != 0:
- return False, False, item
- else:
- return True, False, item
- def main():
- # 获取所有的需要重启的设备
- items = get_device()
- with ThreadPoolExecutor(max_workers = 20) as executor:
- toDo = list()
- for item in items:
- future = executor.submit(reboot_device, item)
- toDo.append(future)
- for f in as_completed(toDo):
- success, has_done, item = f.result()
- print 'dev = {}, success = {}, has_done = {}'.format(item.devNo, success, has_done)
- if success and not has_done:
- item.reboot = True
- item.save()
- print "ok, all tasks has been done!!!"
- if __name__ == '__main__':
- main()
|