示例#1
0
    def get(self):
        mysql_conn = getConn()
        groupObj = []
        try:
            sql = '''
                select id,groupName from custom_group where grouptype = 2
            '''
            resp = mysql_conn.query(sql)
            for id, name in resp:
                groupObj.append({'id': id, 'name': name})
        except Exception as e:
            groupObj = []
            ins_log.read_log('error', e)

        db_list = []
        try:
            sql = '''
                select id,db_code from codo_cmdb.asset_db
            '''
            resp = mysql_conn.query(sql)
            for id, name in resp:
                db_list.append({'id': id, 'name': name})
        except Exception as e:
            db_list = []
            ins_log.read_log('error', e)

        return self.write(dict(code=0, groupObj=groupObj, db_list=db_list))
示例#2
0
    def get(self, *args, **kwargs):
        report_na = self.get_argument('report_na', default=None, strip=True)
        report_val = self.get_argument('report_val', default=None, strip=True)
        dict_list = []
        Base_DIR = os.path.dirname(
            os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        dir_path = '{}/static/report/{}/'.format(Base_DIR, report_val)
        try:
            root, dirs, files = os.walk(dir_path).__next__()
            for f in files:
                filename = dir_path + f
                df = pd.read_excel(filename)
                columns = []
                num = 1
                for k in list(df.columns.values[1:]):
                    columns_temp = {"title": '', "key": '', "align": 'center'}
                    columns_temp["title"] = str(k)
                    columns_temp["key"] = "number" + str(num)
                    columns.append(columns_temp)
                    num = num + 1
                ins_log.read_log('info',
                                 "11111111111111111111111111111111111111")
                ins_log.read_log('info', columns)
                all_list = []
                for d in df.values:
                    temp_dict = {}
                    num = 1
                    for k in list(d[1:]):
                        tokey = "number" + str(num)
                        temp_dict[tokey] = str(k)
                        num = num + 1
                    all_list.append(temp_dict)

                obj = {
                    'file_na':
                    f,
                    'file_size':
                    '{}{}'.format(get_FileSize(os.path.join(root, f)), 'KB'),
                    'ctime':
                    get_FileCreateTime(os.path.join(root, f)),
                    'url':
                    'http://{}/static/report/{}/{}'.format(
                        self.request.host, report_val, f),
                    'columns':
                    str(columns),
                    'file_data':
                    str(all_list),
                }
                # ins_log.read_log('info', "22222222222222222222222222222222222")
                # ins_log.read_log('info', obj)
                dict_list.append(obj)
            dict_list.sort(key=lambda x: x['ctime'], reverse=True)
        except:
            traceback.print_exc()
            return self.write(dict(code=-1, msg='获取失败', data=dict_list))

        if len(dict_list) == 0:
            return self.write(dict(code=-2, msg='没有文件', data=dict_list))

        return self.write(dict(code=0, msg='获取成功', data=dict_list))
示例#3
0
    def delete(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        db_id = data.get('db_id', None)
        id_list = data.get('id_list', None)

        # 记录操作,不成功直接Pass
        try:
            with DBContext('w', None, True) as session:
                if db_id:
                    data_info = session.query(DB).filter(
                        DB.id == int(db_id)).all()
                    for data in data_info:
                        origion_data = model_to_dict(data)
                        origion_data['create_time'] = str(
                            origion_data['create_time'])
                        origion_data['update_time'] = str(
                            origion_data['update_time'])
                        new_record = AssetOperationalAudit(
                            username=nickname,
                            request_object='数据库',
                            request_host=origion_data.get('db_host'),
                            request_method='删除',
                            original_data=origion_data)
                        session.add(new_record)
                elif id_list:
                    for i in id_list:
                        data_info = session.query(DB).filter(DB.id == i).all()
                        for data in data_info:
                            origion_data = model_to_dict(data)
                            origion_data['create_time'] = str(
                                origion_data['create_time'])
                            origion_data['update_time'] = str(
                                origion_data['update_time'])
                            new_record = AssetOperationalAudit(
                                username=nickname,
                                request_object='数据库',
                                request_host=origion_data.get('db_host'),
                                request_method='删除',
                                original_data=origion_data)
                            session.add(new_record)
        except Exception as err:
            ins_log.read_log('error',
                             'operational_audit error:{err}'.format(err=err))

        with DBContext('w', None, True) as session:
            if db_id:
                session.query(DB).filter(DB.id == int(db_id)).delete(
                    synchronize_session=False)
                session.query(DBTag).filter(DBTag.db_id == int(db_id)).delete(
                    synchronize_session=False)
            elif id_list:
                for i in id_list:
                    session.query(DB).filter(DB.id == i).delete(
                        synchronize_session=False)
                    session.query(DBTag).filter(DBTag.db_id == i).delete(
                        synchronize_session=False)
            else:
                return self.write(dict(code=1, msg='关键参数不能为空'))
        return self.write(dict(code=0, msg='删除成功'))
示例#4
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        server_id = data.get('id', None)
        hostname = data.get('hostname', None)
        ip = data.get('ip', None)
        public_ip = data.get('public_ip', None)
        port = data.get('port', None)
        idc = data.get('idc', None)
        admin_user = data.get('admin_user', None)
        region = data.get('region', None)
        tag_list = data.get('tag_list', [])
        detail = data.get('detail', None)

        if not hostname or not ip or not port:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        if not admin_user:
            return self.write(dict(code=-1, msg='管理用户不能为空'))

        if not check_ip(ip):
            return self.write(dict(code=-1, msg="IP格式不正确"))

        if not type(port) is int and int(port) >= 65535:
            return self.write(dict(code=-1, msg="端口格式不正确"))

        with DBContext('w', None, True) as session:
            exist_hostname = session.query(Server.hostname).filter(Server.id == server_id).first()
            if exist_hostname[0] != hostname:
                return self.write(dict(code=-2, msg='主机名不能修改'))

            session.query(ServerTag).filter(ServerTag.server_id == server_id).delete(synchronize_session=False)
            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            if all_tags:
                for tag_id in all_tags:
                    session.add(ServerTag(server_id=server_id, tag_id=tag_id[0]))

            session.query(Server).filter(Server.id == server_id).update({Server.hostname: hostname, Server.ip: ip,
                                                                         Server.port: int(port),
                                                                         Server.public_ip: public_ip,
                                                                         Server.idc: idc,
                                                                         Server.admin_user: admin_user,
                                                                         Server.region: region, Server.detail: detail
                                                                         })  # Server.state: 'new'
        # 记录操作,不成功直接Pass
        try:
            modify_data = data
            with DBContext('w', None, True) as session:
                data_info = session.query(Server).filter(Server.id == int(server_id)).all()
                for data in data_info:
                    origion_data = model_to_dict(data)
                    origion_data['create_time'] = str(origion_data['create_time'])
                    origion_data['update_time'] = str(origion_data['update_time'])
                    new_record = AssetOperationalAudit(username=nickname, request_object='主机', request_host=ip,
                                                       request_method='更新', original_data=origion_data,
                                                       modify_data=modify_data)
                    session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))
        return self.write(dict(code=0, msg='编辑成功'))
    def asset_update(self, id_list):
        # time.sleep(20)  #测试下阻塞
        server_list = []
        # 检查下状态,是true的话直接推送资产
        with DBContext('r', None, True) as session:
            for i in id_list:

                server_info = session.query(
                    Server.ip, Server.port, AdminUser.system_user,
                    AdminUser.user_key, Server.state).outerjoin(
                        AdminUser,
                        AdminUser.admin_user == Server.admin_user).filter(
                            Server.id == i).all()
                server_list.append(server_info)
                # server_info = [('47.100.231.147', 22, 'root', '-----BEGIN RSA PRIVATE KEYxxxxxEND RSA PRIVATE KEY-----', 'false')]
                server_state = server_info[0][4]
                if server_state == 'true':
                    ins_log.read_log('info', 'update asset info')
                    # 选中的是true,直接更新资产
                    asset_data = get_server_sysinfo(server_list)
                    update_asset(asset_data)

                else:
                    # 选中的是其余的状态,那就先推送key, 拿到推送成功的key,更新资产
                    ins_log.read_log('info',
                                     'rsync public key , update asset info')
                    rsync_sucess_list = rsync_public_key(server_list)
                    if rsync_sucess_list:
                        asset_data = get_server_sysinfo(server_list)
                        update_asset(asset_data)
示例#6
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        db_id = data.get('id', None)
        db_code = data.get('db_code', None)
        db_host = data.get('db_host', None)
        db_port = data.get('db_port', 3306)
        db_user = data.get('db_user', None)
        db_pwd = data.get('db_pwd', None)
        db_env = data.get('db_env', None)
        proxy_host = data.get('proxy_host', None)
        db_type = data.get('db_type', 'mysql')
        db_version = data.get('db_version', None)
        db_mark = data.get('db_mark', '写')
        idc = data.get('idc', None)
        tag_list = data.get('tag_list', [])
        db_detail = data.get('db_detail', None)
        db_instance = data.get('db_instance', '')
        if not db_id or not db_code or not db_host or not db_port or not db_user:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        with DBContext('r') as session:
            old_password = session.query(DB.db_pwd).filter(DB.id == int(db_id)).first()[0]

        if old_password != db_pwd:
            # 加密密码
            db_pwd = encrypt(db_pwd)

        with DBContext('w', None, True) as session:
            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            session.query(DBTag).filter(DBTag.db_id == db_id).delete(synchronize_session=False)
            if all_tags:
                for tag_id in all_tags:
                    session.add(DBTag(db_id=int(db_id), tag_id=tag_id[0]))

            session.query(DB).filter(DB.id == int(db_id)).update({DB.db_code: db_code, DB.db_host: db_host,
                                                                  DB.db_port: db_port, DB.db_user: db_user,
                                                                  DB.db_pwd: db_pwd, DB.db_env: db_env,
                                                                  DB.proxy_host: proxy_host, DB.db_type: db_type,
                                                                  DB.db_version: db_version, DB.idc: idc,
                                                                  DB.db_mark: db_mark, DB.db_detail: db_detail,
                                                                  DB.db_instance: db_instance
                                                                  })
        # 记录操作,不成功直接Pass
        try:
            modify_data = data
            with DBContext('w', None, True) as session:
                data_info = session.query(DB).filter(DB.id == int(db_id)).all()
                for data in data_info:
                    origion_data = model_to_dict(data)
                    origion_data['create_time'] = str(origion_data['create_time'])
                    origion_data['update_time'] = str(origion_data['update_time'])
                    new_record = AssetOperationalAudit(username=nickname, request_object='数据库', request_host=db_host,
                                                       request_method='更新', original_data=origion_data,
                                                       modify_data=modify_data)
                    session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        return self.write(dict(code=0, msg='编辑成功'))
示例#7
0
    async def post(self, *args, **kwargs):
        # data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_user()  # 这里使用useame 不用中文
        #if not self.is_superuser: return self.write(dict(code=-1, msg='你不是超级超级管理员,不能使用WebTerminal'))

        connect_server_info = dict()
        connect_server_info['nickname'] = nickname
        # 数据加密给Jimmy
        mc = MyCryptV2()
        # 加密数据
        # encrypt_data = mc.my_encrypt(str(connect_server_info))
        encrypt_data = mc.my_encrypt(str(connect_server_info))
        print(encrypt_data)
        ins_log.read_log('info', '加密后的数据是:{}'.format(encrypt_data))
        try:
            web_terminal_initialssh = '{0}/webterminal/initiallogin/'.format(WEB_TERMINAL)
            the_body = json.dumps(encrypt_data)
            http_client = httpclient.AsyncHTTPClient()
            response = await http_client.fetch(web_terminal_initialssh, method="POST", body=the_body,
                                               raise_error=False)
            response_data = json.loads(response.body.decode('utf-8'))
            if not response_data.get('status'):
                return self.write(dict(code=1, msg=response_data.get('message')))
            # 返回信息
            web_terminal_key = response_data['key']
            web_terminal_url = '{0}/logslist/'.format(WEB_TERMINAL)
            res_data = {
                "web_terminal_url": web_terminal_url,
                "web_terminal_key": web_terminal_key
            }
        except Exception as e:
            ins_log.read_log('error', '请求webterminal接口出错:{err}'.format(err=e))
            return self.write(dict(code=1, msg='请求webterminal接口出错:{err}'.format(err=e)))

        return self.write(dict(code=0, msg='Sucessfully', data=res_data))
示例#8
0
    def delete(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        id = data.get('id')
        nickname = self.get_current_nickname()
        if not id:
            return self.write(dict(code=-2, msg='关键参数不能为空'))

        # 记录操作,不成功直接Pass
        try:
            with DBContext('w', None, True) as session:
                data_info = session.query(AssetIDC).filter(
                    AssetIDC.id == id).all()
                for data in data_info:
                    origion_data = model_to_dict(data)
                    new_record = AssetOperationalAudit(
                        username=nickname,
                        request_object='IDC',
                        request_host=origion_data.get('name'),
                        request_method='删除',
                        original_data=origion_data)
                    session.add(new_record)
        except Exception as err:
            ins_log.read_log('error',
                             'operational_audit error:{err}'.format(err=err))

        with DBContext('w', None, True) as session:
            session.query(AssetIDC).filter(AssetIDC.id == id).delete(
                synchronize_session=False)

        self.write(dict(code=0, msg='删除成功'))
示例#9
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()

        # 列表包str格式,str空格切割
        if not data:
            return self.write(dict(code=-1, msg='不能为空'))

        # 记录下操作,即使报错也不影响程序
        try:
            with DBContext('w', None, True) as session:

                new_record = AssetOperationalAudit(username=nickname,
                                                   request_object='主机',
                                                   request_method='批量添加',
                                                   modify_data=data)
                session.add(new_record)
        except Exception as err:
            ins_log.read_log('error',
                             'operational_audit error:{err}'.format(err=err))

        # 判断下格式长度
        with DBContext('w', None, True) as session:
            for i in data:
                if i:
                    server_info = i.split(' ')
                    ins_log.read_log(
                        'info', 'MultiServer:{server_info}'.format(
                            server_info=server_info))
                    if len(server_info) != 4:
                        return self.write(dict(code=-2, msg='格式错误'))
                    hostname = server_info[0]
                    ip = server_info[1]
                    port = server_info[2]
                    admin_user = server_info[3]
                    if not check_ip(ip):
                        return self.write(dict(code=-1, msg="IP格式不正确"))

                    if not type(port) is int and int(port) >= 65535:
                        return self.write(dict(code=-1, msg="端口格式不正确"))

                    exist_id = session.query(
                        Server.id).filter(Server.hostname == hostname).first()
                    exist_ip = session.query(
                        Server.id).filter(Server.ip == ip).first()
                    if exist_id or exist_ip:
                        return self.write(
                            dict(code=-2,
                                 msg='IP:{ip}/Hostname:{hostname}已经存在,不要重复记录'.
                                 format(ip=ip, hostname=hostname)))

                    new_server = Server(hostname=hostname,
                                        ip=ip,
                                        port=int(port),
                                        admin_user=admin_user)
                    session.add(new_server)

            session.commit()

        return self.write(dict(code=0, msg='批量添加成功'))
示例#10
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        id = data.get('id', None)
        name = data.get('name', None)
        contact = data.get('contact', None)
        email = data.get('email', None)
        phone = data.get('phone', None)
        address = data.get('address', None)
        network = data.get('network', None)
        bandwidth = data.get('bandwidth', None)
        ip_range = data.get('ip_range', None)
        remarks = data.get('remarks', None)

        if not id or not name:
            return self.write(dict(code=-2, msg='关键参数不能为空'))

        if email and not is_mail(email):
            return self.write(dict(code=-2, msg='Email格式不正确'))

        if phone and not is_tel(phone):
            return self.write(dict(code=-2, msg='Phone格式不正确'))

        with DBContext('r') as session:
            exist_name = session.query(AssetIDC.name).filter(AssetIDC.id == id).first()

        if name != exist_name[0]:
            return self.write(dict(code=-2, msg='名称不能修改'))

        # 记录操作,不成功直接Pass
        try:
            modify_data = data
            with DBContext('w', None, True) as session:
                data_info = session.query(AssetIDC).filter(AssetIDC.id == id).all()
                for data in data_info:
                    origion_data = model_to_dict(data)
                    new_record = AssetOperationalAudit(username=nickname, request_object='IDC', request_host=name,
                                                       request_method='更新', original_data=origion_data,
                                                       modify_data=modify_data)
                    session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        update_info = {
            "contact": contact,
            "email": email,
            "phone": phone,
            "address": address,
            "network": network,
            "bandwidth": bandwidth,
            "ip_range": ip_range,
            "remarks": remarks,
        }

        with DBContext('w', None, True) as session:
            session.query(AssetIDC).filter(AssetIDC.name == name).update(update_info)

        self.write(dict(code=0, msg='更新成功'))
    def server_api(self, account, region, access_id, access_key, project_id,
                   huawei_cloud, huawei_instance_id):
        """
        测试各厂商server API的权限
        :return:
        """
        # 收集测试错误日志
        err_msg = ''
        # 测试接口的时候默认管理用户不需要
        default_admin_user = ''
        if account == 'AWS':
            ins_log.read_log('info', 'AWS EC2 API TEST')
            obj = Ec2Api(access_id, access_key, region, default_admin_user)
            try:
                obj.test_auth()
            except Exception as e:
                err_msg = 'Error:{}'.format(e)
        elif account == '阿里云':
            ins_log.read_log('info', 'Aliyun  ECS API TEST')
            obj = EcsAPi(access_id, access_key, region, default_admin_user)
            try:
                obj.test_auth()
            except Exception as e:
                err_msg = 'Error:{}'.format(e)

        elif account == '腾讯云':
            ins_log.read_log('info', 'Qcloud  CVM API TEST')
            obj = CVMApi(access_id, access_key, region, default_admin_user)
            try:
                result_data = obj.test_auth()
                if result_data['Response'].get('Error'):
                    err_msg = 'Error:{}'.format(result_data['Response'])
            except Exception as e:
                ins_log.read_log('error', e)

        elif account == '华为云':
            ins_log.read_log('info', 'HuaweiCloud  ECS API TEST')
            obj = HuaweiEcsApi(access_id=access_id,
                               access_key=access_key,
                               region=region,
                               cloud=huawei_cloud,
                               project_id=project_id,
                               default_admin_user=default_admin_user)
            try:
                obj.test_auth(huawei_instance_id)
            except keystoneauth1.exceptions.http.Unauthorized:
                err_msg = '请检查AccessID和AccessKey权限是否正确'
            except openstack.exceptions.HttpException as err:
                err_msg = 'openstack error {}'.format(err)
            except Exception as e:
                print(e)
                err_msg = 'error: {}'.format(e)

        else:
            err_msg = 'In Development.'
        return err_msg
    def get(self, *args, **kwargs):
        # nickname = self.get_current_nickname()
        id = self.get_argument('id', default=None, strip=True)

        if not id:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        server_list = []
        admin_user_list = []
        connect_server_info_list = []

        with DBContext('r') as session:
            server_info = session.query(Server).filter(
                Server.id == id).filter()
            for msg in server_info:
                data_dict = model_to_dict(msg)
                server_list.append(data_dict)
                data_dict['create_time'] = str(data_dict['create_time'])
                data_dict['update_time'] = str(data_dict['update_time'])

            if not server_list:
                return self.write(dict(code=-1, msg='没有发现IP'))

            admin_user = server_list[0]['admin_user']
            if not admin_user:
                return self.write(dict(code=-1, msg='此机器没有配置管理用户,请先配置管理用户'))

            admin_user_info = session.query(AdminUser).filter(
                AdminUser.admin_user == admin_user).filter()
            for admin_user_msg in admin_user_info:
                data_dict = model_to_dict(admin_user_msg)

                data_dict['update_time'] = str(data_dict['update_time'])
                admin_user_list.append(data_dict)

            try:
                connect_server_info = dict()
                connect_server_info['ip'] = server_list[0].get('ip')
                connect_server_info['public_ip'] = server_list[0].get(
                    'public_ip')
                connect_server_info['private_ip'] = server_list[0].get(
                    'private_ip')
                connect_server_info['port'] = server_list[0].get('port')
                connect_server_info['admin_user'] = server_list[0].get(
                    'admin_user')
                connect_server_info['system_user'] = admin_user_list[0].get(
                    'system_user')
                connect_server_info['user_key'] = admin_user_list[0].get(
                    'user_key')
                connect_server_info_list.append(connect_server_info)
            except (IndexError, KeyError) as err:
                ins_log.read_log('error', '解析的时候出错:{err}'.format(err=err))
                return False

        return self.write(
            dict(code=0, msg='获取成功', data=connect_server_info_list))
示例#13
0
    def post(self):
        red_data = {}
        try:
            data = json.loads(self.request.body.decode("utf-8"))
            mysql_conn = getConn()
            if not data['qid']:
                try:
                    sql = '''
                        select max(id) from custom_query
                    '''
                    resp = mysql_conn.query(sql)
                    mid = resp[0][0]
                    new_id = int(mid) + 1
                    data['qid'] = new_id
                except:
                    data['qid'] = 1

            colnames = json.dumps(data['colnames'])
            colalarms = json.dumps(data['colalarms'])
            sql = '''
                replace into `custom_query`(`id`, `title`, `dblinkId`, `database`, `user`, 
                `password`, `sql`, `colnames`, `timesTy`, `timesTyVal`, `colalarms`, `status`, 
                `create_time`, `update_time`, `description`, `seq`, `groupID`) 
                values ({id},'{title}',{dblinkId},'{database}','{user}','{password}',"{sql}",
                '{colnames}','{timesTy}','{timesTyVal}','{colalarms}','{status}','{create_time}','{update_time}',
                '{description}',{seq},'{groupID}')
            '''.format(id=data['qid'], title=data['title'], dblinkId=data['dblinkId'], database=data['database'],
                       user=data['user'], password=data['password'], sql=data['sql'],
                       colnames=colnames.replace("\\", "\\\\"), timesTy=data['timesTy'],
                       timesTyVal=data['timesTyVal'], colalarms=colalarms.replace("\\", "\\\\"), status=data['status'],
                       create_time=data['create_time'], update_time=str(datetime.datetime.now()),
                       description=data['description'], seq=data['seq'], groupID=data['groupID'])
            res = mysql_conn.change(sql)
            if res > 0:
                # 返回qid,并更新qid
                red_data[data['id']] = data['qid']

            # 更新组排序
            try:
                groupSeq = data['group2ndSeq']
                groupName = data['groupName']
                sql = '''
                    UPDATE custom_group set groupSeq = {} where groupName = '{}'
                '''.format(groupSeq, groupName)
                mysql_conn.change(sql)

            except Exception as e:
                ins_log.read_log('error', e)

        except Exception as e:
            ins_log.read_log('error', e)
            return self.write(dict(code=-1, msg='failed', data=red_data, err='%s' % e))

        return self.write(dict(code=0, msg='success', data=red_data))
示例#14
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        hostname = data.get('hostname', None)
        ip = data.get('ip', None)
        port = data.get('port', 22)
        public_ip = data.get('public_ip', None)
        idc = data.get('idc', None)
        admin_user = data.get('admin_user', None)
        region = data.get('region', None)
        state = data.get('state', 'new')
        tag_list = data.get('tag_list', [])
        detail = data.get('detail', None)

        if not hostname or not ip or not port:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        if not admin_user:
            return self.write(dict(code=-1, msg='管理用户不能为空'))

        if not check_ip(ip):
            return self.write(dict(code=-1, msg="IP格式不正确"))

        if not type(port) is int and int(port) >= 65535:
            return self.write(dict(code=-1, msg="端口格式不正确"))

        with DBContext('r') as session:
            exist_id = session.query(Server.id).filter(Server.hostname == hostname).first()
            exist_ip = session.query(Server.id).filter(Server.ip == ip).first()
        if exist_id or exist_ip:
            return self.write(dict(code=-2, msg='不要重复记录'))

        with DBContext('w', None, True) as session:
            new_server = Server(hostname=hostname, ip=ip, public_ip=public_ip, port=int(port), idc=idc,
                                admin_user=admin_user, region=region, state=state, detail=detail)
            session.add(new_server)

            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            # print('all_tags', all_tags)
            if all_tags:
                for tag_id in all_tags:
                    session.add(ServerTag(server_id=new_server.id, tag_id=tag_id[0]))

        # 记录,记录错误也不要影响用户正常添加
        try:
            with DBContext('w', None, True) as session:

                new_record = AssetOperationalAudit(username=nickname, request_object='主机', request_host=ip,
                                                   request_method='新增', modify_data=data)
                session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        return self.write(dict(code=0, msg='添加成功'))
示例#15
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        db_code = data.get('db_code', None)
        db_host = data.get('db_host', None)
        db_port = data.get('db_port', 3306)
        db_user = data.get('db_user', None)
        db_pwd = data.get('db_pwd', None)
        db_env = data.get('db_env', None)
        proxy_host = data.get('proxy_host', None)
        db_type = data.get('db_type', 'mysql')
        db_version = data.get('db_version', None)
        db_mark = data.get('db_mark', '写')
        tag_list = data.get('tag_list', [])
        db_detail = data.get('db_detail', None)
        db_instance = data.get('db_instance', '')
        if not db_code or not db_host or not db_port or not db_user:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        with DBContext('r') as session:
            exist_id = session.query(DB.id).filter(DB.db_code == db_code, DB.db_host == db_host, DB.db_port == db_port,
                                                   DB.db_user == db_user, DB.db_env == db_env,
                                                   DB.proxy_host == proxy_host, DB.db_type == db_type,
                                                   db_version == db_version,
                                                   DB.db_mark == db_mark).first()
        if exist_id:
            return self.write(dict(code=-2, msg='不要重复记录'))

        # 加密密码
        db_pwd = encrypt(db_pwd)

        with DBContext('w', None, True) as session:
            new_db = DB(db_code=db_code, db_host=db_host, db_port=db_port, db_user=db_user, db_pwd=db_pwd,
                        db_env=db_env, proxy_host=proxy_host, db_type=db_type, db_version=db_version, db_mark=db_mark,
                        db_detail=db_detail, db_instance=db_instance)
            session.add(new_db)

            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            if all_tags:
                for tag_id in all_tags:
                    session.add(DBTag(db_id=new_db.id, tag_id=tag_id[0]))
        # 记录,记录错误也不要影响用户正常添加
        try:
            with DBContext('w', None, True) as session:

                new_record = AssetOperationalAudit(username=nickname, request_object='数据库', request_host=db_host,
                                                   request_method='新增', modify_data=data)
                session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        return self.write(dict(code=0, msg='添加成功'))
示例#16
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()

        # 列表包str格式,str空格切割
        if not data:
            return self.write(dict(code=-1, msg='不能为空'))

        # 记录下操作,即使报错也不影响程序
        try:
            with DBContext('w', None, True) as session:

                new_record = AssetOperationalAudit(username=nickname, request_object='数据库',
                                                   request_method='批量添加', modify_data=data)
                session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        # 判断下格式长度
        with DBContext('w', None, True) as session:
            for i in data:
                if i:
                    db_info = i.split(' ')
                    ins_log.read_log('info', 'MultiDB:{db_info}'.format(db_info=db_info))
                    if len(db_info) != 6:
                        return self.write(dict(code=-2, msg='格式错误'))

                    db_type = db_info[0]
                    db_name = db_info[1]
                    db_host = db_info[2]
                    db_port = db_info[3]
                    db_user = db_info[4]
                    db_passwd = db_info[5]

                    if not type(db_port) is int and int(db_port) >= 65535:
                        return self.write(dict(code=-1, msg="端口格式不正确"))

                    exist_id = session.query(DB.id).filter(DB.db_code == db_name).first()
                    exist_ip = session.query(DB.id).filter(DB.db_host == db_host).first()
                    if exist_id or exist_ip:
                        return self.write(
                            dict(code=-2,
                                 msg='IP:{address}/Hostname:{hostname}已经存在,不要重复记录'.format(address=db_host,
                                                                                          hostname=db_name)))

                    new_db = DB(db_code=db_name, db_host=db_host, db_port=db_port, db_user=db_user, db_type=db_type,
                                db_pwd=db_passwd, state='Handle')
                    session.add(new_db)
            session.commit()

        return self.write(dict(code=0, msg='批量添加成功'))
示例#17
0
 def get(self, *args, **kwargs):
     ipstr = self.get_argument('key', default=None)
     cardstr = self.get_argument('value', default=None)
     cardtype = str(cardstr)
     ip_list = [ipstr]
     serverObjList = get_serverObjList(ip_list)
     asb = AnsiableAPI(connection='smart', hostsresource=serverObjList)
     # 获取卡片数据
     cardlist = []
     if cardtype == '0':
         carddict = getcard0(ipstr, asb)  # 主机基本信息
         cardlist.append(carddict)
     if cardtype == '1':
         carddict = getcard1(ipstr, asb)  # 文件分区使用情况
         cardlist.append(carddict)
     if cardtype == '2':
         carddict = getcard2(ipstr, asb)  # 文件分区使用情况
         cardlist.append(carddict)
     # asb.run(hosts=ipstr, module="shell", args='uptime')
     # stdout_dict = json.loads(asb.get_result())
     ins_log.read_log('info', "1222222222222222222222000000000000000000000")
     ins_log.read_log('info', cardlist)
     ins_log.read_log('info',
                      "11111111111111111100000000000000000000000000")
     if len(cardlist) > 0:
         ins_log.read_log('info', "13333333333333333333333333")
         self.write(dict(code=0, msg='获取報告成功', count=1, data=cardlist))
     else:
         self.write(dict(code=-1, msg='没有相关数据', count=0, data=[]))
示例#18
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        name = data.get('name', None)
        contact = data.get('contact', None)
        email = data.get('email', None)
        phone = data.get('phone', None)
        address = data.get('address', None)
        network = data.get('network', None)
        bandwidth = data.get('bandwidth', None)
        ip_range = data.get('ip_range', None)
        remarks = data.get('remarks', None)

        if not name:
            return self.write(dict(code=-2, msg='关键参数不能为空'))

        if email and not is_mail(email):
            return self.write(dict(code=-2, msg='Email格式不正确'))

        if phone and not is_tel(phone):
            return self.write(dict(code=-2, msg='Phone格式不正确'))

        with DBContext('r') as session:
            exist_name = session.query(AssetIDC.id).filter(AssetIDC.name == name).first()
            count = session.query(AssetIDC).count()

        if exist_name:
            return self.write(dict(code=-2, msg='不要重复记录'))

        if count > 50:
            return self.write(dict(code=-2, msg='IDC最大只允许50个'))

        with DBContext('w', None, True) as session:

            new_idc = AssetIDC(name=name, contact=contact, email=email, phone=phone, address=address, network=network,
                               bandwidth=bandwidth, ip_range=ip_range, remarks=remarks)
            session.add(new_idc)

        # 记录,记录错误也不要影响用户正常添加
        try:
            with DBContext('w', None, True) as session:

                new_record = AssetOperationalAudit(username=nickname, request_object='IDC', request_host=name,
                                                   request_method='新增', modify_data=data)
                session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        return self.write(dict(code=0, msg='添加成功'))
示例#19
0
 def getGroupInfo(self, gid):
     groupName = ''
     group2ndSeq = 0
     try:
         mysql_conn = getConn()
         sql = '''
             select groupName,groupSeq from custom_group where id = %s
         ''' % gid
         resp = mysql_conn.query(sql)
         for name, seq in resp:
             groupName = name
             group2ndSeq = seq
     except Exception as e:
         ins_log.read_log('error', e)
     return [groupName, group2ndSeq]
示例#20
0
 def asset_update(self, id_list):
     # 检查下状态,是true的话直接推送资产
     with DBContext('r', None, True) as session:
         for i in id_list:
             server_list = session.query(Server.ip, Server.port, AdminUser.system_user,
                                         AdminUser.user_key, Server.state).outerjoin(AdminUser,
                                                                                     AdminUser.admin_user == Server.admin_user).filter(
                 Server.id == i).all()
             # server_list = [('47.100.231.147', 22, 'root', '-----BEGIN RSA PRIVATE KEYxxxxxEND RSA PRIVATE KEY-----', 'false')]
             ins_log.read_log('info', '手动触发更新资产')
             rsync_sucess_list = rsync_public_key(server_list)
             if rsync_sucess_list:
                 asset_data = get_server_sysinfo(server_list)
                 ins_log.read_log('info', '资产信息:{}'.format(asset_data))
                 update_asset(asset_data)
示例#21
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        status = data.get('status')
        s3_name = data.get('name')
        remark = data.get('remark')
        

        if not remark:
            return self.write(dict(code=-1, msg='mark内容不能为空'))

        ins_log.read_log("info", s3_name)
        with DBContext('w', None) as session:
            session.query(S3).filter(S3.bucket_name == s3_name).update({
                S3.bucket_remark: remark, S3.bucket_mark:int(status)})
            session.commit()

        self.write(dict(code=0, msg='修改成功'))
示例#22
0
    def login_auth(self, zabbix_url, zabbix_username, zabbix_password):
        """
        测试ZABBIX验证是否可以通过
        :return:
        """
        # 错误信息
        err_msg = ''

        ins_log.read_log('info', 'ZABBIX Login Auth')

        try:
            zabbix_login(zabbix_url, zabbix_username, zabbix_password)

        except Exception as e:
            err_msg = '测试失败,错误信息:{}'.format(e)

        return err_msg
示例#23
0
    def send_work_wechat(self, webhook_addr, content):
        """
        发送企业微信机器人
        :return:
        """
        try:
            messages_data = {
                "msgtype": "text",
                "text": {
                    "content": content,
                    # "mentioned_list": ["hongfei.yang"],
                }
            }

            res = requests.post(webhook_addr, json.dumps(messages_data))
            print(res.text)
            return True, res
        except Exception as err:
            ins_log.read_log('error', 'send work_wechat error: {err}'.format(err=err))
            return False, err
示例#24
0
    def get(self, *args, **kwargs):
        key = self.get_argument('key', default=None, strip=True)
        value = self.get_argument('value', default=None, strip=True)
        page_size = self.get_argument('page', default=1)
        limit = self.get_argument('limit', default="999", strip=True)
        limit_start = (int(page_size) - 1) * int(limit)
        hostIp_list = []
        try:
            with DBContext('r') as session:
                serObj = session.query(Server).all()

                for msg in serObj:
                    data_dict = {}
                    data_dict['host'] = msg.hostname
                    data_dict['ip'] = msg.ip
                    hostIp_list.append(data_dict)

        except Exception as e:
            ins_log.read_log('error:', '{err}'.format(err=e))

        self.write(dict(code=0, msg='获取成功', data=hostIp_list))
示例#25
0
    def get(self, *args, **kwargs):
        data_list = []
        data_list2 = []
        with DBContext('r') as session:
            todata = session.query(Storage).filter().order_by(
                Storage.create_time.desc()).all()

        for msg in todata:
            temp_dict = {}
            data_dict = model_to_dict(msg)
            temp_dict["id"] = data_dict["id"]
            temp_dict["name"] = data_dict["name"]
            temp_dict["mode"] = data_dict["mode"]
            temp_dict["consume"] = data_dict["consume"]
            temp_dict["dictvalue"] = str(data_dict["dictvalue"])
            # temp_dict["authorized"] = str(data_dict["authorized"])
            ins_log.read_log('info', "800000000000000000000000000000000000")
            ins_log.read_log('info', data_dict["mode"])
            ins_log.read_log('info', "800000000000000000000000000000000000")
            if data_dict["mode"] == "定时":
                data_list.append(temp_dict)
            if data_dict["mode"] == "触发":
                data_list2.append(temp_dict)

        if len(data_list) > 0 or len(data_list2) > 0:
            self.write(
                dict(code=0, msg='获取成功', data=data_list, data2=data_list2))
        else:
            self.write(dict(code=-1, msg='没有相关数据', count=0, data=[]))
示例#26
0
    def get(self):
        red_data = []
        try:
            mysql_conn = getConn()
            sql = '''
                select * from custom_query
            '''
            resp = mysql_conn.query(sql)
            for id, title, dblinkId, database, user, password, sql, colnames, timesTy, timesTyVal, colalarms, status, \
                create_time, update_time, description, seq, groupID in resp:
                _d = {}
                _d['qid'] = id
                _d['title'] = title
                _d['dblinkId'] = dblinkId
                _d['database'] = database
                _d['user'] = user
                _d['password'] = password
                _d['sql'] = sql
                _d['colnames'] = colnames
                _d['timesTy'] = timesTy
                _d['timesTyVal'] = timesTyVal
                _d['colalarms'] = colalarms
                _d['status'] = status
                _d['create_time'] = str(create_time)
                _d['update_time'] = str(update_time)
                _d['description'] = description
                _d['seq'] = seq
                _d['groupID'] = groupID
                groupIds = json.loads(groupID)
                groupInfo = self.getGroupInfo(groupIds[-1])
                _d['groupName'] = groupInfo[0]
                _d['group2ndSeq'] = groupInfo[-1]
                red_data.append(_d)

        except Exception as e:
            ins_log.read_log('error', e)
            return self.write(dict(code=-1, msg='failed', data=red_data, err='%s' % e))

        return self.write(dict(code=0, msg='success', data=red_data))
示例#27
0
def toexcel(all_customized_list, asset_date, AssetSql_date):
    for j in all_customized_list:  # 执行时间表
        for q_id, q_header, q_dbname_id, q_totype, q_sqlstr in AssetSql_date:  # sql语句表
            if q_id == int(j[1]):  # 脚本id相等
                for s_id, s_db_host, s_db_port, s_db_user, s_db_pwd, s_db_type, s_db_instance in asset_date:  # 数据库源
                    if str(s_id) == q_dbname_id:  # 数据源id相等
                        CUSTOM_DB_INFO = dict(
                            host=s_db_host,
                            port=s_db_port,
                            user=s_db_user,
                            passwd=decrypt(s_db_pwd),
                            db=s_db_instance  # 库名
                        )
                        try:
                            if s_db_type == "mysql":
                                mysql_conn = MysqlBase(**CUSTOM_DB_INFO)
                                db_data = mysql_conn.query(q_sqlstr)
                            if s_db_type == "oracle":
                                oracle_conn = OracleBase(**CUSTOM_DB_INFO)
                                db_data = oracle_conn.query(q_sqlstr)
                        except:
                            traceback.print_exc()

                        db_data_list = []
                        for g in db_data:
                            db_data_list.append(list(g))

                        # 解析excel表头
                        # q_header.split('|')
                        temp_copy = copy.deepcopy(q_header)
                        temp_copy2 = temp_copy.split('|')

                        ins_log.read_log(
                            'info', "11111111111111111111111111111111111111")
                        ins_log.read_log('info', temp_copy2)
                        ins_log.read_log(
                            'info', "11111111111111111111111111111111111111")
                        # 保存文件
                        Base_DIR = os.path.dirname(
                            os.path.dirname(os.path.abspath(__file__)))
                        upload_path = '{}/static/report/'.format(Base_DIR)
                        upload_path = upload_path + j[3]
                        # 创建的目录
                        if not os.path.exists(upload_path):
                            os.mkdir(upload_path)

                        file_path = upload_path + '/' + j[0] + str(
                            datetime.datetime.now().strftime(
                                '%Y%m%d-%H:%M:%S')) + ".xls"

                        writer = pd.ExcelWriter(file_path, engine='xlsxwriter')
                        df = pd.DataFrame(db_data_list,
                                          index=range(1,
                                                      len(db_data_list) + 1),
                                          columns=temp_copy2)
                        df.to_excel(writer,
                                    encoding='utf-8',
                                    sheet_name='Sheet')
                        writer.save()
示例#28
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        id = data.get('id', None)
        totitle = str(data.get('title', None))
        dbid = str(data.get('dbid', None))
        times = data.get('times', None)
        cycle = str(data.get('cycle', None))
        flag = str(data.get('flag', None))
        todate = str(data.get('todate', None))
        start_end = str(data.get('start_end', None))
        download_dir = str(data.get('download_dir', None))
        ins_log.read_log('info', flag)
        ins_log.read_log('info', todate)

        try:
            with DBContext('w', None, True) as session:
                session.query(Customized).filter(Customized.id == id).update({
                    Customized.totitle:
                    totitle,
                    Customized.dbid:
                    dbid,
                    Customized.times:
                    times,
                    Customized.cycle:
                    cycle,
                    Customized.flag:
                    flag,
                    Customized.todate:
                    todate,
                    Customized.start_end:
                    start_end,
                    Customized.download_dir:
                    download_dir,
                })
                session.commit()
        except Exception as e:
            return self.write(dict(code=-2, msg='修改失败,请检查数据是否合法或者重复'))

        self.write(dict(code=0, msg='编辑成功'))
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        remark = data.get('mark')
        instance_id = data.get('id')
        state = data.get('state')

        ins_log.read_log("info",
                         remark + "||||" + state + "||||" + instance_id)

        if not remark or not state:
            return self.write(dict(code=-1, msg='mark内容和状态内容都不能为空'))
        with DBContext('w', None) as session:
            session.query(Security_Host).filter(
                Security_Host.server_instance_id == instance_id).update({
                    Security_Host.server_mark:
                    remark,
                    Security_Host.security_state:
                    state
                })
            session.commit()

        self.write(dict(code=0, msg='修改成功'))
示例#30
0
    def get(self, *args, **kwargs):
        nickname = self.get_current_nickname()
        key = self.get_argument('key', default=None, strip=True)
        value = self.get_argument('value', default=None, strip=True)
        page_size = self.get_argument('page', default=1, strip=True)
        limit = self.get_argument('limit', default="999", strip=True)
        limit_start = (int(page_size) - 1) * int(limit)
        sys_list = []
        count = 0
        try:
            with DBContext('r') as session:
                if key == 'sys_id':
                    count = session.query(SysUpgrade).filter(
                        SysUpgrade.sys_id == value).count()
                    all_upgrade = session.query(SysUpgrade).filter(
                        SysUpgrade.sys_id == value).order_by(
                            SysUpgrade.id.desc())
                    sys_name = session.query(
                        Sys.sys_name).filter(Sys.id == value).first()
                    _sn = ''
                    if sys_name:
                        _sn = sys_name[0]

                    for msg in all_upgrade:
                        data_dict = model_to_dict(msg)
                        data_dict['up_stime'] = str(data_dict['up_stime'])
                        data_dict['up_etime'] = str(data_dict['up_etime'])
                        data_dict['issued_time'] = str(
                            data_dict['issued_time'])
                        data_dict['up_real_time'] = str(
                            data_dict['up_real_time'])
                        data_dict['sys_name'] = _sn
                        sys_list.append(data_dict)

        except Exception as e:
            ins_log.read_log('error:', '{err}'.format(err=e))

        self.write(dict(code=0, msg='获取成功', count=count, data=sys_list))