Пример #1
0
    def get_asset_info(self):
        """
        获取所有可连接资产信息
        :return:
        """

        with DBContext('r') as session:
            # 只拿到登陆用到的IP Port User
            server_list = session.query(Server.ip, Server.port, AdminUser.system_user,
                                        ).outerjoin(AdminUser,
                                                    AdminUser.admin_user == Server.admin_user).filter(
                Server.state == 'true').all()
            return server_list
Пример #2
0
    def delete(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        args_id = data.get('args_id', None)
        if not args_id:
            self.write(dict(status=-1, msg='ID不能为空'))
            return

        with DBContext('default') as session:
            session.query(ArgsList).filter(
                ArgsList.args_id.in_(args_id)).delete(
                    synchronize_session=False)
            session.commit()
        self.write(dict(status=0, msg='删除成功'))
Пример #3
0
def getproviderlist():
    """
        Get id, key, secret
    """
    provider_list = []
    with DBContext('r') as se:
        provider_info = se.query(DNSDomainProvider).filter(
            DNSDomainProvider.pro_platform == 'godaddy',
            DNSDomainProvider.pro_status == 1).all()
        for provider in provider_info:
            data_dict = model_to_dict(provider)
            provider_list.append(data_dict)
    return provider_list
Пример #4
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        args_name = data.get('args_name', None)
        args_self = data.get('args_self', None)
        if not args_name or not args_self:
            self.write(dict(status=-1, msg='参数不能为空'))
            return

        with DBContext('readonly') as session:
            args_info = session.query(ArgsList).filter(
                ArgsList.args_name == args_name).first()
        if args_info:
            self.write(dict(status=-2, msg='名称不能重复'))
            return

        with DBContext('default') as session:
            session.add(
                ArgsList(args_name=args_name,
                         args_self=args_self,
                         creator=self.get_current_user().decode("utf-8")))
            session.commit()
        self.write(dict(status=0, msg='添加成功'))
Пример #5
0
 def get_host_info(self):
     '''获取主机信息,并写入数据库'''
     id_list = self.check_server_state()
     with DBContext('r') as session:
         for i in id_list:
             server_list = session.query(
                 Server.ip, Server.port, AdminUser.system_user).outerjoin(
                     AdminUser,
                     AdminUser.admin_user == Server.admin_user).filter(
                         Server.id == i).all()
             asset_data = get_server_sysinfo(server_list)
             ins_log.read_log('info', '资产信息:{}'.format(asset_data))
             self.update_asset(asset_data)
Пример #6
0
def get_zabbix_configs():
    """
    从数据库里面看下用户有几个监控
    :return:
    """
    zabbix_configs_list = []

    with DBContext('w') as session:
        zabbix_config_info = session.query(ZabbixConfig).all()
        for data in zabbix_config_info:
            data_dict = model_to_dict(data)
            zabbix_configs_list.append(data_dict)
    return zabbix_configs_list
Пример #7
0
 def get(self, *args, **kwargs):
     """查询出标签服务关联的数据接口"""
     tag_list = []
     with DBContext('r') as session:
         tag_services_info = session.query(ServicesTagMiddle).all()
         for data in tag_services_info:
             data_dict = model_to_dict(data)
             tag_info = session.query(TagList).filter(TagList.id == data_dict["tag_id"]).first()
             tag_name = model_to_dict(tag_info)["key"]
             services_info = session.query(ServicesList).filter(ServicesList.id == data_dict["services_id"]).first()
             services_name = model_to_dict(services_info)["services_name"]
             tag_list.append({tag_name: services_name})
     return tag_list
Пример #8
0
    def exec_task22(self, flow_id):
        '''
            开始执行任务
            0 为等审核
            1 审核通过,待执行,任务接手后状态为标记为2
            2 正在执行
        '''
        ### 如果任务没有审批,则进入休眠,初始休眠时间为0秒
        int_sleep, end_sleep = 1, 1
        while True:
            ### 挂起的任务设置休眠时间
            ins_log.read_log(
                'info',
                'The task-{0} is not ready, retry after {1} s of sleep'.format(
                    flow_id, int_sleep))
            time.sleep(int_sleep)
            int_sleep += 2
            end_sleep += int_sleep
            if int_sleep > 15: int_sleep = 15
            with DBContext('readonly') as session:
                status = session.query(Publish).filter(
                    Publish.id == flow_id, Publish.status == '0').first()
            #status==0,那么继续循环并sleep任务,直到任务被接手
            if not status: break  #任务状态!=new,比如ready,那么就开始退出循环,开始执行
            if end_sleep > 150: raise SystemExit('message timeout')

        ### 审核通过,现在开始执行,标记状态为2
        with DBContext('default') as session:
            session.query(Publish).filter(Publish.id == flow_id).update({
                Publish.status:
                '2',
                Publish.start_exe_time:
                datetime.now()
            })
            session.commit()
        print('start exec....')
        task = TaskPublish(flow_id)
        task.task_exec()
Пример #9
0
    def get_asset_server(self):
        """
        获取CMDB里面所有主机
        :return:
        """
        server_list = []
        with DBContext('r') as session:
            server_info = session.query(Server).order_by(Server.id).all()
        for msg in server_info:
            data_dict = model_to_dict(msg)
            data_dict['create_time'] = str(data_dict['create_time'])
            server_list.append(data_dict)

        return server_list
Пример #10
0
def update_project_budget():
    with DBContext('w') as session:
        data = session.query(AwsProjectBudgetControl).all()
    bill_list = [model_to_dict(e) for e in data]
    for i in bill_list:
        session.query(AwsProjectBudgetControl) \
            .filter(AwsProjectBudgetControl.userproject == i.get("userproject"),
                    AwsProjectBudgetControl.bill_date == i.get("bill_date")) \
            .update(
            {
                AwsProjectBudgetControl.aws_percentage: i.get("aws_total_cost") / i.get("aws_budget_cost") if i.get("aws_budget_cost") else 0,
            }
        )
    session.commit()
Пример #11
0
 def check_group(self, gid='before'):
     with DBContext('readonly') as session:
         if gid == 'before':
             status = session.query(TaskSched.task_status).filter(
                 TaskSched.list_id == self.flow_id,
                 TaskSched.task_group < self.group_id).all()
         else:
             status = session.query(TaskSched.task_status).filter(
                 TaskSched.list_id == self.flow_id).all()
         session.commit()
     for i in status:
         if i[0] != '3':
             return '4'
     return '3'
Пример #12
0
    def write_verify(self):
        rrr = redis.Redis(connection_pool=self.pool)
        for meth in self.method_list:
            user_meth = self.user_id + meth
            rrr.delete(user_meth)
        with DBContext('readonly') as session:
            func_list = session.query(Functions.method_type, Functions.uri
                                      ).outerjoin(RoleFunctions, Functions.func_id == RoleFunctions.func_id).outerjoin(
                UserRoles, RoleFunctions.role_id == UserRoles.role_id).filter(UserRoles.user_id == self.user_id).all()

        for func in func_list:
            ### 把权限写入redis
            rrr.sadd(self.user_id + func[0], func[1])
        return '权限已经写入缓存'
Пример #13
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        role_name = data.get('role_name', None)
        role_id = data.get('role_id', None)

        if not role_name:
            self.write(dict(status=-1, msg='不能为空'))
            return

        with DBContext('default') as session:
            session.query(Roles).filter(Roles.role_id == role_id).update(
                {Roles.role_name: role_name})
            session.commit()
        self.write(dict(status=0, msg='编辑成功'))
Пример #14
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        args_id = data.get('args_id', None)
        args_self = data.get('args_self', None)

        if not args_id or not args_self:
            self.write(dict(status=-1, msg='ID不能为空'))
            return

        with DBContext('default') as session:
            session.query(ArgsList).filter(ArgsList.args_id == args_id).update(
                {ArgsList.args_self: args_self})
            session.commit()
        self.write(dict(status=0, msg='编辑成功'))
Пример #15
0
    def sync_cmdb(self):
        """
        写入CMDB
        :return:
        """

        reids_list = self.get_uredis_all()
        if not reids_list:
            ins_log.read_log('error', 'Not fount reids info...')
            return False
        with DBContext('w') as session:
            for data in reids_list:
                for redis in data:
                    ins_log.read_log('info', '资产信息:{}'.format(redis))
                    try:
                        db_user = redis['user']
                    except KeyError:
                        db_user = '******'

                    db_name = redis.get('db_name')
                    exist_redis = session.query(DB).filter(
                        DB.db_code == db_name).first()

                    if exist_redis:
                        session.query(DB).filter(DB.db_code == db_name).update(
                            {
                                DB.idc: self.idc,
                                DB.db_host: redis.get('db_host'),
                                DB.db_port: redis.get('db_port'),
                                DB.db_user: db_user,
                                DB.db_region: redis.get('db_region'),
                                DB.db_type: redis.get('db_type'),
                                DB.db_version: redis.get('db_version'),
                                DB.state: redis.get('instance_state'),
                                DB.db_instance_id: redis.get('db_instance_id')
                            })
                    else:
                        new_db = DB(idc=self.idc,
                                    db_code=db_name,
                                    db_host=redis.get('db_host'),
                                    db_port=redis.get('db_port'),
                                    db_user=db_user,
                                    db_region=redis.get('db_region'),
                                    db_type=redis.get('db_type'),
                                    db_version=redis.get('db_version'),
                                    state=redis.get('instance_state'),
                                    db_instance_id=redis.get('db_instance_id'))
                        session.add(new_db)
            session.commit()
Пример #16
0
    def __init__(self, flow_id, group_id):
        self.flow_id = str(flow_id)
        self.group_id = group_id
        self.exec_method = my_settings['exec_method']
        self.salt_api = my_settings['salt_api']
        self.salt_username = my_settings['salt_username']
        self.salt_password = my_settings['salt_password']
        self.salt_timeout = my_settings['salt_timeout']
        with DBContext('readonly') as session:
            taskinfo = session.query(
                TaskList.hosts,
                TaskList.args).filter(TaskList.list_id == self.flow_id).one()

        self.all_exec_ip = literal_eval(taskinfo[0]).get(self.group_id, '')
        self.all_args_info = literal_eval(taskinfo[1])
Пример #17
0
def get_configs():
    """
    get id / key / region info
    :return:
    """

    aws_configs_list = []
    with DBContext('r') as session:
        aws_configs_info = session.query(AssetConfigs).filter(AssetConfigs.account == 'AWS').all()
        for data in aws_configs_info:
            data_dict = model_to_dict(data)
            data_dict['create_time'] = str(data_dict['create_time'])
            data_dict['update_time'] = str(data_dict['update_time'])
            aws_configs_list.append(data_dict)
    return aws_configs_list
Пример #18
0
    def get_system_user(self):
        """
        获取所有系统用户
        :return:
        """
        with DBContext('r') as session:
            system_user_list = []
            system_user_data = session.query(SystemUser).all()
            for data in system_user_data:
                data_dict = model_to_dict(data)
                data_dict['create_time'] = str(data_dict['create_time'])
                data_dict['update_time'] = str(data_dict['update_time'])
                system_user_list.append(data_dict)

            return system_user_list
Пример #19
0
 def change_list(self):
     status_list = []
     with DBContext('readonly') as session:
         status = session.query(TaskSched.task_status).filter(
             TaskSched.list_id == self.flow_id).all()
     for s in status:
         status_list.append(s[0])
     if '0' in status_list:
         status = '0'
     if '1' in status_list:
         status = '1'
     if '2' in status_list:
         status = '2'
     if '5' in status_list and '1' not in status_list and '2' not in status_list:
         status = '5'
     if '4' in status_list:
         status = '4'
     if '3' in status_list and len(list(set(status_list))) == 1:
         status = '3'
     with DBContext('default') as session:
         session.query(TaskList).filter(
             TaskList.list_id == self.flow_id).update(
                 {TaskList.status: status})
         session.commit()
Пример #20
0
    def copy_file_and_exec(self, host):
        if not self.check_file():
            self.msg = '{} Not Fount'.format(self.file_name)
            return False

        if not isinstance(host, list):
            raise ValueError()

        ip = host[0][0]
        port = host[0][1]
        user = host[0][2]
        # 这里已经推送玩publick key后就不再使用管理用户了,直接使用本机的Key登陆
        with DBContext('r') as session:
            cmdb_key = session.query(
                SSHConfigs.id_rsa).filter(SSHConfigs.name == 'cmdb').first()
        if not cmdb_key:
            return False, '{}, 认证失败,cmdb key不存在'.format(ip)
        else:
            cmdb_key = cmdb_key[0]
        cmd = 'python /tmp/sysinfo.py'

        ssh_key_file = get_key_file(cmdb_key)
        if ssh_key_file:
            try:
                # res_info,获取到的资产信息, error_info
                res_info, error_info = remote_upload_file(
                    ip, user, ssh_key_file, cmd, self.file_path,
                    '/tmp/sysinfo.py', port)
                if res_info:
                    self.msg = {
                        'status': True,
                        'data': {
                            ip: json.loads(res_info)
                        }
                    }
                    return self.msg
                else:

                    # self.msg = '{}获取资产信息失败,错误信息:{}'.format(ip, error_info)
                    self.msg = {'status': False, 'data': {ip: error_info}}
                    return self.msg
            except paramiko.ssh_exception.AuthenticationException:
                # self.msg = False, '{}, 认证失败,请检查Key是否正确'.format(ip)
                self.msg = {'status': False, 'data': {ip: '认证失败,请检查Key是否正确'}}
            except Exception as e:
                print(e)

        return self.msg
Пример #21
0
    def check_server_state(self):
        '''查询Server状态, 新建的推送Key并更新'''
        new_asset_list = []
        id_list = []
        with DBContext('r') as session:
            # 新加的资产,state:new
            new_asset = session.query(Server).filter(Server.state == self.state).all()
            for msg in new_asset:
                data_dict = model_to_dict(msg)
                data_dict['create_time'] = str(data_dict['create_time'])
                new_asset_list.append(data_dict)

            for i in new_asset_list:
                id_list.append(i.get('id'))

            return id_list
Пример #22
0
def write_error_log(error_list):
    with DBContext('w') as session:
        for i in error_list:
            ip = i.get('ip')
            msg = i.get('msg')
            error_log = '推送公钥失败, 错误信息:{}'.format(msg)
            ins_log.read_log('error', error_log)
            session.query(Server).filter(Server.ip == ip).update({Server.state: 'false'})
            exist_ip = session.query(AssetErrorLog).filter(AssetErrorLog.ip == ip).first()
            if exist_ip:
                session.query(AssetErrorLog).filter(AssetErrorLog.ip == ip).update(
                    {AssetErrorLog.error_log: error_log})
            else:
                new_error_log = AssetErrorLog(ip=ip, error_log=error_log)
                session.add(new_error_log)
        session.commit()
Пример #23
0
 def get_host_info(self):
     id_list = self.check_server_state()
     '''获取主机信息'''
     connect_server_list = []
     with DBContext('r') as session:
         for i in id_list:
             connect_info = session.query(
                 Server.ip, Server.port, AdminUser.system_user).outerjoin(
                     AdminUser,
                     AdminUser.admin_user == Server.admin_user).filter(
                         Server.id == i).all()
             connect_server_list.append(connect_info)
     print('connect_server_list--->', connect_server_list)
     res_data = get_server_sysinfo(connect_server_list)
     print(res_data)
     return res_data
Пример #24
0
def get_configs():
    """
    get id / key / region info
    :return:
    """

    qcloud_configs_list = []
    with DBContext('r') as session:
        qcloud_configs_info = session.query(AssetConfigs).filter(
            AssetConfigs.account == '腾讯云', AssetConfigs.state == 'true').all()
        for data in qcloud_configs_info:
            data_dict = model_to_dict(data)
            data_dict['create_time'] = str(data_dict['create_time'])
            data_dict['update_time'] = str(data_dict['update_time'])
            qcloud_configs_list.append(data_dict)
    return qcloud_configs_list
Пример #25
0
 def patch(self, args=None):
     '''更新任务状态'''
     ret = dict(status=True, msg=None, data=None)
     try:
         data = json.loads(self.request.body.decode("utf-8"))
         status = data.get('status')
         with DBContext('default') as session:
             res = session.query(Publish).filter(Publish.id == args).first()
             res.status = status
             res.review_time = datetime.now()
             session.commit()
             ret['data'] = model_to_dict(res)
             ret['msg'] = '任务状态更新成功'
     except Exception as e:
         print(e)
         ret['status'] = False
         if not ret['msg']: ret['msg'] = str(e)
     self.write(ret)
Пример #26
0
def main():
    mc = MyCryptV2()
    aws_configs_list = get_configs()
    if not aws_configs_list:
        ins_log.write_log('error', '没有获取到AWS资产配置信息,跳过')
        return False
    for config in aws_configs_list:
        access_id = config.get('access_id')
        access_key = mc.my_decrypt(config.get('access_key'))  # 解密后使用
        region = config.get('region')
        default_admin_user = config.get('default_admin_user')

        obj = ForDangersHandler(access_id, access_key, region,
                                default_admin_user)
        result = [i for i in obj.get_tags()]
    with DBContext('w', None) as session:
        session.execute('''TRUNCATE TABLE asset_tag''')
        session.bulk_insert_mappings(Tag, result)
        session.commit()
Пример #27
0
    def get(self, *args, **kwargs):
        page_size = self.get_argument('page', default=1, strip=True)
        limit = self.get_argument('limit', default=200, strip=True)
        limit_start = (int(page_size) - 1) * int(limit)
        temp_list = []

        with DBContext('readonly') as session:
            count = session.query(TempList).count()
            temp_info = session.query(TempList).order_by(
                TempList.temp_id).offset(limit_start).limit(int(limit))

        for msg in temp_info:
            data_dict = model_to_dict(msg)
            data_dict.pop('ctime')
            data_dict.pop('utime')
            temp_list.append(data_dict)

        kwargs = {"data": temp_list, "code": 0, "count": count, "msg": '获取成功'}
        self.write(kwargs)
Пример #28
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        cmd_id = data.get('cmd_id', None)
        args = data.get('args', None)
        forc_ip = data.get('forc_ip', None)

        if not cmd_id:
            self.write(dict(status=-1, msg='ID不能为空'))
            return

        with DBContext('default') as session:
            session.query(CmdList).filter(CmdList.cmd_id == cmd_id).update({
                CmdList.args:
                args,
                CmdList.forc_ip:
                forc_ip
            })
            session.commit()
        self.write(dict(status=0, msg='编辑成功'))
Пример #29
0
    def get(self, *args, **kwargs):
        resource_id = self.get_argument('resource_id',
                                        default=None,
                                        strip=True)
        service_name = self.get_argument('service_name',
                                         default=None,
                                         strip=True)
        this_month = datetime.now().replace(day=1,
                                            minute=0,
                                            hour=0,
                                            second=0,
                                            microsecond=0)
        month = self.get_argument('month', default=None, strip=True)
        if not month:
            month = this_month
        else:
            month = datetime.strptime(month, '%Y-%m')
        next_month = month + relativedelta(months=+1)
        month = month.strftime("%Y-%m-01 00:00:00")
        next_month = next_month.strftime("%Y-%m-01,00:00:00")
        if not resource_id or not service_name:
            return self.write(dict(code=-2, msg='关键参数不能为空'))
        with DBContext('r', const.DEFAULT_DB_KEY) as session:
            bill_data = session.query(AwsServiceBillReport) \
                .filter(AwsServiceBillReport.resource_id == resource_id,
                        AwsServiceBillReport.service_name == service_name,
                        AwsServiceBillReport.bill_date >= month,
                        AwsServiceBillReport.bill_date < next_month,
                        ).all()

        bill_list = [model_to_dict(e) for e in bill_data]
        if bill_list:
            bill_list = sorted(
                bill_list,
                key=lambda bill_list: int(bill_list["bill_date"][8:10]))
        for bill in bill_list:
            bill["total_cost"] = str(
                decimal.Decimal(bill['total_cost']).quantize(
                    decimal.Decimal('0.00000')))
        # 返回数据
        return self.write(
            dict(code=0, msg='获取成功', count=len(bill_list), data=bill_list))
Пример #30
0
    def get(self, *args, **kwargs):
        user_id = 2
        with DBContext('readonly') as session:
            func_list = session.query(
                Functions.method_type, Functions.uri).outerjoin(
                    RoleFunctions,
                    Functions.func_id == RoleFunctions.func_id).outerjoin(
                        UserRoles,
                        RoleFunctions.role_id == UserRoles.role_id).filter(
                            UserRoles.user_id == user_id).all()

        for func in func_list:
            print(str(user_id) + func[0], func[1])
            data = {func[1]: func[0]}

        kargs = {
            "data": data,
            "status": 0,
        }
        self.write(kargs)