Ejemplo n.º 1
0
def create_by_one2one(send_id, rec_ids, content, message_type, group):
    """
    创建一条私密消息,用于少量用户的流程通知
    :param send_id: 发送者
    :param rec_ids: 接收者
    :param content: 内容
    :param message_type: 类型
    :param group: 用户组
    :return: code
    """
    rec_ids = list(set(rec_ids))
    if not message_type:
        message_type = Content.PRIVATE
    if not group:
        group = 'public'
    if send_id is not None and content:
        with db.auto_commit():
            content = Content(send_id=send_id,
                              content=content,
                              type=message_type,
                              group=group)
            db.session.add(content)
            db.session.flush()
            content_id = content.id
            if content_id:
                with db.auto_commit():
                    for i in rec_ids:
                        db.session.add(
                            Message(rec_id=int(i),
                                    content_id=content_id,
                                    status=Message.UNREAD))
        # for i in rec_ids:
        #     push2redis(i)
        return 0
    raise SaveObjectException()
Ejemplo n.º 2
0
def change_status(user, message_ids=None, isall=None):
    if message_ids:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.READ} WHERE rec_id={user} and id in ({message_ids})"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    elif isall:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.READ} WHERE rec_id={user}"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    else:
        raise SaveObjectException()
Ejemplo n.º 3
0
def get_statistics_route():
    # 待修改成缓存类型接口
    # 接口调用次数
    routes = t_redis.keys(f'{ROUTE_STATISTICS}*')
    data = {}
    for r in routes:
        r_info = t_redis.hgetall(r)
        r_name = r.replace(ROUTE_STATISTICS, '')
        data[r_name] = r_info
        add_list = []
        for k, v in r_info.items():
            k_info = k.split(']')
            method = k_info[0].replace('[', '')
            route = k_info[1]
            ret = RouteStatistics.query.filter_by(service=r_name,
                                                  route=route,
                                                  method=method).first()
            if ret:
                ret.count = v
            else:
                ret = RouteStatistics(service=r_name,
                                      route=route,
                                      method=method,
                                      count=int(v))
            add_list.append(ret)
        with db.auto_commit():
            db.session.add_all(add_list)
    return 0, data
Ejemplo n.º 4
0
 def user_bind_roles(cls, userid, roleids, project_id):
     roles_list_without_pid = [
         i['name'] for i in UserBusiness.query_json_by_id(userid)[0]['role']
     ]
     modify_roles_row = UserBusiness.query_json_by_id_and_project(
         g.userid, project_id)
     modify_roles = modify_roles_row[0]['role'] if modify_roles_row else []
     modify_roles_list = []
     if modify_roles:
         modify_roles_list = [
             modify_role['name'] for modify_role in modify_roles
         ]
     admin_id = Role.query.filter(Role.status == Role.ACTIVE,
                                  Role.name == 'admin').first().id
     if not g.is_admin:
         # 如果你不是admin,那你必须是owner,且你不能修改Admin
         if not modify_roles_list or 'owner' not in modify_roles_list:
             raise OperationPermissionDeniedException()
         if admin_id in roleids:
             raise OperationPermissionDeniedException()
         if 'admin' in roles_list_without_pid:
             raise OperationPermissionDeniedException()
     with db.auto_commit():
         for item in UserBindRole.query.filter_by(
                 user_id=userid, project_id=project_id).all():
             db.session.delete(item)
         for roleid in roleids:
             db.session.add(
                 UserBindRole(user_id=userid,
                              role_id=roleid,
                              project_id=project_id))
     return 0, None
Ejemplo n.º 5
0
 def create(cls, tag, project_id, description):
     try:
         creator = g.userid if g.userid else None
         ret = Tag.query.filter(Tag.tag == tag).first()
         if ret:
             if ret.status == Tag.DISABLE:
                 with db.auto_commit():
                     ret.status = Tag.ACTIVE
                     ret.creator = creator
                     db.session.add(ret)
                 return 0
             else:
                 raise SaveObjectException('存在相同名称的标签')
         else:
             task = Tag(
                 tag=tag,
                 project_id=project_id,
                 description=description,
                 creator=creator
             )
             db.session.add(task)
             db.session.commit()
             return 0
     except Exception as e:
         current_app.logger.error(str(e))
         raise SaveObjectException
Ejemplo n.º 6
0
def record_statistics_route():
    routes = t_redis.keys(f'{ROUTE_STATISTICS}*')
    for r in routes:
        server_info = {'name': '', 'routes': [], 'count': 0}
        r_info = t_redis.hgetall(r)
        r_name = r.replace(ROUTE_STATISTICS, '')
        server_info['name'] = r_name
        add_list = []

        for k, v in r_info.items():
            v = int(v)
            k_info = k.split(']')
            method = k_info[0].replace('[', '')
            route = k_info[1]
            ret = RouteStatistics.query.filter_by(service=r_name,
                                                  route=route,
                                                  method=method).first()
            if ret:
                ret.count = v
            else:
                ret = RouteStatistics(service=r_name,
                                      route=route,
                                      method=method,
                                      count=v)
            add_list.append(ret)

        with db.auto_commit():
            db.session.add_all(add_list)
    return 'success'
Ejemplo n.º 7
0
def update_config(config_id, module, module_type, content, description, project_id):
    config = Config.query.get(config_id)
    if not config:
        raise CannotFindObjectException(f'config {config_id} not found in system!')

    module = module if module else config.module
    module_type = module_type if module_type else config.module_type

    if config.projectid in ['0', 0, None, 'null']:
        config_check = Config.query.filter(Config.module == module,
                                           Config.module_type == module_type,
                                           Config.projectid == project_id).first()
        if not config_check:
            current_app.logger.info('should create a new config with this project!')
            return create_config(
                module=module if module is not None else config.module,
                module_type=module_type if module_type is not None else config.module_type,
                content=content if content is not None else config.content,
                description=description if description is not None else config.description,
                project_id=project_id)
        else:
            config = config_check

    with db.auto_commit():
        config.module = module if module is not None else config.module
        config.module_type = module_type if module_type is not None else config.module_type
        config.content = json.dumps(content) if content is not None else config.content
        config.description = description if description is not None else config.description
        db.session.add(config)
    return 0
Ejemplo n.º 8
0
def record_guest(ip, user_agent):
    # ip = request.remote_addr
    # user_agent = request.user_agent
    platform = user_agent.platform
    browser = user_agent.browser
    string = user_agent.string
    version = user_agent.version

    ret = Guest.query.filter(Guest.ip == ip,
                             Guest.platform == platform,
                             Guest.browser == browser,
                             Guest.version == version,
                             ).first()
    with db.auto_commit():
        if ret:
            ret.count += 1
        else:
            ret = Guest(
                ip=ip,
                platform=platform,
                browser=browser,
                string=string,
                version=version
            )
        db.session.add(ret)
Ejemplo n.º 9
0
 def add_reference(cls, tags):
     if tags:
         tag_list = tags.split(',')
         for tagid in tag_list:
             tag = Tag.query.get(tagid)
             with db.auto_commit():
                 tag.reference_nums += 1
                 db.session.add(tag)
Ejemplo n.º 10
0
def delete_status(user, message_ids=None, isall=None):
    """
    修改通知的状态,已读改为1,删除改为2
    :return: 修改成功
    """
    if message_ids:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.DISABLE} WHERE rec_id={user} and id in ({message_ids})"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    elif isall:
        with db.auto_commit():
            query = f"UPDATE message SET status={Message.DISABLE} WHERE rec_id={user}"
            db.engine.execute(query)
        # push2redis(user)
        return 0, ''
    else:
        raise SaveObjectException()
Ejemplo n.º 11
0
def create_config(module, module_type, content, description, project_id):
    if isinstance(content, dict):
        content = json.dumps(content)
    config = Config(module=module,
                    module_type=module_type,
                    content=content,
                    description=description,
                    projectid=project_id)
    with db.auto_commit():
        db.session.add(config)
    return 0
Ejemplo n.º 12
0
 def project_add_users(cls, project_id, user_list):
     with db.auto_commit():
         ret = UserBindProject.query.filter(
             UserBindProject.user_id.in_(user_list),
             UserBindProject.project_id == project_id).all()
         if ret:
             for r in ret:
                 db.session.delete(r)
         for uid in user_list:
             db.session.add(
                 UserBindProject(user_id=uid, project_id=project_id))
     return 0, None
Ejemplo n.º 13
0
 def update(cls, tag_id, tag_name, description):
     tag = Tag.query.get(tag_id)
     if not tag:
         raise CannotFindObjectException
     ret = Tag.query.filter(Tag.tag == tag_name, Tag.project_id == g.projectid, Tag.id != tag_id).first()
     if ret:
         raise SaveObjectException('存在相同名称的标签')
     tag.tag = tag_name
     tag.description = description
     tag.modifier = g.userid
     with db.auto_commit():
         db.session.add(tag)
     return 0
Ejemplo n.º 14
0
 def project_detach_user(cls, project_id, user_id):
     user_bind_project = UserBindProject.query.filter_by(
         project_id=project_id, user_id=user_id).first()
     if user_bind_project:
         with db.auto_commit():
             db.session.delete(user_bind_project)
             list_user_bind_role = UserBindRole.query.filter_by(
                 project_id=project_id, user_id=user_id).all()
             [
                 db.session.delete(user_bind_role)
                 for user_bind_role in list_user_bind_role
             ]
         return 0, None
     raise CannotFindObjectException()