Exemplo n.º 1
0
 def create(cls, tag, project_id, description):
     try:
         creator = g.userid if g.userid else None
         ret = Tag.query.filter(Tag.tag == tag).first()
         if ret:
             if ret.status == Tag.DISABLE:
                 with db.auto_commit():
                     ret.status = Tag.ACTIVE
                     ret.creator = creator
                     db.session.add(ret)
                 return 0
             else:
                 raise SaveObjectException('存在相同名称的标签')
         else:
             task = Tag(
                 tag=tag,
                 project_id=project_id,
                 description=description,
                 creator=creator
             )
             db.session.add(task)
             db.session.commit()
             return 0
     except Exception as e:
         current_app.logger.error(str(e))
         raise SaveObjectException
Exemplo n.º 2
0
def create_by_one2one(send_id, rec_ids, content, message_type, group):
    """
    创建一条私密消息,用于少量用户的流程通知
    :param send_id: 发送者
    :param rec_ids: 接收者
    :param content: 内容
    :param message_type: 类型
    :param group: 用户组
    :return: code
    """
    rec_ids = list(set(rec_ids))
    if not message_type:
        message_type = Content.PRIVATE
    if not group:
        group = 'public'
    if send_id is not None and content:
        with db.auto_commit():
            content = Content(send_id=send_id,
                              content=content,
                              type=message_type,
                              group=group)
            db.session.add(content)
            db.session.flush()
            content_id = content.id
            if content_id:
                with db.auto_commit():
                    for i in rec_ids:
                        db.session.add(
                            Message(rec_id=int(i),
                                    content_id=content_id,
                                    status=Message.UNREAD))
        # for i in rec_ids:
        #     push2redis(i)
        return 0
    raise SaveObjectException()
Exemplo n.º 3
0
 def auto_commit(self):
     try:
         yield
         self.session.commit()
     except Exception:
         self.session.rollback()
         raise SaveObjectException()
Exemplo n.º 4
0
    def update(cls, id, end_time, process, jenkins_url, status, app_version, begin_time, report_url, run_time,
               actual_run_time, download_app_status):
        try:
            monkey = Monkey.query.get(id)
            check_list = {
                'id': id,
                'end_time': end_time,
                'jenkins_url': jenkins_url,
                'process': process,
                'status': status,
                'app_version': app_version,
                'begin_time': begin_time,
                'report_url': report_url,
                'run_time': run_time,
                'actual_run_time': actual_run_time,
                'download_app_status': download_app_status
            }

            for key in check_list.keys():
                if check_list.get(key) is not None:
                    setattr(monkey, key, check_list.get(key))

            db.session.add(monkey)
            db.session.commit()

            return 0, None
        except Exception as e:
            current_app.logger.error(e)
            current_app.logger.error(traceback.format_exc())
            raise SaveObjectException()
Exemplo n.º 5
0
    def update_process(cls, id, process):
        try:
            monkey = MonkeyDeviceStatus.query.get(id)
            monkey.process = process

            db.session.add(monkey)
            db.session.commit()

            return 0, None
        except Exception as e:
            current_app.logger.error(e)
            current_app.logger.error(traceback.format_exc())
            raise SaveObjectException()
Exemplo n.º 6
0
 def start_jenkins_job(cls, parameters):
     try:
         jenkins_server_url = current_app.config['CI_AUTO_MAN_JENKINS_URL']
         jenkins_server_username = current_app.config['CI_AUTO_MAN_JENKINS_AUTH']
         job_name = current_app.config['CI_AUTO_MAN_JENKINS_MONKEY_JOB']
         jenkins_server = jenkins.Jenkins(jenkins_server_url, username=jenkins_server_username.get('username'),
                                          password=jenkins_server_username.get('password'))
         jenkins_server.build_job(job_name, parameters)
         return 'Success'
     except Exception as e:
         current_app.logger.error(e)
         current_app.logger.error(traceback.format_exc())
         raise SaveObjectException()
Exemplo n.º 7
0
    def update_jenkins_url(cls, id, jenkins_url):
        try:
            monkey = Monkey.query.get(id)
            monkey.jenkins_url = jenkins_url

            db.session.add(monkey)
            db.session.commit()

            return 0, None
        except Exception as e:
            current_app.logger.error(e)
            current_app.logger.error(traceback.format_exc())
            raise SaveObjectException()
Exemplo n.º 8
0
 def update(cls, tag_id, tag_name, description):
     tag = Tag.query.get(tag_id)
     if not tag:
         raise CannotFindObjectException
     ret = Tag.query.filter(Tag.tag == tag_name, Tag.project_id == g.projectid, Tag.id != tag_id).first()
     if ret:
         raise SaveObjectException('存在相同名称的标签')
     tag.tag = tag_name
     tag.description = description
     tag.modifier = g.userid
     with db.auto_commit():
         db.session.add(tag)
     return 0
Exemplo n.º 9
0
def change_status(user, message_ids=None, isall=None):
    if message_ids:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.READ} WHERE rec_id={user} and id in ({message_ids})"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    elif isall:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.READ} WHERE rec_id={user}"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    else:
        raise SaveObjectException()
Exemplo n.º 10
0
    def update(cls, monkey_report_id, monkey_id=None, task_id=None, report_type=None, report_url=None):
        try:
            monkey_report = MonkeyReport.query.get(monkey_report_id)
            monkey_report.monkey_id = monkey_id or monkey_report.monkey_id
            monkey_report.task_id = task_id or monkey_report.task_id
            monkey_report.report_type = report_type or monkey_report.report_type
            monkey_report.report_url = report_url or monkey_report.report_url
            db.session.add(monkey_report)
            db.session.commit()

            return 0, None
        except Exception as e:
            current_app.logger.error(e)
            current_app.logger.error(traceback.format_exc())
            raise SaveObjectException()
Exemplo n.º 11
0
    def module_create(cls, name, project_id, description, parent_id=None):
        ret = Module.query.filter_by(name=name,
                                     project_id=project_id,
                                     status=Case.ACTIVE).first()
        if ret:
            raise SaveObjectException('存在相同名称的模块')

        m = Module(
            name=name,
            project_id=project_id,
            description=description,
            parent_id=parent_id,
        )
        db.session.add(m)
        db.session.commit()
        return 0, None
Exemplo n.º 12
0
 def create(cls, name, package_name, oss_url, picture, version, default_activity, user_id, size):
     try:
         monkey_package = MonkeyPackage(
             name=name,
             package_name=package_name,
             oss_url=oss_url,
             picture=picture,
             version=version,
             default_activity=default_activity,
             user_id=user_id,
             size=size
         )
         db.session.add(monkey_package)
         db.session.commit()
         return 0, None
     except Exception as e:
         current_app.logger.error(e)
         current_app.logger.error(traceback.format_exc())
         raise SaveObjectException()
Exemplo n.º 13
0
def delete_status(user, message_ids=None, isall=None):
    """
    修改通知的状态,已读改为1,删除改为2
    :return: 修改成功
    """
    if message_ids:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.DISABLE} WHERE rec_id={user} and id in ({message_ids})"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    elif isall:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.DISABLE} WHERE rec_id={user}"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    else:
        raise SaveObjectException()
Exemplo n.º 14
0
 def release_device(cls, serial):
     try:
         devices = MonkeyDeviceUsing.query.filter(MonkeyDeviceUsing.serial == serial).all()
         if len(devices) == 0:
             device = MonkeyDeviceUsing(
                 serial=serial,
                 using=MonkeyDeviceUsing.DISABLE
             )
             db.session.add(device)
             db.session.commit()
         else:
             device = devices[0]
             device.using = MonkeyDeviceUsing.DISABLE
             db.session.add(device)
             db.session.commit()
         return 0, None
     except Exception as e:
         current_app.logger.error(e)
         current_app.logger.error(traceback.format_exc())
         raise SaveObjectException()
Exemplo n.º 15
0
 def create(cls, monkey_id, mobile_id, mobile_model, mobile_version, mobile_serial, mobile_resolution, run_time):
     try:
         monkey_device_status = MonkeyDeviceStatus(
             monkey_id=monkey_id,
             mobile_id=mobile_id,
             mobile_version=mobile_version,
             mobile_model=mobile_model,
             mobile_serial=mobile_serial,
             mobile_resolution=mobile_resolution,
             run_time=run_time,
             begin_time=None,
             end_time=None,
             activity_all='',
             activity_tested='',
             process=0,
             activity_count=0,
             activity_tested_count=0,
             anr_count=0,
             crash_count=0,
             exception_count=0,
             exception_run_time=0,
             device_connect_status=0,
             screen_lock_status=0,
             setup_install_app_status=0,
             start_app_status=0,
             running_status=0,
             setup_uninstall_app_status=0,
             login_app_status=0,
             teardown_uninstall_app_status=0,
         )
         db.session.add(monkey_device_status)
         db.session.flush()
         return monkey_device_status.id
     except Exception as e:
         current_app.logger.error(e)
         current_app.logger.error(traceback.format_exc())
         raise SaveObjectException()
Exemplo n.º 16
0
    def update(cls, id, process, activity_count, activity_tested_count, activity_all, activity_tested, anr_count,
               crash_count, exception_count, exception_run_time, setup_install_app_status,
               start_app_status, begin_time, setup_uninstall_app_status, login_app_status, running_status,
               teardown_uninstall_app_status, end_time, run_time, device_connect_status, screen_lock_status,
               current_stage, running_error_reason, mobile_resolution):
        try:
            monkey_device_status = MonkeyDeviceStatus.query.get(id)

            monkey_device_status.process = process or monkey_device_status.process
            monkey_device_status.activity_count = activity_count or monkey_device_status.activity_count
            monkey_device_status.activity_tested_count = (
                    activity_tested_count or monkey_device_status.activity_tested_count)
            monkey_device_status.activity_all = activity_all or monkey_device_status.activity_all
            monkey_device_status.activity_tested = activity_tested or monkey_device_status.activity_tested
            monkey_device_status.anr_count = anr_count or monkey_device_status.anr_count
            monkey_device_status.crash_count = crash_count or monkey_device_status.crash_count
            monkey_device_status.exception_count = exception_count or monkey_device_status.exception_count
            monkey_device_status.exception_run_time = exception_run_time or monkey_device_status.exception_run_time
            monkey_device_status.end_time = end_time or monkey_device_status.end_time
            monkey_device_status.run_time = run_time or monkey_device_status.run_time
            monkey_device_status.begin_time = begin_time or monkey_device_status.begin_time
            monkey_device_status.current_stage = current_stage or monkey_device_status.current_stage
            monkey_device_status.running_error_reason = running_error_reason or monkey_device_status.running_error_reason
            monkey_device_status.mobile_resolution = mobile_resolution or monkey_device_status.mobile_resolution

            if device_connect_status is not None:
                monkey_device_status.device_connect_status = device_connect_status
                monkey_device_status.current_stage = 0
            if setup_uninstall_app_status is not None:
                monkey_device_status.setup_uninstall_app_status = setup_uninstall_app_status
                monkey_device_status.current_stage = 1
            if setup_install_app_status is not None:
                monkey_device_status.setup_install_app_status = setup_install_app_status
                monkey_device_status.current_stage = 2
            if screen_lock_status is not None:
                monkey_device_status.screen_lock_status = screen_lock_status
                monkey_device_status.current_stage = 3
            if start_app_status is not None:
                monkey_device_status.start_app_status = start_app_status
                monkey_device_status.current_stage = 4
            if login_app_status is not None:
                monkey_device_status.login_app_status = login_app_status
                monkey_device_status.current_stage = 5
            if running_status is not None:
                monkey_device_status.running_status = running_status
                monkey_device_status.current_stage = 6
            if teardown_uninstall_app_status is not None:
                monkey_device_status.teardown_uninstall_app_status = teardown_uninstall_app_status

            if monkey_device_status.setup_install_app_status == 2:
                monkey_device_status.current_stage = 101
            elif monkey_device_status.screen_lock_status == 2:
                monkey_device_status.current_stage = 102
            elif monkey_device_status.start_app_status == 2:
                monkey_device_status.current_stage = 103
            elif monkey_device_status.login_app_status == 2:
                monkey_device_status.current_stage = 104
            elif monkey_device_status.running_status == 2:
                monkey_device_status.current_stage = 105
            else:
                monkey_device_status.current_stage = current_stage or monkey_device_status.current_stage

            db.session.add(monkey_device_status)
            db.session.commit()

            return 0, None
        except Exception as e:
            current_app.logger.error(e)
            current_app.logger.error(traceback.format_exc())
            raise SaveObjectException()
Exemplo n.º 17
0
    def start_monkey(cls, user_id, mobile_infos, type_id, run_time, system_device, login_required, login_username,
                     login_password, app_id, parameters, app_install_required):
        try:
            if not isinstance(mobile_infos, list):
                return 102, 'mobile_ids 参数格式不对,应为 List 格式'

            mobile_ids = []
            mobile_models = {}
            mobile_versions = {}
            mobile_resolutions = {}

            for info in mobile_infos:
                id = info.get('mobile_id')
                mobile_ids.append(id)
                mobile_models[id] = info.get('mobile_model')
                mobile_versions[id] = info.get('mobile_version')
                mobile_resolutions[id] = info.get('mobile_resolution')

            try:
                parameters = json.loads(parameters)
            except Exception as e:
                current_app.logger.warning('error when json the parameters: {}'.format(parameters))

            if not isinstance(parameters, dict):
                return 102, 'parameters 参数格式不对,应为 dict 格式'

            app_info = MonkeyPackage.query.get(app_id)

            # 创建 Monkey 示例
            monkey = Monkey(
                app_name=app_info.name,
                app_id=app_id,
                package_name=app_info.package_name,
                begin_time=datetime.now(),
                user_id=user_id,
                report_url='',
                mobile_ids=','.join(mobile_ids),
                parameters=str(parameters),
                process=0,
                type_id=type_id,
                run_time=run_time,
                system_device=system_device,
                login_required=login_required,
                login_username=login_username,
                login_password=login_password,
                app_install_required=app_install_required,
            )

            db.session.add(monkey)
            db.session.flush()

            # 创建 MonkeyDeviceStatus
            device_serial_list = []
            task_id_list = []

            devices_info = TcDevicesnInfo.query.all()
            for mobile_id in mobile_ids:
                current_app.logger.info(mobile_id)
                device_serial_list.append(mobile_id)

                for device in devices_info:
                    if device.serial == mobile_id:
                        task = MonkeyDeviceStatusBusiness.create(monkey.id, device.id, mobile_models.get(mobile_id),
                                                                 mobile_versions.get(mobile_id), device.serial,
                                                                 mobile_resolutions.get(mobile_id), run_time)
                        task_id_list.append(str(task))
                        break

            db.session.commit()

            jenkins_parameters = {
                'PackageName': app_info.package_name,
                'DeviceName': ','.join(device_serial_list),
                'RunMode': type_id,
                'RunTime': run_time,
                'AppDownloadUrl': app_info.oss_url,
                'DefaultAppActivity': app_info.default_activity,
                'SystemDevice': system_device,
                'LoginRequired': login_required,
                'LoginUsername': login_username,
                'LoginPassword': login_password,
                'TaskId': ','.join(task_id_list),
                'MonkeyId': monkey.id,
                'InstallAppRequired': monkey.app_install_required
            }

            msg = cls.start_jenkins_job(jenkins_parameters)

            if msg == "Success":
                current_app.logger.info('build jenkins job success')

            return 0, None

        except Exception as e:
            current_app.logger.error(e)
            current_app.logger.error(traceback.format_exc())
            raise SaveObjectException()