modify_max_coin.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import getopt
  4. import time
  5. import sys
  6. import os
  7. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  8. sys.path.insert(0, PROJECT_ROOT)
  9. try:
  10. options, args = getopt.getopt(sys.argv[1:], 'v:e:k:v:d:a:',
  11. ['version=', 'env=', 'key=', 'value=', 'dealer=', 'agent='])
  12. except getopt.GetoptError:
  13. sys.exit()
  14. version = ''
  15. system_env = 'testing'
  16. modify = {}
  17. dealer = None
  18. agent = None
  19. for name, value in options:
  20. if name in ('-v', '--version'):
  21. version = value
  22. if name in ('-e', '--env'):
  23. system_env = value
  24. # if name in ('-m', '--modify'):
  25. # modify = json.loads(value)
  26. if name in ('-d', '--dealer'):
  27. dealer = value
  28. if name in ('-a', '--agent'):
  29. agent = value
  30. if not version:
  31. print 'error version = {version}'.format(version = version)
  32. sys.exit(2)
  33. master, major = version.split('.')
  34. if not master or not major:
  35. print 'error version = {version}'.format(version = version)
  36. sys.exit(2)
  37. if not system_env:
  38. print 'error system env = {env}'.format(env = system_env)
  39. sys.exit(2)
  40. import os
  41. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.{env}'.format(env = system_env))
  42. from script.base import init_env
  43. init_env(interactive = False)
  44. from apps.web.dealer.models import Dealer
  45. from apps.web.device.models import Device
  46. from apps.web.core.networking import MessageSender
  47. from apps.web.constant import Const, DeviceOnlineStatus
  48. output_path = '/root/{master}.{major}.modify'.format(master = master, major = major)
  49. version_regex = 'v{master}\.{major}\.'.format(master = master, major = major)
  50. version_check = 'v{master}.{major}.'.format(master = master, major = major)
  51. if not os.path.exists(output_path):
  52. os.makedirs(output_path)
  53. done = open('%s/done_%d.txt' % (output_path, int(time.time())), 'w')
  54. offline = open('%s/offline_%d.txt' % (output_path, int(time.time())), 'w')
  55. error = open('%s/error_%d.txt' % (output_path, int(time.time())), 'w')
  56. timeout = open('%s/timeout_%d.txt' % (output_path, int(time.time())), 'w')
  57. try:
  58. if dealer:
  59. dealers = [dealer]
  60. elif agent:
  61. dealers = [dealer['_id'] for dealer in Dealer.get_collection().find({'agentId': agent})]
  62. else:
  63. dealers = None
  64. if version_check == 'v1.8.':
  65. if dealers:
  66. objs = Device.get_collection().find(
  67. {'ownerId': {'$in': dealers},
  68. '$or': [{'softVer': {'$regex': 'v1\.8\.'}}, {'softVer': {'$regex': 'v1\.7.'}}]})
  69. else:
  70. objs = Device.get_collection().find(
  71. {'$or': [{'softVer': {'$regex': 'v1\.8\.'}}, {'softVer': {'$regex': 'v1\.7\.'}}]})
  72. else:
  73. if dealers:
  74. objs = Device.get_collection().find(
  75. {'ownerId': {'$in': dealers},
  76. 'softVer': {'$regex': version_regex}})
  77. else:
  78. objs = Device.get_collection().find(
  79. {'softVer': {'$regex': version_regex}})
  80. count = 0
  81. # 做一下保护, 避免查询语句错误
  82. devNoList = []
  83. for obj in objs:
  84. if version_check == 'v1.8.':
  85. if str(obj['softVer']).startswith('v1.8.') or str(obj['softVer']).startswith('v1.7.'):
  86. devNoList.append(str(obj['devNo']))
  87. else:
  88. print 'error dev = %s' % str(obj['devNo'])
  89. else:
  90. if str(obj['softVer']).startswith(version_check):
  91. devNoList.append(str(obj['devNo']))
  92. else:
  93. print 'error dev = %s' % str(obj['devNo'])
  94. for devNo in devNoList:
  95. try:
  96. dev = Device.get_dev(devNo)
  97. if dev['online'] != DeviceOnlineStatus.DEV_STATUS_ONLINE:
  98. print '{imei} is offline.'.format(imei = devNo)
  99. continue
  100. cmdPara = {'IMEI': devNo}
  101. print cmdPara
  102. result = MessageSender.send(device = dev, cmd = Const.CMD_CODE_GET_DEVINFO, payload = cmdPara, timeout = 15)
  103. if result['rst'] != 0:
  104. error.write('%s %s %s\n' % (str(dev['devNo']), str(dev['logicalCode']), str(dev['softVer'])))
  105. continue
  106. else:
  107. count = count + 1
  108. except Exception, e:
  109. print 'some exception =%s' % e
  110. finally:
  111. error.close()
  112. timeout.close()
  113. done.close()
  114. offline.close()
  115. print('finished')