Exemple #1
0
    def save(self, request):
        cdata = self.cleaned_data
        id = cdata.get('id')
        envi_id = cdata.get('envi_id')

        obj = get_object_or_404(SqlOrdersContents, pk=id)
        context = {}
        if obj.sql_type in ['DDL', 'DML']:
            status, msg = check_db_conn_status(obj.host, obj.port)
            if status:
                # 只要审核通过后,才能生成执行任务
                if obj.progress in ('2', '3', '4', '6'):
                    if SqlOrdersExecTasks.objects.filter(
                            related_id=id).exists():
                        taskid = SqlOrdersExecTasks.objects.filter(
                            related_id=id).first().taskid
                        if obj.remark == u'数据导出':
                            jump_url = f'/sqlorders/export_tasks/{taskid}'
                        else:
                            jump_url = f'/sqlorders/perform_tasks/{taskid}'
                        context = {'status': 0, 'jump_url': jump_url}
                    else:
                        # 分割SQL,转换成sql列表
                        # 移除sql头尾的分号;
                        split_sqls = [
                            sql.strip(';')
                            for sql in sqlparse.split(obj.contents,
                                                      encoding='utf8')
                        ]
                        taskid = datetime.now().strftime("%Y%m%d%H%M%S%f")

                        # 生成执行任务记录
                        for sql in split_sqls:
                            SqlOrdersExecTasks.objects.create(
                                uid=request.user.uid,
                                user=obj.proposer,
                                taskid=taskid,
                                host=obj.host,
                                port=obj.port,
                                database=obj.database,
                                sql=sql.strip(';'),
                                sql_type=obj.sql_type,
                                envi_id=envi_id,
                                related_id=id)
                        if obj.remark == u'数据导出':
                            jump_url = f'/sqlorders/export_tasks/{taskid}'
                        else:
                            jump_url = f'/sqlorders/perform_tasks/{taskid}'
                        context = {'status': 0, 'jump_url': jump_url}
                else:
                    context = {'status': 2, 'msg': '审核未通过或任务已关闭'}
            else:
                context = {
                    'status': 2,
                    'msg': f'无法连接到数据库,请联系系统管理员\n主机: {obj.host}\n端口: {obj.port}'
                }
        elif obj.sql_type in ['OPS']:
            context = {'status': 2, 'msg': '运维工单无法生成执行任务,请手动执行'}

        return context
Exemple #2
0
    def query(self):
        cdata = self.cleaned_data
        schema = cdata['schema']
        host, port, schema = schema.split(',')

        status, msg = check_db_conn_status(host, port)
        if status:
            table_list = GetTableInfo(host, port, schema).get_column_info()
            context = {'status': 0, 'msg': '', 'data': table_list}
        else:
            context = {'status': 2, 'msg': f'无法连接到数据库,请联系管理员,\n主机: {host}\n端口: {port}'}
        return context
Exemple #3
0
    def save(self, request):
        cdata = self.cleaned_data
        id = cdata.get('id')
        envi_id = cdata.get('envi_id')

        obj = get_object_or_404(SqlOrdersContents, pk=id)
        status, msg = check_db_conn_status(obj.host, obj.port)
        if status:
            # 只要审核通过后,才能生成执行任务
            if obj.progress in ('2', '3', '4', '6'):
                if SqlOrdersExecTasks.objects.filter(related_id=id).exists():
                    taskid = SqlOrdersExecTasks.objects.filter(related_id=id).first().taskid
                    context = {'status': 0,
                               'jump_url': f'/sqlorders/perform_tasks/{taskid}'}
                else:
                    host = obj.host
                    database = obj.database
                    port = obj.port
                    sql_content = obj.contents

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

                    # 对OSC执行的SQL生成sqlsha1
                    result = incep_audit.make_sqlsha1()
                    taskid = datetime.now().strftime("%Y%m%d%H%M%S%f")

                    # 生成执行任务记录
                    for row in result:
                        SqlOrdersExecTasks.objects.create(
                            uid=request.user.uid,
                            user=obj.proposer,
                            taskid=taskid,
                            host=host,
                            port=port,
                            database=database,
                            sql=row['SQL'],
                            sqlsha1=row['sqlsha1'],
                            affected_row=row['Affected_rows'],
                            sql_type=obj.sql_type,
                            envi_id=envi_id,
                            related_id=id
                        )

                    context = {'status': 0,
                               'jump_url': f'/sqlorders/perform_tasks/{taskid}'}
            else:
                context = {'status': 2, 'msg': '审核未通过或任务已关闭'}
        else:
            context = {'status': 2, 'msg': f'无法连接到数据库,请联系系统管理员\n主机: {obj.host}\n端口: {obj.port}'}

        return context