Пример #1
0
def incep_async_tasks(self,
                      id=None,
                      user=None,
                      sql=None,
                      sqlsha1=None,
                      host=None,
                      port=None,
                      database=None,
                      exec_status=None,
                      backup=None):
    # 更新任务状态为: PROGRESS
    self.update_state(state="PROGRESS",
                      meta={
                          'user': user,
                          'host': host,
                          'port': port,
                          'database': database,
                          'sqlsha1': sqlsha1
                      })

    of_audit = InceptionSqlApi(host, port, database, sql, user)

    # 执行SQL
    exec_result = of_audit.run_exec(0, backup)

    # 更新任务进度
    update_tasks_status(id=id,
                        exec_result=exec_result,
                        exec_status=exec_status)

    # 更新任务状态为: SUCCESS
    self.update_state(state="SUCCESS")
Пример #2
0
    def save(self, request):
        cdata = self.cleaned_data
        title = cdata.get('title') + '_[' + datetime.now().strftime(
            "%Y%m%d%H%M%S") + ']'
        description = cdata.get('description')
        task_version = cdata.get('task_version')
        auditor = cdata.get('auditor')
        email_cc = ','.join(self.data.getlist('email_cc'))
        remark = cdata.get('remark')
        host, port, database = cdata.get('database').split(',')
        sql_type = cdata.get('sql_type')
        contents = cdata.get('contents')
        envi_id = cdata.get('envi_id')

        result = InceptionSqlApi(host, port, database, contents,
                                 request.user.username).is_check_pass()
        if result.get('status') == 2:
            context = result
        else:
            obj = SqlOrdersContents.objects.create(
                title=title,
                description=description,
                task_version=task_version,
                sql_type=sql_type,
                host=host,
                database=database,
                port=port,
                envi_id=envi_id,
                remark=remark,
                proposer=request.user.username,
                auditor=auditor,
                email_cc=email_cc,
                contents=contents)

            # 发送邮件
            msg_pull = SqlOrdersMsgPull(id=obj.id,
                                        user=request.user.username,
                                        type='commit')
            msg_pull.run()

            # 跳转到工单记录页面
            context = {
                'status': 0,
                'jump_url': f'/sqlorders/sql_orders_list/{envi_id}'
            }
        return context
Пример #3
0
    def query(self, request):
        cdata = self.cleaned_data
        host, port, database = cdata.get('host').split(',')
        sql_type = cdata.get('sql_type')
        contents = cdata.get('contents')

        # 对检测的SQL类型进行区分
        filter_result = sql_filter(contents, sql_type)

        # 实例化
        of_audit = InceptionSqlApi(host, port, database, contents, request.user.username)

        if filter_result['status'] == 2:
            context = filter_result
        else:
            # SQL语法检查
            context = of_audit.run_check()
        return context
Пример #4
0
def get_osc_percent(task_id):
    """实时获取pt-online-schema-change执行进度"""
    task = AsyncResult(task_id)

    while task.state in ('PENDING', 'STARTED', 'PROGRESS'):
        while task.state == 'PROGRESS':
            user = task.result.get('user')
            host = task.result.get('host')
            port = task.result.get('port')
            database = task.result.get('database')
            sqlsha1 = task.result.get('sqlsha1')

            sql = f"inception get osc_percent '{sqlsha1}'"
            of_audit = InceptionSqlApi(host, port, database, sql, user)

            # 执行SQL
            of_audit.run_status(1)

            # 每1s获取一次
            time.sleep(1)
        else:
            continue
Пример #5
0
def stop_incep_osc(user, id=None, celery_task_id=None):
    obj = SqlOrdersExecTasks.objects.get(id=id)
    host = obj.dst_host
    port = obj.dst_port
    database = obj.dst_database

    exec_status = None
    if obj.exec_status == '2':
        sqlsha1 = obj.sqlsha1
        exec_status = 0
    elif obj.exec_status == '3':
        sqlsha1 = obj.rollback_sqlsha1
        exec_status = 1

    sql = f"inception stop alter '{sqlsha1}'"

    # 执行SQL
    task = AsyncResult(celery_task_id)
    if task.state == 'PROGRESS':
        of_audit = InceptionSqlApi(host, port, database, sql, user)
        of_audit.run_status(0)

        # 更新任务进度
        update_tasks_status(id=id, exec_status=exec_status)