123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- # 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, revertPulse = False).all()]
- def revert_device_pulse(item):
- devNo = item.devNo
- dev = Device.get_dev(devNo) # type: DeviceDict
- if not dev:
- print("dev {} is not exists.".format(devNo))
- item.revertPulse = True
- item.remark = 'noDev'
- item.save()
- return False, True, item
- if not dev.online:
- return False, False, item
- if 'pulseWidth1' not in item.devInfo or 'pulseInterval1' not in item.devInfo or 'trapSwtich' not in item.devInfo:
- print("dev {} is lost.".format(devNo))
- item.revertPulse = True
- item.save()
- return True, True, item
- if item.devInfo['pulseWidth1'] == dev['pulseWidth1'] and item.devInfo['pulseInterval1'] == dev['pulseInterval1'] and \
- item.devInfo['trapSwtich'] == dev['trapSwtich']:
- print("dev {} is same.".format(devNo))
- item.revertPulse = True
- item.save()
- return True, True, item
- if (item.devInfo['pulseWidth1'] == 50 or item.devInfo['pulseWidth1'] == 40) and item.devInfo[
- 'pulseInterval1'] == 500 and item.devInfo['trapSwtich'] == 1:
- print("dev {} is default.".format(devNo))
- item.revertPulse = True
- 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,
- "pulse_set": {
- "pwm_wid": item.devInfo['pulseWidth1'],
- "pwm_inter": item.devInfo['pulseInterval1'],
- "pwm_idle": item.devInfo['trapSwtich']
- }
- }, timeout = 30)
- MessageSender.async_send(dev, 201, {
- "IMEI": devNo
- }, timeout = 30)
- if result.get("rst") != 0:
- return False, False, item
- else:
- return True, False, item
- def main():
- # 获取所有的需要重启的设备
- items = get_device()
- # print items
- with ThreadPoolExecutor(max_workers = 20) as executor:
- toDo = list()
- for item in items:
- future = executor.submit(revert_device_pulse, 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.revertPulse = True
- item.save()
- print "ok, all tasks has been done!!!"
- if __name__ == '__main__':
- main()
|