示例#1
0
def add_cron(project_id):
    try:
        request.get_json()["projectId"] = ObjectId(project_id)
        request.get_json()["createAt"] = datetime.datetime.utcnow()
        request.get_json()["lastUpdateTime"] = datetime.datetime.utcnow()
        data = request.get_json()

        if 'interval' in data:
            data['interval'] = float(data['interval'])

        if 'interval' in data and data['interval'] < 60:
            return jsonify({'status': 'failed', 'data': '定时任务间隔不可小于60秒!'})

        if 'runDate' in data:
            data['runDate'] = common.frontend_date_str2datetime(data['runDate'])

        filtered_data = CronTab.filter_field(data, use_set_default=True)
        if filtered_data.get('runDate'):
            cron = Cron(test_case_suite_id_list=filtered_data.get('testCaseSuiteIdList'),
                        test_domain=filtered_data.get('testDomain'),
                        alarm_mail_list=filtered_data.get('alarmMailList'),
                        is_ding_ding_notify=filtered_data.get('isDingDingNotify'),
                        ding_ding_access_token=filtered_data.get('dingdingAccessToken'),
                        ding_ding_notify_strategy=filtered_data.get('dingdingNotifyStrategy'),
                        is_enterprise_wechat_notify=filtered_data.get('isEnterpriseWechatNotify'),
                        enterprise_wechat_access_token=filtered_data.get('enterpriseWechatAccessToken'),
                        enterprise_wechat_notify_strategy=filtered_data.get('enterpriseWechatNotifyStrategy'),
                        trigger_type=filtered_data.get('triggerType'),
                        test_case_id_list=filtered_data.get('testCaseIdList'),
                        is_execute_forbiddened_case=filtered_data.get('isExecuteForbiddenedCase'),
                        run_date=filtered_data.get('runDate'))
        else:
            cron = Cron(test_case_suite_id_list=filtered_data.get('testCaseSuiteIdList'),
                        test_domain=filtered_data.get('testDomain'),
                        alarm_mail_list=filtered_data.get('alarmMailList'),
                        is_ding_ding_notify=filtered_data.get('isDingDingNotify'),
                        ding_ding_access_token=filtered_data.get('dingdingAccessToken'),
                        ding_ding_notify_strategy=filtered_data.get('dingdingNotifyStrategy'),
                        is_enterprise_wechat_notify=filtered_data.get('isEnterpriseWechatNotify'),
                        enterprise_wechat_access_token=filtered_data.get('enterpriseWechatAccessToken'),
                        enterprise_wechat_notify_strategy=filtered_data.get('enterpriseWechatNotifyStrategy'),
                        trigger_type=filtered_data.get('triggerType'),
                        test_case_id_list=filtered_data.get('testCaseIdList'),
                        is_execute_forbiddened_case=filtered_data.get('isExecuteForbiddenedCase'),
                        seconds=filtered_data.get('interval'))
        cron_id = cron_manager.add_cron(cron)
        for key, value in filtered_data.items():

            CronTab.update({"_id": cron_id},
                           {'$set': {key: value}})
        update_response = CronTab.update({"_id": cron_id},
                                         {'$set': {'lastUpdateTime': datetime.datetime.utcnow()}})
        if update_response["n"] == 0:
            return jsonify({'status': 'failed', 'data': '新建成功但未找到相应更新数据!'})
        return jsonify({'status': 'ok', 'data': '新建成功'})
    except BaseException as e:
        return jsonify({'status': 'failed', 'data': '新建失败: %s' % e})
    def update_cron(self, cron_id, cron_info):
        if not isinstance(cron_id, str):
            raise TypeError('cron_id must be str')

        if not isinstance(cron_info, dict):
            raise TypeError('cron_info must be dict')

        trigger_type = cron_info.get('triggerType')
        interval = cron_info.get('interval')
        run_date = cron_info.get('runDate')
        test_case_suite_id_list = cron_info.get('testCaseSuiteIdList')
        is_execute_forbiddened_case = cron_info.get('isExecuteForbiddenedCase')
        test_case_id_list = cron_info.get('testCaseIdList')
        test_domain = cron_info.get('testDomain')
        alarm_mail_list = cron_info.get('alarmMailList')
        is_ding_ding_notify = cron_info.get('isDingDingNotify')
        ding_ding_access_token = cron_info.get('dingdingAccessToken')
        ding_ding_notify_strategy = cron_info.get('dingdingNotifyStrategy')

        try:
            if trigger_type == 'interval' and int(interval) > 0:
                self.scheduler.modify_job(job_id=cron_id, trigger=IntervalTrigger(seconds=interval))
            elif trigger_type == 'date':
                # TODO 判断run_date类型
                self.scheduler.modify_job(job_id=cron_id, trigger=DateTrigger(run_date=run_date))
            else:
                raise TypeError('更新定时任务触发器失败!')
            if run_date:
                cron = Cron(test_case_suite_id_list=test_case_suite_id_list,
                            is_execute_forbiddened_case=is_execute_forbiddened_case,
                            test_domain=test_domain,
                            alarm_mail_list=alarm_mail_list,
                            is_ding_ding_notify=is_ding_ding_notify,
                            ding_ding_access_token=ding_ding_access_token,
                            ding_ding_notify_strategy=ding_ding_notify_strategy,
                            trigger_type=trigger_type,  # 更新定时器时,此参数并没有真正起到作用, 仅修改展示字段
                            test_case_id_list=test_case_id_list,
                            run_date=run_date)  # 更新定时器时,此参数并没有起到作用, 仅修改展示字段
            else:
                cron = Cron(test_case_suite_id_list=test_case_suite_id_list,
                            is_execute_forbiddened_case=is_execute_forbiddened_case,
                            test_domain=test_domain,
                            alarm_mail_list=alarm_mail_list,
                            is_ding_ding_notify=is_ding_ding_notify,
                            ding_ding_access_token=ding_ding_access_token,
                            ding_ding_notify_strategy=ding_ding_notify_strategy,
                            trigger_type=trigger_type,  # 更新定时器时,此参数并没有起到作用, 仅修改展示字段
                            test_case_id_list=test_case_id_list,
                            seconds=interval)  # 更新定时器时,此参数并没有起到作用, 仅修改展示字段
            # 玄学,更改job的时候必须改args,不能改func
            self.scheduler.modify_job(job_id=cron_id, coalesce=True, args=[cron])

        except BaseException as e:
            raise TypeError('更新定时任务失败: %s' % e)
示例#3
0
def on_exec_test(data):
    try:
        data['testCaseSuiteIdList'] = data['testCaseSuiteIdList'].strip(
        ).split(';')
    except BaseException:
        raise TypeError('参数 「testCaseSuiteIdList」 不合法')

    try:
        data['testDomain'] = data['testDomain'].strip()
    except BaseException:
        raise TypeError('参数 「testDomain」 不合法')

    data['isExecuteForbiddenedCase'] = True if data.get('isExecuteForbiddenedCase') \
                                               and common.can_convert_to_str(data.get('isExecuteForbiddenedCase'))\
                                               and data.get('isExecuteForbiddenedCase').upper() == 'TRUE' else False

    data['isDingDingNotify'] = True if data.get('isDingDingNotify')\
                                            and common.can_convert_to_str(data.get('isDingDingNotify'))\
                                            and data.get('isDingDingNotify').upper() == 'TRUE' else False

    data['isEnterpriseWechatNotify'] = True if data.get('isEnterpriseWechatNotify')\
                                       and common.can_convert_to_str(data.get('isEnterpriseWechatNotify')) \
                                       and data.get('isEnterpriseWechatNotify').upper() == 'TRUE' else False

    data['dingdingAccessToken'] = data.get('dingdingAccessToken').strip() if data.get('dingdingAccessToken')\
                                        and common.can_convert_to_str(data.get('dingdingAccessToken')) else None

    data['enterpriseWechatAccessToken'] = data.get('enterpriseWechatAccessToken').strip()\
        if data.get('enterpriseWechatAccessToken') and common.can_convert_to_str(data.get('enterpriseWechatAccessToken')) else None

    try:
        data['alarmMailList'] = data['alarmMailList'].strip().split(
            ';') if data.get('alarmMailList') else []
    except BaseException:
        raise TypeError('参数 「alarmMailList」 不合法')

    data["testCaseIdList"] = []
    data['triggerType'] = "date"
    data['runDate'] = datetime.datetime.now()  # 瞬间触发
    filtered_data = CronTab.filter_field(data, use_set_default=True)
    cron = Cron(
        test_case_suite_id_list=filtered_data.get('testCaseSuiteIdList'),
        test_domain=filtered_data.get('testDomain'),
        alarm_mail_list=filtered_data.get('alarmMailList'),
        trigger_type=filtered_data.get('triggerType'),
        test_case_id_list=filtered_data.get('testCaseIdList'),
        is_execute_forbiddened_case=filtered_data.get(
            'isExecuteForbiddenedCase'),
        run_date=filtered_data.get('runDate'),
        is_ding_ding_notify=filtered_data.get('isDingDingNotify'),
        ding_ding_access_token=filtered_data.get('dingdingAccessToken'),
        is_enterprise_wechat_notify=filtered_data.get(
            'isEnterpriseWechatNotify'),
        enterprise_wechat_access_token=filtered_data.get(
            'enterpriseWechatAccessToken'),
        is_web_hook=True)
    cron_manager.add_cron(cron)