Esempio n. 1
0
    def sync_table_task(self, table_name, task, sync_time):

        # 获得任务表名称
        task_table_name = common.get_task_table_name(table_name)

        task_list = task.get('task_list')
        # 遍历所有的时间段
        for task_item in task_list:
            # 如果是已经完成的时间段
            if task_item.get('finish'):
                continue

            start_time = task_item.get('start_time')
            end_time = task_item.get('end_time')

            # 判断当前时间段是否适合同步
            if end_time > sync_time:
                continue

            # 有操作则先更新时间
            task_item['_utime'] = common.get_now_time()

            # 获得更新数据的任务信息
            update_item = task_item.get('update')

            # 如果同步修改出错 则中断同步, 需要查出问题 再进行同步,否则会导致数据不一致
            if not self.sync_update_data(table_name, update_item, start_time,
                                         end_time):
                self.data_sync_db.save(task_table_name, task)
                return

            # 获得删除数据的任务信息
            delete_item = task_item.get('delete')
            if not self.sync_delete_data(table_name, delete_item, start_time,
                                         end_time):
                self.data_sync_db.save(task_table_name, task)
                return

            # 流程能跑到这里,必然确定 修改的数据与删除的数据都已经同步到M2
            task_item['finish'] = True

            # 存储任务执行记录
            self.data_sync_db.save(task_table_name, task)

        # 这里需要判断是否所有的任务都已经完成了
        all_finish = True
        for task_item in task_list:
            if not task_item.get('finish'):
                all_finish = False
                break

        # 如果流程执行到最下面,则证明所有的同步都成功了
        task['finish'] = all_finish
        task['_utime'] = common.get_now_time()
        self.data_sync_db.save(task_table_name, task)
Esempio n. 2
0
def get_classroom(condition):
    try:
        if condition == u"博南" or condition == u"博学南楼":
            bds = [u'博南A楼',u'博南B楼',u'博南C楼']
            bncond = "buildingName in ('"+"','".join(bds)+"')"
        elif condition == u"博北" or condition == u"博学北楼":
            bds = [u'博北A楼',u'博北B楼',u'博北C楼',u'博北D楼']
            bncond = "buildingName in ('"+"','".join(bds)+"')"
        elif condition == u"":
            bncond = "0 = 0"
        else:
             bncond = "buildingName = '" + condition + "'"
        qweek = common.get_week_today()
        tmplist=common.get_classindex(common.get_now_time(),common.get_next_time())
        if tmplist:
            jccondition="courseTime in("+",".join(str(x) for x in tmplist)+")"
        else:
            jccondition="1=0"
        sqlstr="select * from classroomDB where %s and roomID not in(select roomID from scheduleDB where courseWeekday='%s' and fromWeek <= %s and endWeek >= %s and %s) limit 0,30"%(bncond,common.get_weekday_today(),qweek,qweek,jccondition)
        qresults = db.query(sqlstr)
        retstr = ""
        for result in qresults:
            retstr = u"%s教室:%s 座位数:%s 类型:%s\n"%(retstr,result.roomName,result.seatCount,result.roomType)
    except:
        return None
    else:
        return retstr
Esempio n. 3
0
def get_classroom(condition):
    try:
        if condition == u"博南" or condition == u"博学南楼":
            bds = [u"博南A楼", u"博南B楼", u"博南C楼"]
            bncond = "buildingName in ('" + "','".join(bds) + "')"
        elif condition == u"博北" or condition == u"博学北楼":
            bds = [u"博北A楼", u"博北B楼", u"博北C楼", u"博北D楼"]
            bncond = "buildingName in ('" + "','".join(bds) + "')"
        elif condition == u"":
            bncond = "0 = 0"
        else:
            bncond = "buildingName = '" + condition + "'"
        qweek = common.get_week_today()
        tmplist = common.get_classindex(common.get_now_time(), common.get_next_time())
        if tmplist:
            jccondition = "courseTime in(" + ",".join(str(x) for x in tmplist) + ")"
        else:
            jccondition = "1=0"
        sqlstr = (
            "select * from classroomDB where %s and roomID not in(select roomID from scheduleDB where courseWeekday='%s' and fromWeek <= %s and endWeek >= %s and %s) limit 0,30"
            % (bncond, common.get_weekday_today(), qweek, qweek, jccondition)
        )
        qresults = db.query(sqlstr)
        retstr = ""
        for result in qresults:
            retstr = u"%s教室:%s 座位数:%s 类型:%s\n" % (retstr, result.roomName, result.seatCount, result.roomType)
    except:
        return None
    else:
        return retstr
Esempio n. 4
0
 def get(self):
     user_id = session.get('user_id')
     testcases = TestCases.query.filter(TestCases.testcase_scene_id.is_(None), TestCases.user_id == user_id). \
         with_entities(TestCases.id, TestCases.name, TestCases.method, TestCases.url, TestCases.data,
                       TestCases.regist_variable, TestCases.regular, TestCases.group_id.name,
                       TestCases.request_headers_id, TestCases.testcase_scene_id, TestCases.hope_result).all()
     now = get_now_time()
     dir_path, xlsx_name = WriterXlsx('testcases_' + now,
                                      testcases).open_xlsx()
     return send_from_directory(dir_path, xlsx_name, as_attachment=True)
Esempio n. 5
0
    def sync_update_data(self, table_name, update_item, start_time, end_time):
        count = 0
        result_list = list()

        # 如果已经完成了修改操作同步 也不在进行同步
        finish = update_item.get('finish')
        if finish:
            return True

        error_times = update_item.get('error_times', 0)
        if error_times >= self.MAX_ERROR_TIMES:
            self.log.error("同步超过最大错误次数,不再进行同步: {} {} - {}".format(
                table_name, start_time, end_time))
            return False

        try:
            for item in self.app_data_db.traverse_batch(
                    table_name,
                {'_utime': {
                    "$gte": start_time,
                    "$lte": end_time
                }}):
                count += 1
                item['logic_delete'] = 0
                result_list.append(item)
                if len(result_list) >= self.MAX_BATCH_SIZE:
                    self.m2_db.insert_batch_data(table_name, result_list)
                    del result_list[:]

            self.m2_db.insert_batch_data(table_name, result_list)
            finish = True
        except Exception as e:
            self.log.error('修改数据同步出错: {} {} - {}'.format(
                table_name, start_time, end_time))
            self.log.exception(e)
            finish = False
            update_item['error_times'] = error_times + 1

        # 更新时间
        update_item['_utime'] = common.get_now_time()
        update_item['finish'] = finish

        self.log.info("更新数据量为: {} {} - {} {}".format(table_name, start_time,
                                                     end_time, count))
        return finish
Esempio n. 6
0
 def post(self):
     if request.files.get('upload_xlsx'):
         xlsx = request.files['upload_xlsx']
         print('xlsx', xlsx)
         if allowed_file(xlsx.filename):
             now = get_now_time()
             dir_path = TESTCASE_XLSX_PATH + 'upload'
             Image = now + os.path.splitext(xlsx.filename)[-1]
             xlsx.save(os.path.join(dir_path, Image))
             xlsx_path = dir_path + '/' + Image
             row_list = read_xlsx(xlsx_path)
             print('row_list:', row_list)
             add_upload_testcases(row_list)
             os.remove(xlsx_path)
         else:
             return jsonify(err='错误的文件格式')
     else:
         return jsonify(err='请选择上传文件')
     return jsonify(msg='用例文件上传成功')
Esempio n. 7
0
    def sync_data(self):
        self.log.info('开始同步数据...')

        # 先获得当前时间点
        current_time = common.get_format_time(
            common.get_time_stamp(common.get_now_time()) -
            self.SLEEP_PERIOD_TIME)
        self.log.info("当前需要同步的时间切面为: {}".format(current_time))

        # 遍历任务表
        for table_name in self.app_data_table_list:

            task_table_name = common.get_task_table_name(table_name)
            self.log.info('当前同步的表名称: {}'.format(table_name))
            self.log.info('当前同步的任务表名称: {}'.format(task_table_name))

            # 按表遍历同步数据, 从时间最久远开始遍历
            for task in self.data_sync_db.traverse_sort(
                    task_table_name, {'finish': {
                        '$ne': True
                    }}, [("_id", MongDb.ASCENDING)]):
                self.sync_table_task(table_name, task, current_time)

        self.log.info('当前时间截面数据同步完成...')
Esempio n. 8
0
    def sync_delete_data(self, table_name, delete_item, start_time, end_time):

        # 获得删除表表名
        delete_table_name = common.get_del_table_name(table_name)

        # 如果已经完成了删除操作同步 也不在进行同步
        finish = delete_item.get('finish')
        if finish:
            return True

        error_times = delete_item.get('error_times', 0)
        if error_times >= self.MAX_ERROR_TIMES:
            self.log.error("同步超过最大错误次数,不再进行同步: {} {} - {}".format(
                table_name, start_time, end_time))
            return False

        count = 0
        result_list = list()
        try:
            # 这里查找删除记录表
            for item in self.data_sync_db.traverse_batch(
                    delete_table_name,
                {'_utime': {
                    "$gte": start_time,
                    "$lte": end_time
                }}):
                _record_id = item.get('_record_id')
                if _record_id is None:
                    self.log.error('没有主键,无法进行逻辑删除: {}'.format(item))
                    continue

                # 根据主键查找对应的M1数据表
                data_item = self.app_data_db.find_one(
                    table_name, {'_record_id': _record_id})
                if data_item is None:
                    continue

                # 统计
                count += 1

                # 设置逻辑删除字段 为 1 已经删除该字段
                data_item['logic_delete'] = 1

                # 删除字段必须要修改_utime
                data_item['_utime'] = common.get_now_time()

                result_list.append(data_item)
                if len(result_list) >= self.MAX_BATCH_SIZE:
                    self.m2_db.insert_batch_data(table_name, result_list)
                    del result_list[:]

            self.m2_db.insert_batch_data(table_name, result_list)
            finish = True
        except Exception as e:
            self.log.error('删除数据同步出错: {} {} - {}'.format(
                table_name, start_time, end_time))
            self.log.exception(e)
            finish = False
            delete_item['error_times'] = error_times + 1

        # 更新时间
        delete_item['_utime'] = common.get_now_time()
        delete_item['finish'] = finish
        self.log.info("删除数据量为: {} {} - {} {}".format(table_name, start_time,
                                                     end_time, count))
        return finish