123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # coding=utf-8
- import getopt
- import _strptime
- 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:], 'e:', ['env='])
- except getopt.GetoptError as e:
- print(str(e))
- sys.exit()
- system_env = 'testing'
- for name, value in options:
- if name in ('-e', '--env'):
- system_env = value
- 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
- def get_device():
- return [item for item in
- DeviceUpgradeLog.objects(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 item.afterSoftVer == dev['softVer']:
- item.reboot = True
- item.status = DeviceUpgradeLog.Status.SUCCESS
- item.save()
- return True, True, item
- server = '120.27.251.159:1883'
- ip1, port = server.split(":")
- print server
- result = MessageSender.send(dev, 202, {
- "IMEI": devNo,
- "addr_set": {
- 'restart': True,
- 'reboot': True
- }
- }, timeout = 15)
- 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()
|