class Log(BaseModel): __tablename__ = "logs" __repr_fields__ = ("level", "message", "key") level = db.Column(db.String(10), nullable=False) message = db.Column(db.String(), nullable=False) key = db.Column(db.String(50), nullable=False)
class News(BaseModel): __tablename__ = "news" title = db.Column(db.String(100), nullable=False) message = db.Column(db.String(), nullable=False) users = db.relationship( "User", backref=db.backref("news", uselist=True), secondary="users_news" )
class User(BaseModel, UserMixin): __tablename__ = "users" __repr_fields__ = ("name", ) name = db.Column(db.String(255), nullable=False, unique=True) admin = db.Column(db.Boolean(), default="f") active = db.Column(db.Boolean(), default="t") teams = association_proxy("grants", "team") def is_authenticated(self): return True def is_active(self): return self.active def is_anonymous(self): return False def is_admin(self): return self.admin def get_id(self): return self.id
class Check(BaseModel): __tablename__ = "checks" __repr_fields__ = ("name",) name = db.Column(db.String(255), nullable=False) source_id = db.Column( UUIDType(binary=False), db.ForeignKey("sources.id"), nullable=False ) source = db.relationship( "Source", backref=db.backref("source_checks", uselist=True) ) type = db.Column(db.String(255), nullable=False) parameters = db.Column(MutableDict.as_mutable(JSONType), default={}, nullable=True) variables = db.relationship("Variable", backref="check")
class Variable(BaseModel): __tablename__ = "variables" __repr_fields__ = ("name", "value", "type") name = db.Column(db.String(255), nullable=False) value = db.Column(db.String(), nullable=False) type = db.Column(db.String(255), nullable=False) rule_id = db.Column(UUIDType(binary=False), db.ForeignKey("rules.id"), nullable=True) team_id = db.Column(UUIDType(binary=False), db.ForeignKey("teams.id"), nullable=False) source_id = db.Column(UUIDType(binary=False), db.ForeignKey("sources.id"), nullable=True) check_id = db.Column(UUIDType(binary=False), db.ForeignKey("checks.id"), nullable=True) @property def level(self): if self.check_id: return "check" elif self.source_id: return "source" elif self.rule_id: return "rule" else: return "team" @property def expression(self): exp = "depc.{level}['{name}']" if " " in self.name else "depc.{level}.{name}" return exp.format(level=self.level, name=self.name)
class Source(BaseModel): __tablename__ = "sources" __repr_fields__ = ("name", "plugin") name = db.Column(db.String(255), nullable=False) plugin = db.Column(db.String(255), nullable=False) configuration = db.Column(EncryptedDict, default={}, nullable=True) checks = db.relationship("Check", back_populates="source") team_id = db.Column(UUIDType(binary=False), db.ForeignKey("teams.id"), nullable=True) team = db.relationship("Team", back_populates="sources") variables = db.relationship( "Variable", primaryjoin="and_(Source.id==Variable.source_id, " "Variable.rule_id==None, " "Variable.check_id==None)", backref="source", )
class Team(BaseModel): __tablename__ = "teams" __repr_fields__ = ("name", ) name = db.Column(db.String(255), nullable=False) sources = db.relationship("Source", back_populates="team") rules = db.relationship("Rule", back_populates="team") configs = db.relationship("Config", back_populates="team") worst = db.relationship("Worst", back_populates="team") grants = association_proxy("grants", "user") variables = db.relationship( "Variable", primaryjoin="and_(Team.id==Variable.team_id, " "Variable.rule_id==None, " "Variable.source_id==None, " "Variable.check_id==None)", backref="team", ) metas = db.Column(EncryptedDict, default={}, nullable=True) @property def members(self): return [ grant.user for grant in self.grants if grant.role.value == "member" ] @property def editors(self): return [ grant.user for grant in self.grants if grant.role.value == "editor" ] @property def managers(self): return [ grant.user for grant in self.grants if grant.role.value == "manager" ] @property def kafka_topic(self): return "".join(e for e in self.name if e.isalnum()).lower()
class Worst(BaseModel): __tablename__ = "worst" __table_args__ = (UniqueConstraint("team_id", "label", "date", "period", name="team_label_date_period_uc"), ) __repr_fields__ = ("team", "label", "date", "period") team_id = db.Column(UUIDType(binary=False), db.ForeignKey("teams.id"), nullable=False) team = db.relationship("Team", back_populates="worst") date = db.Column(db.DateTime(timezone=True), nullable=False) label = db.Column(db.String(255), nullable=False) period = db.Column(db.Enum(Periods), nullable=False, unique=False) data = db.Column(MutableDict.as_mutable(JSONType), default={}, nullable=False)