Ejemplo n.º 1
0
 def post(self, request, args: str = None):
     try:
         username = request.data['username']
         password = request.data['password']
     except KeyError as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
     else:
         valite = util.auth(username=username, password=password)
         if valite:
             user = Account.objects.filter(username=username).first()
             if user is not None:
                 user.set_password(util.workId())
                 user.save()
                 payload = jwt_payload_handler(user)
                 token = jwt_encode_handler(payload)
                 return Response({'token': token, 'res': '', 'permissions': user.group})
             else:
                 permissions = Account.objects.create_user(
                     username=username,
                     password=util.workId(),
                     is_staff=0,
                     group='guest')
                 permissions.save()
                 token = jwt_encode_handler(jwt_payload_handler(permissions))
                 return Response({'token': token, 'res': '', 'permissions': 'guest'})
         else:
             return HttpResponse(status=401)
Ejemplo n.º 2
0
 def commitorder(self, data, tmp, user, type, id):
     try:
         x = [x.rstrip(';') for x in tmp]
         sql = ';'.join(x)
         sql = sql.strip(' ').rstrip(';')
         workId = util.workId()
         SqlOrder.objects.get_or_create(username=user,
                                        date=util.date(),
                                        work_id=workId,
                                        status=2,
                                        basename=data['basename'],
                                        sql=sql,
                                        type=type,
                                        text=data['text'],
                                        backup=data['backup'],
                                        bundle_id=id,
                                        assigned=data['assigned'],
                                        delay=data['delay'])
         # 记录转发消息
         Usermessage.objects.create(from_user=user,
                                    time=util.date(),
                                    title='工单:' + workId + ' 提交通知',
                                    content=data['text'],
                                    to_user=data['assigned'],
                                    state='unread')
         submit_push_messages(workId=workId,
                              user=user,
                              addr_ip=addr_ip,
                              text=data['text'],
                              assigned=data['assigned'],
                              id=id).start()
     except Exception as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
Ejemplo n.º 3
0
 def post(self, request, args=None):
     try:
         data = json.loads(request.data['data'])
         tmp = json.loads(request.data['sql'])
         user = request.data['user']
         type = request.data['type']
         id = request.data['id']
     except KeyError as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         try:
             x = [x.rstrip(';') for x in tmp]
             sql = ';'.join(x)
             sql = sql.strip(' ').rstrip(';')
             workId = util.workId()
             SqlOrder.objects.get_or_create(
                 username=user,
                 date=util.date(),
                 work_id=workId,
                 status=2,
                 basename=data['basename'],
                 sql=sql,
                 type=type,
                 text=data['text'],
                 backup=data['backup'],
                 bundle_id=id
                 )
             content = DatabaseList.objects.filter(id=id).first()
             if content.url:
                 util.dingding(content='工单提交通知\n' + content.before, url=content.url)
             return Response('已提交,请等待管理员审核!')
         except Exception as e:
             CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
             return HttpResponse(status=500)
Ejemplo n.º 4
0
    def post(self, request, args: str = None):

        authgroup_str = (",".join(request.data['auth_group']))
        grained_list = json.loads(request.data['grained_list'])
        real_name = request.data['real_name']
        work_id = util.workId()
        applygrained.objects.get_or_create(work_id=work_id,
                                           username=request.user,
                                           permissions=grained_list,
                                           auth_group=authgroup_str,
                                           status=2,
                                           real_name=real_name)
        mail = Account.objects.filter(id=1).first()
        try:
            thread = threading.Thread(target=push_message,
                                      args=({
                                          'to_user': request.user,
                                          'workid': work_id
                                      }, 2, request.user, mail.email, work_id,
                                            '已提交'))
            thread.start()
        except Exception as e:
            CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')

        finally:
            return Response('权限申请已提交!')
Ejemplo n.º 5
0
    def post(self, request, args=None):
        print("post请求")
        try:
            data = json.loads(request.data['data'])
            tmp = json.loads(request.data['sql'])
            type = request.data['type']
            real_name = request.data['real_name']
            id = request.data['id']
        except KeyError as e:
            CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            return HttpResponse(status=500)
        else:
            try:
                x = [x.rstrip(';') for x in tmp]
                if str(x[0]).lstrip().startswith('use'):
                    del x[0]
                sql = ';'.join(x)
                sql = sql.strip(' ').rstrip(';')
                workId = util.workId()
                env_name = Env.objects.filter(id=data['env_id'])[0].env_name
                service_name = Service.objects.filter(
                    id=data['service_id'])[0].service_name
                res, err = SqlOrder.objects.get_or_create(
                    username=request.user,
                    date=util.date(),
                    work_id=workId,
                    status=2,
                    basename=data['basename'],
                    sql=sql,
                    type=type,
                    text=data['text'],
                    backup=data['backup'],
                    bundle_id=id,
                    assigned=data['assigned'],
                    delay=data['delay'],
                    real_name=real_name,
                    version=data['version'],
                    env_name=env_name,
                    env_id=data['env_id'],
                    service_name=service_name,
                    service_id=data['service_id'],
                )

                user_res = Account.objects.filter(username=request.user)[0]
                if err and data['env_id'] == 1 and res.bundle_id == 18:
                    arr = order_push_message(addr_ip, res.id, real_name,
                                             real_name)
                    threading.Timer(0, arr.run).start()
                submit_push_messages(workId=workId,
                                     user=request.user,
                                     addr_ip=addr_ip,
                                     text=data['text'],
                                     assigned=data['assigned'],
                                     id=id).start()
                return Response('已提交,请等待管理员审核!')
            except Exception as e:
                traceback.print_exc()
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
                return HttpResponse(status=500)
Ejemplo n.º 6
0
 def post(self, request, args=None):
     try:
         print(request.data)
         newserviceData = request.data['newserviceData']
         data = json.loads(request.data['data'])
         uporder = request.data['uporder']
         config_properties = request.data['config_properties']
         user = request.data['user']
     except KeyError as e:
         client.captureException()
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         try:
             workId = util.workId()
             onlineinfo_db.objects.get_or_create(
                 iteration_name=data['iteration_name'],
                 date=util.date(),
                 workid=workId,
                 env_name=data['env_name'],
                 project_name=data['project_name'],
                 upstart_time=data['upstart_time'],
                 upbak_time=data['upbak_time'],
                 versionvalue=data['versionvalue'],
                 newserviceData=newserviceData,
                 state_em=data['state_em'],
                 updesc=data['updesc'],
                 sqlorder=str(data['sqlorder']).replace('\'', '\"'),
                 uporder=uporder,
                 addservice=data['addservice'],
                 config_properties=config_properties,
                 progress_editor=data['progress_editor'],
                 remark=data['remark'],
                 owner=user,
                 assigned=data['assigned'])
             CloudOrder.objects.get_or_create(
                 date=util.date(),
                 remark=data['project_name'] + '_' +
                 env_name_list[data['env_name']] + '_' +
                 iteration_list[data['iteration_name']],
                 type=0,
                 status=3,
                 username=user,
                 assigned=data['assigned'],
                 workid=workId)
             submit_push_messages(workId=workId,
                                  user=user,
                                  to_user=data['assigned'],
                                  id=1,
                                  addr_ip=addr_ip,
                                  assigned=data['assigned'],
                                  text='text').run()
             return Response({'status': 'success', 'orderid': workId})
         except Exception as e:
             client.captureException()
             return Response({'status': 'error', 'log': '后端保存失败'})
Ejemplo n.º 7
0
    def post(self, request, args: str = None):

        grained_list = json.loads(request.data['grained_list'])
        work_id = util.workId()
        applygrained.objects.get_or_create(work_id=work_id, username=request.user, permissions=grained_list, status=2)
        mail = Account.objects.filter(id=1).first()
        try:
            thread = threading.Thread(target=push_message, args=(
            {'to_user': request.user, 'workid': work_id}, 2, request.user, mail.email, work_id, '已提交'))
            thread.start()
        except:
            pass
        return Response('权限申请已提交!')
Ejemplo n.º 8
0
 def post(self, request, args=None):
     try:
         print(request.data)
         data = json.loads(request.data['data'])
         user = request.data['user']
     except KeyError as e:
         client.captureException()
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         workId = util.workId()
         addnewpcinfo_db.objects.get_or_create(
             date=util.date(),
             workid=workId,
             env_name=data['env_name'],
             project_name=data['project_name'],
             remark=data['remark'],
             owner=user,
             os_soft_need=str(data['os_soft_need']).replace('\'', '\"'),
             opentime=data['opentime'],
             appname=data['appname'],
             assigned=data['assigned'],
             newpc_type=data['newpc_type'],
             servernum=data['servernum'],
             cpunum=data['cpunum'],
             mem=data['mem'],
             OsDiskType=data['OsDiskType'],
             OsDiskSize=data['OsDiskSize'],
             DataDiskSize=data['DataDiskSize'],
             domain=data['domain'],
             jdk_version=data['jdk_version'],
             jvm_properties=data['jvm_properties'],
             netbrand=data['netbrand'],
             https_choice=data['https_choice'],
             DataDiskType=data['DataDiskType'])
         CloudOrder.objects.get_or_create(date=util.date(),
                                          remark=data['remark'],
                                          type=2,
                                          status=3,
                                          username=user,
                                          assigned=data['assigned'],
                                          workid=workId)
         submit_push_messages(workId=workId,
                              user=user,
                              to_user=data['assigned'],
                              id=1,
                              addr_ip=addr_ip,
                              assigned=data['assigned'],
                              text='text').run()
         return Response('已提交,请等待管理员审核!')
Ejemplo n.º 9
0
    def post(self, request, args: str = None):

        grained_list = json.loads(request.data['grained_list'])
        work_id = util.workId()
        applygrained.objects.get_or_create(work_id=work_id,
                                           username=request.user,
                                           permissions=grained_list,
                                           status=2)
        mail = Account.objects.filter(id=1).first()
        thread = threading.Thread(target=push_message,
                                  args=({
                                      'to_user': request.user,
                                      'workid': work_id
                                  }, 2, request.user, mail.email, work_id,
                                        '已提交'))
        thread.start()
        return Response('权限申请已提交!')
Ejemplo n.º 10
0
 def post(self, request, args=None):
     try:
         data = json.loads(request.data['data'])
         tmp = json.loads(request.data['sql'])
         user = request.data['user']
         source_table = request.data['source_table']
         dest_table = request.data['dest_table']
         archive_condition = request.data['archive_condition']
         soure_dbname = request.data['source_dbname']
         dest_dbname = request.data['dest_dbname']
         source_id = request.data['source_id']
         dest_id = request.data['dest_id']
         source_id = request.data['source_id']
         status = request.data['status']
         type = request.data['type']
         ssh_hostid = request.data['ssh_hostid']
     except KeyError as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         try:
             workId = util.workId()
             ArchiveLog.objects.get_or_create(
                 source_id=source_id,
                 db_source=soure_dbname,
                 table_source=source_table,
                 dest_id=dest_id,
                 db_dest=dest_dbname,
                 dest_table=dest_table,
                 date=util.date(),
                 archive_condition=archive_condition,
                 status=status,
                 type=type,
                 ssh_hostid=ssh_hostid,
             )
             submit_push_messages(workId=workId,
                                  user=user,
                                  addr_ip=addr_ip,
                                  text=data['text'],
                                  assigned=data['assigned'],
                                  id=id).start()
             return Response('已提交!')
         except Exception as e:
             CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
             return HttpResponse(status=500)
Ejemplo n.º 11
0
 def post(self, request, args=None):
     try:
         data = json.loads(request.data['data'])
         tmp = json.loads(request.data['sql'])
         type = request.data['type']
         real_name = request.data['real_name']
         id = request.data['id']
     except KeyError as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         try:
             x = [x.rstrip(';') for x in tmp]
             if str(x[0]).lstrip().startswith('use'):
                 del x[0]
             sql = ';'.join(x)
             sql = sql.strip(' ').rstrip(';')
             workId = util.workId()
             SqlOrder.objects.get_or_create(
                 username=request.user,
                 date=util.date(),
                 work_id=workId,
                 status=2,
                 basename=data['basename'],
                 sql=sql,
                 type=type,
                 text=data['text'],
                 backup=data['backup'],
                 bundle_id=id,
                 assigned=data['assigned'],
                 delay=data['delay'],
                 real_name=real_name
             )
             submit_push_messages(
                 workId=workId,
                 user=request.user,
                 addr_ip=addr_ip,
                 text=data['text'],
                 assigned=data['assigned'],
                 id=id
             ).start()
             return Response('已提交,请等待管理员审核!')
         except Exception as e:
             CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
             return HttpResponse(status=500)
Ejemplo n.º 12
0
 def post(self, request, args=None):
     try:
         data = json.loads(request.data['data'])
         tmp = json.loads(request.data['sql'])
         type = request.data['type']
         real_name = request.data['real_name']
         id = request.data['id']
     except KeyError as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         try:
             x = [x.rstrip(';') for x in tmp]
             if str(x[0]).lstrip().startswith('use'):
                 del x[0]
             sql = ';'.join(x)
             sql = sql.strip(' ').rstrip(';')
             workId = util.workId()
             SqlOrder.objects.get_or_create(
                 username=request.user,
                 date=util.date(),
                 work_id=workId,
                 status=2,
                 basename=data['basename'],
                 sql=sql,
                 type=type,
                 text=data['text'],
                 backup=data['backup'],
                 bundle_id=id,
                 assigned=data['assigned'],
                 delay=data['delay'],
                 real_name=real_name
             )
             submit_push_messages(
                 workId=workId,
                 user=request.user,
                 addr_ip=addr_ip,
                 text=data['text'],
                 assigned=data['assigned'],
                 id=id
             ).start()
             return Response('已提交,请等待Leader审核!')
         except Exception as e:
             CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
             return HttpResponse(status=500)
Ejemplo n.º 13
0
 def post(self, request, args=None):
     try:
         data = json.loads(request.data['data'])
         user = request.data['user']
     except KeyError as e:
         client.captureException()
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         workId = util.workId()
         extendinfo_db.objects.get_or_create(
             date=util.date(),
             workid=workId,
             env_name=data['env_name'],
             project_name=data['project_name'],
             remark=data['remark'],
             owner=user,
             extend_type=data['extend_type'],
             ghost_choice=data['ghost_choice'],
             os_soft_need=str(data['os_soft_need']).replace('\'', '\"'),
             opentime=data['opentime'],
             servernum=data['servernum'],
             properties_change=data['properties_change'],
             appname=data['appname'],
             assigned=data['assigned'])
         CloudOrder.objects.get_or_create(date=util.date(),
                                          remark=data['remark'],
                                          type=1,
                                          status=3,
                                          username=user,
                                          assigned=data['assigned'],
                                          workid=workId)
         submit_push_messages(workId=workId,
                              user=user,
                              to_user=data['assigned'],
                              id=1,
                              addr_ip=addr_ip,
                              assigned=data['assigned'],
                              text='text').run()
         return Response('已提交,请等待管理员审核!')
Ejemplo n.º 14
0
    def post(self, request, args: str = None):

        authgroup_str = (",".join(request.data['auth_group']))
        grained_list = json.loads(request.data['grained_list'])
        real_name = request.data['real_name']
        work_id = util.workId()
        applygrained.objects.get_or_create(
            work_id=work_id,
            username=request.user,
            permissions=grained_list,
            auth_group=authgroup_str,
            status=2,
            real_name=real_name)
        mail = Account.objects.filter(id=1).first()
        try:
            thread = threading.Thread(target=push_message, args=(
                {'to_user': request.user, 'workid': work_id}, 2, request.user, mail.email, work_id, '已提交'))
            thread.start()
        except Exception as e:
            CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')

        finally:
            return Response('权限申请已提交!')
Ejemplo n.º 15
0
    def put(self, request, args: str = None):

        if request.data['mode'] == 'put':
            instructions = request.data['instructions']
            connection_name = request.data['connection_name']
            computer_room = request.data['computer_room']
            timer = int(request.data['timer'])
            export = request.data['export']
            audit = request.data['audit']
            un_init = util.init_conf()
            query_switch = ast.literal_eval(un_init['other'])
            query_per = 2
            work_id = util.workId()
            if not query_switch['query']:
                query_per = 1
                userinfo = Account.objects.filter(username=audit,
                                                  group='admin').first()
                thread = threading.Thread(target=push_message,
                                          args=({
                                              'to_user': request.user,
                                              'workid': work_id
                                          }, 5, request.user, userinfo.email,
                                                work_id, '提交'))
                thread.start()
            query_order.objects.create(work_id=work_id,
                                       instructions=instructions,
                                       username=request.user,
                                       timer=timer,
                                       date=util.date(),
                                       query_per=query_per,
                                       connection_name=connection_name,
                                       computer_room=computer_room,
                                       export=export,
                                       audit=audit,
                                       time=util.date())
            if not query_switch['query']:
                t = threading.Thread(target=query_worklf.query_callback,
                                     args=(timer, work_id))
                t.start()
            ## 钉钉及email站内信推送
            return Response('查询工单已提交,等待管理员审核!')

        elif request.data['mode'] == 'agree':
            work_id = request.data['work_id']
            query_info = query_order.objects.filter(
                work_id=work_id).order_by('-id').first()
            t = threading.Thread(target=query_worklf.query_callback,
                                 args=(query_info.timer, work_id))
            t.start()
            userinfo = Account.objects.filter(
                username=query_info.username).first()
            thread = threading.Thread(target=push_message,
                                      args=({
                                          'to_user': query_info.username,
                                          'workid': query_info.work_id
                                      }, 6, query_info.username,
                                            userinfo.email, work_id, '同意'))
            thread.start()
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'disagree':
            work_id = request.data['work_id']
            query_order.objects.filter(work_id=work_id).update(query_per=0)
            query_info = query_order.objects.filter(
                work_id=work_id).order_by('-id').first()
            userinfo = Account.objects.filter(
                username=query_info.username).first()
            thread = threading.Thread(target=push_message,
                                      args=({
                                          'to_user': query_info.username,
                                          'workid': query_info.work_id
                                      }, 7, query_info.username,
                                            userinfo.email, work_id, '驳回'))
            thread.start()
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'status':
            try:
                status = query_order.objects.filter(
                    username=request.user).order_by('-id').first()
                return Response(status.query_per)
            except:
                return Response(0)

        elif request.data['mode'] == 'end':
            try:
                query_order.objects.filter(
                    username=request.user).order_by('-id').update(query_per=3)
                return Response('结束查询工单成功!')
            except Exception as e:
                return Response(e)

        elif request.data['mode'] == 'info':
            tablelist = []
            database = query_order.objects.filter(
                username=request.user).order_by('-id').first()
            _connection = DatabaseList.objects.filter(
                connection_name=database.connection_name).first()
            with con_database.SQLgo(ip=_connection.ip,
                                    user=_connection.username,
                                    password=_connection.password,
                                    port=_connection.port) as f:
                dataname = f.query_info(sql='show databases')
            children = []
            ignore = [
                'information_schema', 'sys', 'performance_schema', 'mysql'
            ]
            for index, uc in enumerate(dataname):
                for cc in ignore:
                    if uc['Database'] == cc:
                        del dataname[index]
                        index = index - 1
            for i in dataname:
                with con_database.SQLgo(ip=_connection.ip,
                                        user=_connection.username,
                                        password=_connection.password,
                                        port=_connection.port,
                                        db=i['Database']) as f:
                    tablename = f.query_info(sql='show tables')
                for c in tablename:
                    key = 'Tables_in_%s' % i['Database']
                    children.append({'title': c[key]})
                tablelist.append({
                    'title': i['Database'],
                    'children': children
                })
                children = []
            data = [{
                'title': database.connection_name,
                'expand': 'true',
                'children': tablelist
            }]
            return Response({
                'info': json.dumps(data),
                'status': database.export
            })
Ejemplo n.º 16
0
    def put(self, request, args: str = None):

        if request.data['mode'] == 'put':
            instructions = request.data['instructions']
            connection_name = request.data['connection_name']
            computer_room = request.data['computer_room']
            timer = int(request.data['timer'])
            export = request.data['export']
            audit = request.data['audit']
            un_init = util.init_conf()
            query_switch = ast.literal_eval(un_init['other'])
            query_per = 2
            work_id = util.workId()
            if not query_switch['query']:
                query_per = 1
                userinfo = Account.objects.filter(username=audit, group='admin').first()
                thread = threading.Thread(
                    target=push_message,
                    args=({'to_user': request.user, 'workid': work_id}, 5, request.user, userinfo.email, work_id, '提交')
                )
                thread.start()
            query_order.objects.create(
                work_id=work_id,
                instructions=instructions,
                username=request.user,
                timer=timer,
                date=util.date(),
                query_per=query_per,
                connection_name=connection_name,
                computer_room=computer_room,
                export=export,
                audit=audit,
                time=util.date()
            )
            if not query_switch['query']:
                t = threading.Thread(target=query_worklf.query_callback, args=(timer, work_id))
                t.start()
            ## 钉钉及email站内信推送
            return Response('查询工单已提交,等待管理员审核!')

        elif request.data['mode'] == 'agree':
            work_id = request.data['work_id']
            query_info = query_order.objects.filter(work_id=work_id).order_by('-id').first()
            t = threading.Thread(target=query_worklf.query_callback, args=(query_info.timer, work_id))
            t.start()
            userinfo = Account.objects.filter(username=query_info.username).first()
            thread = threading.Thread(target=push_message, args=(
            {'to_user': query_info.username, 'workid': query_info.work_id}, 6, query_info.username, userinfo.email,
            work_id, '同意'))
            thread.start()
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'disagree':
            work_id = request.data['work_id']
            query_order.objects.filter(work_id=work_id).update(query_per=0)
            query_info = query_order.objects.filter(work_id=work_id).order_by('-id').first()
            userinfo = Account.objects.filter(username=query_info.username).first()
            thread = threading.Thread(target=push_message, args=(
            {'to_user': query_info.username, 'workid': query_info.work_id}, 7, query_info.username, userinfo.email,
            work_id, '驳回'))
            thread.start()
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'status':
            try:
                status = query_order.objects.filter(username=request.user).order_by('-id').first()
                return Response(status.query_per)
            except:
                return Response(0)

        elif request.data['mode'] == 'end':
            try:
                query_order.objects.filter(username=request.user).order_by('-id').update(query_per=3)
                return Response('结束查询工单成功!')
            except Exception as e:
                return Response(e)

        elif request.data['mode'] == 'info':
            tablelist = []
            database = query_order.objects.filter(username=request.user).order_by('-id').first()
            _connection = DatabaseList.objects.filter(connection_name=database.connection_name).first()
            with con_database.SQLgo(ip=_connection.ip,
                                    user=_connection.username,
                                    password=_connection.password,
                                    port=_connection.port) as f:
                dataname = f.query_info(sql='show databases')
            children = []
            ignore = ['information_schema', 'sys', 'performance_schema', 'mysql']
            for index, uc in enumerate(dataname):
                for cc in ignore:
                    if uc['Database'] == cc:
                        del dataname[index]
                        index = index - 1
            for i in dataname:
                with con_database.SQLgo(ip=_connection.ip,
                                        user=_connection.username,
                                        password=_connection.password,
                                        port=_connection.port,
                                        db=i['Database']) as f:
                    tablename = f.query_info(sql='show tables')
                for c in tablename:
                    key = 'Tables_in_%s' % i['Database']
                    children.append({
                        'title': c[key]
                    })
                tablelist.append({
                    'title': i['Database'],
                    'children': children
                })
                children = []
            data = [{
                'title': database.connection_name,
                'expand': 'true',
                'children': tablelist
            }]
            return Response({'info': json.dumps(data), 'status': database.export})
Ejemplo n.º 17
0
    def put(self, request, args: str = None):

        if request.data['mode'] == 'put':
            instructions = request.data['instructions']
            connection_name = request.data['connection_name']
            computer_room = request.data['computer_room']
            real = request.data['real_name']
            export = request.data['export']
            audit = request.data['audit']
            un_init = util.init_conf()
            query_switch = ast.literal_eval(un_init['other'])
            query_per = 2
            work_id = util.workId()
            if not query_switch['query']:
                query_per = 2
            else:
                userinfo = Account.objects.filter(username=audit,
                                                  group='admin').first()
                try:
                    thread = threading.Thread(target=push_message,
                                              args=({
                                                  'to_user': request.user,
                                                  'workid': work_id
                                              }, 5, request.user,
                                                    userinfo.email, work_id,
                                                    '提交'))
                    thread.start()
                except Exception as e:
                    CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            query_order.objects.create(work_id=work_id,
                                       instructions=instructions,
                                       username=request.user,
                                       date=util.date(),
                                       query_per=query_per,
                                       connection_name=connection_name,
                                       computer_room=computer_room,
                                       export=export,
                                       audit=audit,
                                       time=util.date(),
                                       real_name=real)
            if not query_switch['query']:
                query_order.objects.filter(work_id=work_id).update(query_per=1)
            ## 钉钉及email站内信推送
            return Response('查询工单已提交,等待管理员审核!')

        elif request.data['mode'] == 'agree':
            work_id = request.data['work_id']
            query_info = query_order.objects.filter(
                work_id=work_id).order_by('-id').first()
            query_order.objects.filter(work_id=work_id).update(query_per=1)
            userinfo = Account.objects.filter(
                username=query_info.username).first()
            try:
                thread = threading.Thread(target=push_message,
                                          args=({
                                              'to_user': query_info.username,
                                              'workid': query_info.work_id
                                          }, 6, query_info.username,
                                                userinfo.email, work_id, '同意'))
                thread.start()
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'disagree':
            work_id = request.data['work_id']
            query_order.objects.filter(work_id=work_id).update(query_per=0)
            query_info = query_order.objects.filter(
                work_id=work_id).order_by('-id').first()
            userinfo = Account.objects.filter(
                username=query_info.username).first()
            try:
                thread = threading.Thread(target=push_message,
                                          args=({
                                              'to_user': query_info.username,
                                              'workid': query_info.work_id
                                          }, 7, query_info.username,
                                                userinfo.email, work_id, '驳回'))
                thread.start()
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'status':
            try:
                status = query_order.objects.filter(
                    username=request.user).order_by('-id').first()
                return Response(status.query_per)
            except:
                return Response(0)

        elif request.data['mode'] == 'end':
            try:
                query_order.objects.filter(
                    username=request.data['username']).order_by('-id').update(
                        query_per=3)
                return Response('已结束查询!')
            except Exception as e:
                return HttpResponse(e)

        elif request.data['mode'] == 'info':
            tablelist = []
            highlist = []
            database = query_order.objects.filter(
                username=request.user).order_by('-id').first()
            _connection = DatabaseList.objects.filter(
                connection_name=database.connection_name).first()
            with con_database.SQLgo(ip=_connection.ip,
                                    user=_connection.username,
                                    password=_connection.password,
                                    port=_connection.port) as f:
                dataname = f.query_info(sql='show databases')
            children = []
            ignore = exclued_db_list()
            for index, uc in sorted(enumerate(dataname), reverse=True):
                for cc in ignore:
                    if uc['Database'] == cc:
                        del dataname[index]
            for i in dataname:
                with con_database.SQLgo(ip=_connection.ip,
                                        user=_connection.username,
                                        password=_connection.password,
                                        port=_connection.port,
                                        db=i['Database']) as f:
                    tablename = f.query_info(sql='show tables')
                highlist.append({'vl': i['Database'], 'meta': '库名'})
                for c in tablename:
                    key = 'Tables_in_%s' % i['Database']
                    highlist.append({'vl': c[key], 'meta': '表名'})
                    children.append({'title': c[key]})
                tablelist.append({
                    'title': i['Database'],
                    'children': children
                })
                children = []
            data = [{
                'title': database.connection_name,
                'expand': 'true',
                'children': tablelist
            }]
            return Response({
                'info': json.dumps(data),
                'status': database.export,
                'highlight': highlist
            })
Ejemplo n.º 18
0
 def post(self, request, args=None):
     try:
         data = json.loads(request.data['data'])
         tmp = json.loads(request.data['sql'])
         user = request.data['user']
         type = request.data['type']
         id = request.data['id']
     except KeyError as e:
         CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
         return HttpResponse(status=500)
     else:
         try:
             x = [x.rstrip(';') for x in tmp]
             sql = ';'.join(x)
             sql = sql.strip(' ').rstrip(';')
             workId = util.workId()
             SqlOrder.objects.get_or_create(username=user,
                                            date=util.date(),
                                            work_id=workId,
                                            status=2,
                                            basename=data['basename'],
                                            sql=sql,
                                            type=type,
                                            text=data['text'],
                                            backup=data['backup'],
                                            bundle_id=id,
                                            assigned=data['assigned'])
             content = DatabaseList.objects.filter(id=id).first()
             mail = Account.objects.filter(
                 username=data['assigned']).first()
             tag = globalpermissions.objects.filter(
                 authorization='global').first()
             ret_info = '已提交,请等待管理员审核!'
             if tag is None or tag.dingding == 0:
                 pass
             else:
                 if content.url:
                     try:
                         util.dingding(
                             content=
                             '工单提交通知\n工单编号:%s\n发起人:%s\n地址:%s\n工单说明:%s\n状态:已提交\n备注:%s'
                             % (workId, user, addr_ip, data['text'],
                                content.before),
                             url=content.url)
                     except:
                         ret_info = '工单执行成功!但是钉钉推送失败,请查看错误日志排查错误.'
             if tag is None or tag.email == 0:
                 pass
             else:
                 if mail.email:
                     mess_info = {
                         'workid': workId,
                         'to_user': user,
                         'addr': addr_ip,
                         'text': data['text'],
                         'note': content.before
                     }
                     try:
                         put_mess = send_email.send_email(
                             to_addr=mail.email)
                         put_mess.send_mail(mail_data=mess_info, type=2)
                     except:
                         ret_info = '工单执行成功!但是邮箱推送失败,请查看错误日志排查错误.'
             return Response(ret_info)
         except Exception as e:
             CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
             return HttpResponse(status=500)
Ejemplo n.º 19
0
    def put(self, request, args: str = None):

        if request.data['mode'] == 'put':
            instructions = request.data['instructions']
            connection_name = request.data['connection_name']
            computer_room = request.data['computer_room']
            real = request.data['real_name']
            export = request.data['export']
            audit = request.data['audit']
            un_init = util.init_conf()
            query_switch = ast.literal_eval(un_init['other'])
            query_per = 2
            work_id = util.workId()
            if not query_switch['query']:
                query_per = 2
            else:
                userinfo = Account.objects.filter(username=audit, group='admin').first()
                try:
                    thread = threading.Thread(
                        target=push_message,
                        args=(
                            {'to_user': request.user, 'workid': work_id}, 5, request.user, userinfo.email, work_id,
                            '提交')
                    )
                    thread.start()
                except Exception as e:
                    CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            query_order.objects.create(
                work_id=work_id,
                instructions=instructions,
                username=request.user,
                date=util.date(),
                query_per=query_per,
                connection_name=connection_name,
                computer_room=computer_room,
                export=export,
                audit=audit,
                time=util.date(),
                real_name=real
            )
            if not query_switch['query']:
                query_order.objects.filter(work_id=work_id).update(query_per=1)
            ## 钉钉及email站内信推送
            return Response('查询工单已提交,等待管理员审核!')

        elif request.data['mode'] == 'agree':
            work_id = request.data['work_id']
            query_info = query_order.objects.filter(work_id=work_id).order_by('-id').first()
            query_order.objects.filter(work_id=work_id).update(query_per=1)
            userinfo = Account.objects.filter(username=query_info.username).first()
            try:
                thread = threading.Thread(target=push_message, args=(
                    {'to_user': query_info.username, 'workid': query_info.work_id}, 6, query_info.username,
                    userinfo.email,
                    work_id, '同意'))
                thread.start()
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'disagree':
            work_id = request.data['work_id']
            query_order.objects.filter(work_id=work_id).update(query_per=0)
            query_info = query_order.objects.filter(work_id=work_id).order_by('-id').first()
            userinfo = Account.objects.filter(username=query_info.username).first()
            try:
                thread = threading.Thread(target=push_message, args=(
                    {'to_user': query_info.username, 'workid': query_info.work_id}, 7, query_info.username,
                    userinfo.email,
                    work_id, '驳回'))
                thread.start()
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'status':
            try:
                status = query_order.objects.filter(username=request.user).order_by('-id').first()
                return Response(status.query_per)
            except:
                return Response(0)

        elif request.data['mode'] == 'end':
            try:
                query_order.objects.filter(username=request.data['username']).order_by('-id').update(query_per=3)
                return Response('已结束查询!')
            except Exception as e:
                return HttpResponse(e)

        elif request.data['mode'] == 'info':
            tablelist = []
            highlist = []
            database = query_order.objects.filter(username=request.user).order_by('-id').first()
            _connection = DatabaseList.objects.filter(connection_name=database.connection_name).first()
            with con_database.SQLgo(ip=_connection.ip,
                                    user=_connection.username,
                                    password=_connection.password,
                                    port=_connection.port) as f:
                dataname = f.query_info(sql='show databases')
            children = []
            ignore = exclued_db_list()
            for index, uc in sorted(enumerate(dataname), reverse=True):
                for cc in ignore:
                    if uc['Database'] == cc:
                        del dataname[index]
            for i in dataname:
                with con_database.SQLgo(ip=_connection.ip,
                                        user=_connection.username,
                                        password=_connection.password,
                                        port=_connection.port,
                                        db=i['Database']) as f:
                    tablename = f.query_info(sql='show tables')
                highlist.append({'vl': i['Database'], 'meta': '库名'})
                for c in tablename:
                    key = 'Tables_in_%s' % i['Database']
                    highlist.append({'vl': c[key], 'meta': '表名'})
                    children.append({
                        'title': c[key]
                    })
                tablelist.append({
                    'title': i['Database'],
                    'children': children
                })
                children = []
            data = [{
                'title': database.connection_name,
                'expand': 'true',
                'children': tablelist
            }]
            return Response({'info': json.dumps(data), 'status': database.export, 'highlight': highlist})
Ejemplo n.º 20
0
    def put(self, request, args: str = None):

        if request.data['mode'] == 'put':
            instructions = request.data['instructions']
            connection_name = request.data['connection_name']
            computer_room = request.data['computer_room']
            timer = int(request.data['timer'])
            export = request.data['export']
            audit = request.data['audit']
            un_init = util.init_conf()
            query_switch = ast.literal_eval(un_init['other'])
            query_per = 2
            work_id = util.workId()
            if not query_switch['query']:
                query_per = 1
            else:
                userinfo = Account.objects.filter(username=audit,
                                                  group='admin').first()
                try:
                    thread = threading.Thread(target=push_message,
                                              args=({
                                                  'to_user': request.user,
                                                  'workid': work_id
                                              }, 5, request.user,
                                                    userinfo.email, work_id,
                                                    '提交'))
                    thread.start()
                except Exception as e:
                    CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
            # 最大可申请7天权限
            timer = 168 if timer > 168 else timer
            query_order.objects.create(
                work_id=work_id,
                instructions=instructions,
                username=request.user,
                timer=timer,
                date=datetime.datetime.now() + datetime.timedelta(hours=timer),
                query_per=query_per,
                connection_name=','.join(connection_name),
                computer_room=computer_room,
                export=export,
                audit=audit,
                time=util.datetime())
            if not query_switch['query']:
                t = threading.Thread(target=query_worklf.query_callback,
                                     args=(timer, work_id))
                t.start()
            ## 钉钉及email站内信推送
            return Response('查询工单已提交,等待管理员审核!')

        elif request.data['mode'] == 'agree':
            work_id = request.data['work_id']
            query_info = query_order.objects.filter(
                work_id=work_id).order_by('-id').first()
            t = threading.Thread(target=query_worklf.query_callback,
                                 args=(query_info.timer, work_id))
            t.start()
            userinfo = Account.objects.filter(
                username=query_info.username).first()
            thread = threading.Thread(target=push_message,
                                      args=({
                                          'to_user': query_info.username,
                                          'workid': query_info.work_id
                                      }, 6, query_info.username,
                                            userinfo.email, work_id, '同意'))
            thread.start()
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'disagree':
            work_id = request.data['work_id']
            query_order.objects.filter(work_id=work_id).update(query_per=0)
            query_info = query_order.objects.filter(
                work_id=work_id).order_by('-id').first()
            userinfo = Account.objects.filter(
                username=query_info.username).first()
            thread = threading.Thread(target=push_message,
                                      args=({
                                          'to_user': query_info.username,
                                          'workid': query_info.work_id
                                      }, 7, query_info.username,
                                            userinfo.email, work_id, '驳回'))
            thread.start()
            return Response('查询工单状态已更新!')

        elif request.data['mode'] == 'status':
            try:
                limit = util.get_conf_limit()
                curr_time = util.datetime()
                status = query_order.objects.filter(
                    username=request.user).filter(query_per=1).filter(
                        date__gt=curr_time).aggregate(count=Count('id'))
                if status['count'] > 0:
                    return Response({'limit': limit, 'status': 1})
                else:
                    return Response({'limit': limit, 'status': 0})
            except:
                return Response(0)

        elif request.data['mode'] == 'end':
            try:
                query_order.objects.filter(
                    username=request.user).order_by('-id').update(query_per=3)
                return Response('结束查询工单成功!')
            except Exception as e:
                return Response(e)

        elif request.data['mode'] == 'dblist':
            dbname_list = get_dblist_foruser(request.user)
            return Response(dbname_list)

        elif request.data['mode'] == 'tablist':
            dbname = request.data['dbname']
            _connection = DatabaseList.objects.filter(
                connection_name=dbname).first()
            with con_database.SQLgo(ip=_connection.ip,
                                    user=_connection.username,
                                    password=_connection.password,
                                    port=_connection.port,
                                    db=_connection.dbname) as f:
                tabname = f.query_info(sql='show tables')
            return Response([list(i.values())[0] for i in tabname])

        elif request.data['mode'] == 'tabmeta':
            dbname = request.data['dbname']
            tabname = request.data['tabname']
            get_tabmeta_sql = ("show create table {0}".format(tabname))
            _connection = DatabaseList.objects.filter(
                connection_name=dbname).first()
            with con_database.SQLgo(ip=_connection.ip,
                                    user=_connection.username,
                                    password=_connection.password,
                                    port=_connection.port,
                                    db=_connection.dbname) as f:
                tabmeta = f.query_info(sql=get_tabmeta_sql)
            try:
                tabmeta_deal = tabmeta[0]["Create Table"]
                return Response(tabmeta_deal)
            except Exception:
                return Response('')

        elif request.data['mode'] == 'addcollect':
            try:
                user_collect.objects.create(
                    username=request.user,
                    connect_name=request.data["conn_name"],
                    sql_text=request.data["sql_text"],
                    collect_alias=request.data["alias_name"],
                    create_time=util.datetime(),
                    update_time=util.datetime())
                return Response('ok')
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
                return HttpResponse(status=500)

        elif request.data['mode'] == 'getcollect':
            try:
                my_collect = user_collect.objects.filter(
                    username=request.user).order_by("-sort_flag").order_by(
                        "-update_time")
                data_dict = [
                    {
                        'title': "别名",
                        "key": "collect_alias",
                        "fixed": "left",
                        "sortable": "true",
                        "width": 150
                    },
                    {
                        'title': "连接名",
                        "key": "connect_name",
                        "fixed": "left",
                        "sortable": "true",
                        "width": 150
                    },
                    {
                        'title': "sql",
                        "key": "sql_text",
                        "fixed": "left",
                        "sortable": "true",
                        "width": 265
                    },
                ]
                data_result = []
                len = 0
                for i in my_collect:
                    len = len + 1
                    data_result.append({
                        "id": i.id,
                        "collect_alias": i.collect_alias,
                        "connect_name": i.connect_name,
                        "sql_text": i.sql_text
                    })
                collect_fin = {
                    'data': data_result,
                    'title': data_dict,
                    'len': len
                }
                return HttpResponse(
                    simplejson.dumps(collect_fin,
                                     cls=DateEncoder,
                                     bigint_as_string=True))
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
                return HttpResponse(status=500)

        elif request.data['mode'] == 'delcollect':
            try:
                user_collect.objects.filter(id=request.data["id"]).delete()
                return Response('ok')
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
                return HttpResponse(status=500)

        elif request.data['mode'] == 'setcollecttop':
            try:
                user_collect.objects.filter(id=request.data["id"]).update(
                    sort_flag=999, update_time=util.datetime())
                return Response('ok')
            except Exception as e:
                CUSTOM_ERROR.error(f'{e.__class__.__name__}: {e}')
                return HttpResponse(status=500)
        elif request.data['mode'] == 'info':
            tablelist = []
            database_list_from_db = query_order.objects.filter(
                username=request.user).filter(query_per=1)
            database_list = []
            dbname_list = []
            for row in database_list_from_db:
                for i in row.connection_name.split(","):
                    if i not in dbname_list:
                        dbname_list.append(i)
                        database_list.append({
                            "connection_name": i,
                            "export": row.export
                        })
            data = []
            for database in database_list:
                _connection = DatabaseList.objects.filter(
                    connection_name=database["connection_name"]).first()
                with con_database.SQLgo(ip=_connection.ip,
                                        user=_connection.username,
                                        password=_connection.password,
                                        port=_connection.port) as f:
                    dataname = f.query_info(sql='show databases')
                children = []
                ignore = [
                    'information_schema', 'sys', 'performance_schema', 'mysql'
                ]
                for index, uc in enumerate(dataname):
                    for cc in ignore:
                        if uc['Database'] == cc:
                            del dataname[index]
                            index = index - 1
                for i in dataname:
                    with con_database.SQLgo(ip=_connection.ip,
                                            user=_connection.username,
                                            password=_connection.password,
                                            port=_connection.port,
                                            db=i['Database']) as f:
                        tablename = f.query_info(sql='show tables')
                    for c in tablename:
                        key = 'Tables_in_%s' % i['Database']
                        children.append({'title': c[key]})
                    tablelist.append({
                        'title': i['Database'],
                        'children': children
                    })
                    children = []
                data.append({
                    'title': database,
                    'expand': 'true',
                    'children': tablelist
                })
            return Response({
                'info': json.dumps(data),
                'status': database["export"]
            })