class Proxy(Base): __tablename__ = 'proxy' host = db.Column(db.String(255), nullable=False) port = db.Column(db.Integer, nullable=False) eru_container_id = db.Column(db.String(64), index=True) cluster_id = db.Column(db.ForeignKey(Cluster.id), index=True) suppress_alert = db.Column(db.Integer, nullable=False, default=1) proxy_type = db.Column(db.Integer, nullable=False, default=0) __table_args__ = (db.Index('address', 'host', 'port', unique=True), ) @cached_property def containerized(self): return self.eru_container_id is not None @cached_property def container_info(self): from flask import g if g.container_client is None or not self.containerized: return None return g.container_client.get_container(self.eru_container_id) @cached_property def cluster(self): return Cluster.query.get(self.cluster_id) def proxy_typename(self): if self.proxy_type == TYPE_CERBERUS: return 'Cerberus' elif self.proxy_type == TYPE_CORVUS: return 'Corvus' else: return 'Unknow'
class Proxy(Base): __tablename__ = 'proxy' host = db.Column(db.String(255), nullable=False) port = db.Column(db.Integer, nullable=False) eru_container_id = db.Column(db.String(64), index=True) cluster_id = db.Column(db.ForeignKey(Cluster.id), index=True) suppress_alert = db.Column(db.Integer, nullable=False, default=1) __table_args__ = (db.Index('address', 'host', 'port', unique=True), ) @cached_property def eru_deployed(self): return self.eru_container_id is not None @cached_property def eru_info(self): import eru_utils if eru_utils.eru_client is None or not self.eru_deployed: return None return eru_utils.eru_client.get_container(self.eru_container_id) @cached_property def cluster(self): return Cluster.query.get(self.cluster_id)
class RedisNode(Base): __tablename__ = 'redis_node' host = db.Column(db.String(255), nullable=False) port = db.Column(db.Integer, nullable=False) eru_container_id = db.Column(db.String(64), index=True) assignee_id = db.Column(db.ForeignKey(Cluster.id), index=True) suppress_alert = db.Column(db.Integer, nullable=False, default=1) __table_args__ = (db.Index('address', 'host', 'port', unique=True), ) def free(self): return self.assignee_id is None @cached_property def eru_deployed(self): return self.eru_container_id is not None @cached_property def eru_info(self): import eru_utils if eru_utils.eru_client is None or not self.eru_deployed: return None try: return eru_utils.eru_client.get_container(self.eru_container_id) except EruException as e: logging.exception(e) return { 'version': '-', 'host': '-', 'created': 'CONTAINER NOT ALIVE', }
class Proxy(Base): __tablename__ = 'proxy' host = db.Column(db.String(32), nullable=False) port = db.Column(db.Integer, nullable=False) cluster_id = db.Column(db.ForeignKey(Cluster.id), index=True) suppress_alert = db.Column(db.Integer, nullable=False, default=1) __table_args__ = (db.Index('address', 'host', 'port', unique=True), )
class RedisNode(Base): __tablename__ = 'redis_node' host = db.Column(db.String(32), nullable=False) port = db.Column(db.Integer, nullable=False) max_mem = db.Column(db.Integer, nullable=False) assignee_id = db.Column(db.ForeignKey(Cluster.id), index=True) __table_args__ = (db.Index('address', 'host', 'port', unique=True),) def free(self): return self.assignee is None
class NodeEvent(Base): __tablename__ = 'node_event' host = db.Column(db.String(32), nullable=False) port = db.Column(db.Integer, nullable=False) event_domain = db.Column(db.String(32), index=True) event_type = db.Column(db.Integer, nullable=False) creation = db.Column(db.DateTime, default=datetime.now, nullable=False, index=True) args_json = db.Column(DB_TEXT_TYPE, nullable=False) user_id = db.Column(db.Integer, index=True) __table_args__ = (db.Index('address', 'host', 'port'), ) @cached_property def args(self): return json.loads(self.args_json)
class BookChapterContent(db.Model): ''' 书籍章节内容信息 ''' __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'} id = db.Column(db.Integer(), primary_key=True) # ID book_id = db.Column(db.Integer) # 书籍ID volume_id = db.Column(db.Integer) # 卷ID chapter_id = db.Column(db.Integer) # 章节ID content = db.Column(MEDIUMTEXT) # 章节内容 created = db.Column(db.DateTime, server_default=func.now()) # 创建时间 db.Index('ix_book_id_chapter_id', book_id, chapter_id) def __init__(self, data): self.book_id = int(data['book_id']) self.volume_id = int(data['volume_id']) self.chapter_id = int(data['chapter_id']) self.content = data['content'].replace(u' ', '').replace(' ', '') def update(self, data): self.content = data['content'].replace(u' ', '').replace(' ', '')
class BookShelf(db.Model): ''' 书架 ''' __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'} id = db.Column(db.Integer(), primary_key=True) book_id = db.Column(db.Integer(), index=True) # 书籍ID name = db.Column( db.String(100)) # 书架名称('myself', 'hot', 'new', 'recommend', 'finish') user_id = db.Column(db.Integer()) # 用户id, 用于myself 自己的书架 ranking = db.Column(db.Integer(), default=0) # 用于排序 rate = db.Column(db.Integer(), default=0) # 阅读进度(百分率分子) showed = db.Column(db.Boolean(), default=True) # 是否显示 sex = db.Column(db.Integer(), server_default='0') # 热门和新书需要区分男女频(1:男;2: 女) created = db.Column(db.DateTime, server_default=func.now()) # 创建时间 updated = db.Column(db.DateTime, server_default=func.now()) # 更新时间 db.Index('ix_book_id_name_user_id', book_id, name, user_id, unique=True) def __init__(self, book_id, name, user_id, ranking, rate, showed, sex): self.book_id = book_id self.name = name self.user_id = user_id self.ranking = ranking self.rate = rate self.showed = showed self.sex = sex def to_admin_dict(self): book = Book.query.filter_by(book_id=self.book_id).first() return dict(id=self.id, book_id=self.book_id, book=book.to_admin_dict() if book else {}, name=self.name, user_id=self.name, ranking=self.ranking, rate=self.rate, showed=int(self.showed) if self.showed else 0, sex=self.sex, created=self.created.strftime('%Y-%m-%d %H:%M:%S'))
class RedisNode(Base): __tablename__ = 'redis_node' host = db.Column(db.String(255), nullable=False) port = db.Column(db.Integer, nullable=False) eru_container_id = db.Column(db.String(64), index=True) assignee_id = db.Column(db.ForeignKey(Cluster.id), index=True) suppress_alert = db.Column(db.Integer, nullable=False, default=1) __table_args__ = (db.Index('address', 'host', 'port', unique=True),) def free(self): return self.assignee_id is None @cached_property def containerized(self): return self.eru_container_id is not None @cached_property def container_info(self): from flask import g if g.container_client is None or not self.containerized: return None return g.container_client.get_container(self.eru_container_id)