def post(self, *args, **kwargs): """关联标签和服务""" tag_key = self.get_argument('tag_key', default=None, strip=True) services_name = self.get_argument('services_name', default=None, strip=True) # 传入一个service_name的列表 with DBContext('w') as session: tag_info = session.query(TagList).filter(TagList.key == tag_key).first() tag_id = model_to_dict(tag_info)['id'] tag_info.service_name = services_name for name in services_name.split(','): services_info = session.query(ServicesList).filter(ServicesList.services_name == name).first() if not services_info: new_service = ServicesList(services_name=name) session.add(new_service) session.commit() services_id_list = [] for name in services_name.split(','): services_info = session.query(ServicesList).filter(ServicesList.services_name == name).first() dict_data = model_to_dict(services_info) services_id = dict_data['id'] services_id_list.append(services_id) for services_id in services_id_list: data_info = session.query(ServicesTagMiddle).filter_by( tag_id=tag_id, services_id=services_id ).first() if not data_info: new_middle = ServicesTagMiddle(tag_id=tag_id, services_id=services_id) session.add(new_middle) session.commit()
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
def get(self, *args, **kwargs): """查询出标签检测结果数据接口""" search_key = self.get_argument('search_key', default=None, strip=True) tag_list = [] with DBContext('r') as session: if search_key: # 模糊查所有 tag_info = session.query(ResultList).filter( or_( ResultList.services_name.like( '%{}%'.format(search_key)), ResultList.services_resource_id.like( '%{}%'.format(search_key)), ResultList.key.like('%{}%'.format(search_key)), ResultList.value.like('%{}%'.format(search_key)), ResultList.is_valid.like( '%{}%'.format(search_key)))).order_by( ResultList.id).all() else: tag_info = session.query(ResultList).order_by( ResultList.id).all() for data in tag_info: data_dict = model_to_dict(data) tag_list.append(data_dict) return tag_list
def change_aws_value(): """定时任务:修改aws服务上的标签value""" with DBContext('w') as session: change_value_list = [] data_info = session.query(ChangeResultList).all() if data_info: for data in data_info: dict_data = model_to_dict(data) change_value_list.append(dict_data) s = get_aws_session(**settings.get("aws_key")) clients = s.client("resourcegroupstaggingapi") try: for tag_value in change_value_list: services_resource_id = tag_value["services_resource_id"] key = tag_value["key"] value = tag_value["value"] # 去除资源标签 clients.untag_resources(ResourceARNList=[ services_resource_id, ], TagKeys=[ key, ]) # 添加资源标签 clients.tag_resources(ResourceARNList=[ services_resource_id, ], Tags={key: value}) session.query(ChangeResultList).filter_by( services_resource_id=services_resource_id, key=key).delete() session.commit() except Exception as e: ins_log.read_log('error', e)
def get(self, *args, **kwargs): """查询出定时开关机的ec2信息数据接口""" key = self.get_argument('key', default=None, strip=True) ec2_list = [] with DBContext('r') as session: if key: # 模糊查所有 ec2_info = session.query(EC2Instance).filter( or_(EC2Instance.service_name.like('%{}%'.format(key)), EC2Instance.instance_id.like('%{}%'.format(key)), EC2Instance.tag_name.like('%{}%'.format(key)), EC2Instance.private_ip.like('%{}%'.format(key)), EC2Instance.uptime.like('%{}%'.format(key)), EC2Instance.downtime.like('%{}%'.format(key)), EC2Instance.instance_type.like('%{}%'.format(key))) ).order_by( EC2Instance.id ).all() else: ec2_info = session.query(EC2Instance).order_by( EC2Instance.id ).all() for data in ec2_info: data_dict = model_to_dict(data) ec2_list.append(data_dict) return ec2_list
def get(self, *args, **kwargs): """可关联的服务名称""" with DBContext('w') as session: services_name_list = [] all_services_info = session.query(ServicesList).all() for services in all_services_info: services_name = model_to_dict(services)["services_name"] services_name_list.append(services_name) return self.write(dict(code=0, msg='获取成功', total=len(services_name_list), data=services_name_list))
def check_tag_services(): """定时任务:检查检测aws服务的标签是否合规,并将结果入库""" tag_list = get_tags() tag_key_list = [] with DBContext('r') as session: tag_info = session.query(TagList).all() for tag in tag_info: data = model_to_dict(tag) tag_key_list.append(data["key"]) # 获取标签所对应的服务名称 try: with DBContext('w') as session: session.query(ResultList).delete( synchronize_session=False) # 清空数据库的所有记录 for tag_key in tag_key_list: tag_info = session.query(TagList).filter( TagList.key == tag_key).first() tag_id = model_to_dict(tag_info)['id'] if model_to_dict(tag_info)['value'] is not None: value_list = model_to_dict(tag_info)['value'].split(',') else: value_list = None data_info = session.query(ServicesTagMiddle).filter( ServicesTagMiddle.tag_id == tag_id).all() if data_info is not None: services_list = [] for data in data_info: services_id = model_to_dict(data)['services_id'] services_info = session.query(ServicesList).filter( ServicesList.id == services_id).first() services_name = model_to_dict( services_info)['services_name'] services_list.append(services_name) for services_name in services_list: for tag in tag_list: is_valid = 1 if tag["tag_aws_service"] == services_name and tag[ "tag_name"] == tag_key: if value_list is not None and tag[ "tag_value"] not in value_list: is_valid = 0 new_data = ResultList( services_name=services_name, services_resource_id=tag[ "tag_description"], key=tag["tag_name"], value=tag["tag_value"], is_valid=is_valid) session.add(new_data) session.commit() except Exception as e: ins_log.read_log('error', e)