Пример #1
0
 def run(self):
     while True:
         cache.set("ztask_virtual_active_time", datetime.datetime.now())
         try:
             devicelist = self.finddevices()
             for device in devicelist:
                 deviceid = device["serial"]
                 taskid = device["task_id"]
                 if taskid:
                     task = dbapi.GetTask(taskid)
                     if task and task.get("status") and task["status"] == "running":
                         if deviceid not in self.processDict:  # 进程从未启动
                             self.startProcess(deviceid)
                         else:
                             p = self.processDict[deviceid]
                             if not p.is_alive():  # 进程已退出,从新启动进程
                                 self.startProcess(deviceid)
                             else:  # 检查进程心跳是否超过3分钟
                                 key = 'timeout_%s' % deviceid
                                 activeTime = cache.get(key)
                                 if activeTime:
                                     checkTime = (datetime.datetime.now() - datetime.datetime(2017, 1, 1)).seconds
                                     if (checkTime - int(activeTime)) > 180:  # 进程心跳时间超过3分种,重启进程
                                         self.processDict[deviceid].terminate()
                                         self.startProcess(deviceid)
                     else:
                         if self.processDict.has_key(deviceid) and self.processDict.get(deviceid).is_alive():
                             self.processDict[deviceid].terminate()
                             del self.processDict[deviceid]
                 elif deviceid in self.processDict:
                     self.processDict[device].terminate()
                     del self.processDict[deviceid]
         except Exception:
             logger.error(traceback.format_exc())
         time.sleep(10)
Пример #2
0
    def action(self,d,z,args):
        z.toast("开始执行:检测手机IP模块")
        while True:
            # 开关飞行模式
            d.server.adb.cmd( "shell", "settings put global airplane_mode_on 1" ).communicate( )
            d.server.adb.cmd( "shell",
                              "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true" ).communicate( )
            z.sleep( 6 )
            d.server.adb.cmd( "shell", "settings put global airplane_mode_on 0" ).communicate( )
            d.server.adb.cmd( "shell",
                              "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false" ).communicate( )
            while True:
                ping = d.server.adb.cmd("shell", "ping -c 3 baidu.com").communicate()
                print(ping)
                if 'icmp_seq'and 'bytes from'and'time' in ping[0]:
                    break
                z.sleep(2)

            # 获取手机IP
            IPList = d.server.adb.cmd( "shell", "curl http://ipecho.net/plain" ).communicate( )
            IP = IPList[0]
            print( IP )

            # IP添加到缓存
            ip = cache.get( IP )
            print(ip)
            if ip is None:
                timeoutStr = args['time_out']
                timeout = int( timeoutStr ) * 60
                cache.set( IP, IP, timeout )
                break
            else:
                continue
Пример #3
0
    def IPCheckRepitition(self, z, d, args):
        z.toast("正在检测IP...")
        while True:
            # 开关飞行模式
            d.server.adb.cmd(
                "shell",
                "settings put global airplane_mode_on 1").communicate()
            d.server.adb.cmd(
                "shell",
                "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true"
            ).communicate()
            z.sleep(3)
            d.server.adb.cmd(
                "shell",
                "settings put global airplane_mode_on 0").communicate()
            d.server.adb.cmd(
                "shell",
                "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false"
            ).communicate()

            t = 0
            while t < 6:
                ping = d.server.adb.cmd("shell",
                                        "ping -c 3 baidu.com").communicate()
                print(ping)
                if 'icmp_seq' and 'bytes from' and 'time' in ping[0]:
                    break
                z.sleep(10)
                z.heartbeat()
                z.sleep(10)
                t = t + 1
            if t >= 6:
                z.toast("网络无法ping通,重新开关飞行模式")
                continue

            # 获取手机IP
            IPList = d.server.adb.cmd(
                "shell", "curl http://ipecho.net/plain").communicate()
            IP = IPList[0]
            print(IP)

            # IP添加到缓存
            ip = cache.get(IP)
            print(ip)
            if ip is None:
                timeoutStr = args['time_out']
                timeout = int(timeoutStr) * 60
                cache.set(IP, IP, timeout)
                z.toast("IP检测完成")
                break
            else:
                continue
Пример #4
0
    def handler(self, signum, frame):
        key = 'timeout_%s' % self.serial
        activeTime = cache.get(key)
        if (activeTime is None):
            self.z.heartbeat()
            return
        checkTime = (datetime.datetime.now() - datetime.datetime(2017, 1 ,1)).seconds
        #print checkTime - int(activeTime)
        if (checkTime - int(activeTime)) > 120 :
            raise AssertionError

        signal.signal(signal.SIGALRM, self.handler)
        signal.alarm(60)
Пример #5
0
    def __init__(self, serial):
        self.platform = dbapi.GetSetting("sms_platform")
        # self.platform = "xunma"
        if self.platform == 'xunma':
            self.platform = "xunma";
        elif self.platform == 'hellotrue':  #爱乐赞
            self.platform = "hellotrue";
        else:
            self.platform = "jyzszp"; #玉米

        self.username = dbapi.GetSetting("%s_user"%self.platform);
        self.password = dbapi.GetSetting("%s_password" % self.platform);

        if self.username is None or self.password is None:
            if not cache.get("EMPTY_SMS_CODE_USER_PASS"):
                cache.set("EMPTY_SMS_CODE_USER_PASS", True)
                dbapi.log_error("", "没有设置接码帐号密码","没有设置接码帐号密码")
                return

        self.WECHAT_REGISTER = "wechat_register";
        self.QQ_CONTACT_BIND = "qq_contact_bind";
        self.QQ_REGISTER = "qq_register";
        self.QQ_TOKEN_BIND = "qq_token_bind";
        self.ALIPAY_REGISTER = "alipay_register";

        self.WECHAT_MAIL_BIND = "wechat_mail_bind";

        self.im_type_list={}
        self.im_type_list[self.WECHAT_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.WECHAT_REGISTER));
        self.im_type_list[self.QQ_CONTACT_BIND] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_CONTACT_BIND));
        self.im_type_list[self.QQ_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_REGISTER));
        self.im_type_list[self.QQ_TOKEN_BIND] = dbapi.GetSetting("%s_%s" % (self.platform,self.QQ_TOKEN_BIND));
        self.im_type_list[self.ALIPAY_REGISTER] = dbapi.GetSetting("%s_%s" % (self.platform,self.ALIPAY_REGISTER));

        self.im_type_list[self.WECHAT_MAIL_BIND] = dbapi.GetSetting( "%s_%s" % (self.platform, self.WECHAT_MAIL_BIND) );


        if self.platform == 'xunma':
            self.client = client_xunma(serial, self.username, self.password,self.im_type_list)
        elif self.platform == 'hellotrue':  #爱乐赞
            self.client = client_hellotrue(serial , self.username, self.password,self.im_type_list)
        else:
            self.client = client_jyzszp(serial, self.username, self.password,self.im_type_list) #玉米
Пример #6
0
    def __init__(self):
        self.platform = dbapi.GetSetting("image_platform")
        if self.platform == 'lianzong':
            self.platform = "lianzong"
        else:
            self.platform = "ruokuai"

        self.username = dbapi.GetSetting("%s_user" % self.platform)
        self.password = dbapi.GetSetting("%s_password" % self.platform)

        if self.username is None or self.password is None:
            if not cache.get("EMPTY_IMAGE_CODE_USER_PASS"):
                cache.set("EMPTY_IMAGE_CODE_USER_PASS", True)
                dbapi.log_error("", "没有设置打码帐号密码", "没有设置打码帐号密码")
                return
        if self.platform == 'lianzong':
            self.client = client_lianzong(self.username, self.password)
        else:
            self.client = client_ruokuai(self.username, self.password)
        self.CODE_TYPE_4_NUMBER_CHAR = "4_number_char"
Пример #7
0
 def getModuleRunInterval_new(self, mid):
     key = '%s_%s' % (self.server.adb.device_serial(), mid)
     lasttime = cache.get(key)
     return lasttime
Пример #8
0
 def getModuleRunInterval(self, mid):
     key = '%s_%s' % (self.server.adb.device_serial(), mid)
     lasttime = cache.get(key)
     if lasttime is None:
         return None
     return (int(time.time()) - int(lasttime)) / 60
Пример #9
0
    def getCode(self, im, im_type, timeout=60):
        import base64
        #f = open(r'c:\jb51.gif', 'rb')  # 二进制方式打开图文件
        if isinstance(im, str):
            ls_f = base64.b64encode(im)
        else:
            ls_f = base64.b64encode(im.read())  # 读取文件内容,转换为base64编码
            im.close()
        #f.close()
        params = {
            "ts": int(time.time()),
            "softwareId": self.soft_id,
            "software": self.soft_name,
            "sdk": "PYTHON/1.0",
            "username": self.username,
            "userPassword": self.password,
            "captchaData": ls_f,
            "captchaType": 1,
            "captchaMinLength": 4,
            "captchaMaxLength": 8
        }
        params = json.dumps(params)
        sign = params + "|" + self.soft_secret
        import hashlib
        m2 = hashlib.md5()
        m2.update(sign)
        sign = m2.hexdigest()

        headers = {'L-Request-Signature': sign}
        headers.update(self.headers)
        requests.adapters.DEFAULT_RETRIES = 5
        request = urllib2.Request(url='https://api.jsdama.com/upload',
                                  headers=headers,
                                  data=params)
        response = urllib2.urlopen(request)

        r = response.read()
        #r = requests.post('https://api.jsdama.com/upload', data=params, headers=self.headers)
        result = json.loads(r)
        if result["errorCode"] == 0:
            params = {
                "ts": int(time.time()),
                "softwareId": self.soft_id,
                "software": self.soft_name,
                "sdk": "PYTHON/1.0",
                "username": self.username,
                "userPassword": self.password,
                "captchaId": result["data"]["captchaId"]
            }
            params = json.dumps(params)
            sign = params + "|" + self.soft_secret
            import hashlib
            m2 = hashlib.md5()
            m2.update(sign)
            sign = m2.hexdigest()

            headers = {'L-Request-Signature': sign}
            headers.update(self.headers)
            requests.adapters.DEFAULT_RETRIES = 5
            request = urllib2.Request(url='https://api.jsdama.com/recognition',
                                      headers=headers,
                                      data=params)
            response = urllib2.urlopen(request)

            r = response.read()
            result = json.loads(r)
            if result["errorCode"] == 0:
                return {
                    "Result": result["data"]["recognition"],
                    "Id": result["data"]["captchaId"]
                }
        else:
            if not cache.get("LIANZONG_CODE_ERROR"):
                cache.set("LIANZONG_CODE_ERROR", True)
                dbapi.log_error("", "联众打码异常", result["errorMessage"])
                return