post_reboot_tieta.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # coding=utf-8
  2. import getopt
  3. import _strptime
  4. import os, sys
  5. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  6. sys.path.insert(0, PROJECT_ROOT)
  7. import sys
  8. import os
  9. from concurrent.futures import ThreadPoolExecutor, as_completed
  10. try:
  11. options, args = getopt.getopt(sys.argv[1:], 'e:', ['env='])
  12. except getopt.GetoptError as e:
  13. print(str(e))
  14. sys.exit()
  15. system_env = 'testing'
  16. for name, value in options:
  17. if name in ('-e', '--env'):
  18. system_env = value
  19. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.{env}'.format(env = system_env))
  20. from script.base import init_env
  21. init_env(interactive = False)
  22. from script.device_upgrade import DeviceUpgradeLog
  23. from apps.web.core.networking import MessageSender
  24. from apps.web.device.models import Device, DeviceDict
  25. def get_device():
  26. return [item for item in
  27. DeviceUpgradeLog.objects(status__ne = DeviceUpgradeLog.Status.INIT, reboot = False).all()]
  28. def reboot_device(item):
  29. devNo = item.devNo
  30. dev = Device.get_dev(devNo) # type: DeviceDict
  31. if not dev:
  32. print("dev {} is not exists.".format(devNo))
  33. item.reboot = True
  34. item.remark = 'noDev'
  35. item.save()
  36. return False, True, item
  37. if item.afterSoftVer == dev['softVer']:
  38. item.reboot = True
  39. item.status = DeviceUpgradeLog.Status.SUCCESS
  40. item.save()
  41. return True, True, item
  42. server = '120.27.251.159:1883'
  43. ip1, port = server.split(":")
  44. print server
  45. result = MessageSender.send(dev, 202, {
  46. "IMEI": devNo,
  47. "addr_set": {
  48. 'restart': True,
  49. 'reboot': True
  50. }
  51. }, timeout = 15)
  52. if result.get("rst") != 0:
  53. return False, False, item
  54. else:
  55. return True, False, item
  56. def main():
  57. # 获取所有的需要重启的设备
  58. items = get_device()
  59. with ThreadPoolExecutor(max_workers = 20) as executor:
  60. toDo = list()
  61. for item in items:
  62. future = executor.submit(reboot_device, item)
  63. toDo.append(future)
  64. for f in as_completed(toDo):
  65. success, has_done, item = f.result()
  66. print 'dev = {}, success = {}, has_done = {}'.format(item.devNo, success, has_done)
  67. if success and not has_done:
  68. item.reboot = True
  69. item.save()
  70. print "ok, all tasks has been done!!!"
  71. if __name__ == '__main__':
  72. main()