# -*- coding: utf-8 -*- # !/usr/bin/env python import getopt import time import sys import os PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..') sys.path.insert(0, PROJECT_ROOT) try: options, args = getopt.getopt(sys.argv[1:], 'v:e:k:v:d:a:', ['version=', 'env=', 'key=', 'value=', 'dealer=', 'agent=']) except getopt.GetoptError: sys.exit() version = '' system_env = 'testing' modify = {} dealer = None agent = None for name, value in options: if name in ('-v', '--version'): version = value if name in ('-e', '--env'): system_env = value # if name in ('-m', '--modify'): # modify = json.loads(value) if name in ('-d', '--dealer'): dealer = value if name in ('-a', '--agent'): agent = value if not version: print 'error version = {version}'.format(version = version) sys.exit(2) master, major = version.split('.') if not master or not major: print 'error version = {version}'.format(version = version) sys.exit(2) if not system_env: print 'error system env = {env}'.format(env = system_env) sys.exit(2) import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.{env}'.format(env = system_env)) from script.base import init_env init_env(interactive = False) from apps.web.dealer.models import Dealer from apps.web.device.models import Device from apps.web.core.networking import MessageSender from apps.web.constant import Const, DeviceOnlineStatus output_path = '/root/{master}.{major}.modify'.format(master = master, major = major) version_regex = 'v{master}\.{major}\.'.format(master = master, major = major) version_check = 'v{master}.{major}.'.format(master = master, major = major) if not os.path.exists(output_path): os.makedirs(output_path) done = open('%s/done_%d.txt' % (output_path, int(time.time())), 'w') offline = open('%s/offline_%d.txt' % (output_path, int(time.time())), 'w') error = open('%s/error_%d.txt' % (output_path, int(time.time())), 'w') timeout = open('%s/timeout_%d.txt' % (output_path, int(time.time())), 'w') try: if dealer: dealers = [dealer] elif agent: dealers = [dealer['_id'] for dealer in Dealer.get_collection().find({'agentId': agent})] else: dealers = None if version_check == 'v1.8.': if dealers: objs = Device.get_collection().find( {'ownerId': {'$in': dealers}, '$or': [{'softVer': {'$regex': 'v1\.8\.'}}, {'softVer': {'$regex': 'v1\.7.'}}]}) else: objs = Device.get_collection().find( {'$or': [{'softVer': {'$regex': 'v1\.8\.'}}, {'softVer': {'$regex': 'v1\.7\.'}}]}) else: if dealers: objs = Device.get_collection().find( {'ownerId': {'$in': dealers}, 'softVer': {'$regex': version_regex}}) else: objs = Device.get_collection().find( {'softVer': {'$regex': version_regex}}) count = 0 # 做一下保护, 避免查询语句错误 devNoList = [] for obj in objs: if version_check == 'v1.8.': if str(obj['softVer']).startswith('v1.8.') or str(obj['softVer']).startswith('v1.7.'): devNoList.append(str(obj['devNo'])) else: print 'error dev = %s' % str(obj['devNo']) else: if str(obj['softVer']).startswith(version_check): devNoList.append(str(obj['devNo'])) else: print 'error dev = %s' % str(obj['devNo']) for devNo in devNoList: try: dev = Device.get_dev(devNo) if dev['online'] != DeviceOnlineStatus.DEV_STATUS_ONLINE: print '{imei} is offline.'.format(imei = devNo) continue cmdPara = {'IMEI': devNo} print cmdPara result = MessageSender.send(device = dev, cmd = Const.CMD_CODE_GET_DEVINFO, payload = cmdPara, timeout = 15) if result['rst'] != 0: error.write('%s %s %s\n' % (str(dev['devNo']), str(dev['logicalCode']), str(dev['softVer']))) continue else: count = count + 1 except Exception, e: print 'some exception =%s' % e finally: error.close() timeout.close() done.close() offline.close() print('finished')