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")
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
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
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
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)