monitoring.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from sqlalchemy import Column, Integer, String, Boolean, DateTime, Numeric, func, Text
  2. from app.models import Base
  3. class FetchLog(Base):
  4. """域名爬取日志表(每次尝试记录一条)"""
  5. __tablename__ = "fetch_logs"
  6. __table_args__ = {"schema": "domain_monitor"}
  7. id = Column(Integer, primary_key=True, autoincrement=True)
  8. domain = Column(String, nullable=False, index=True)
  9. status = Column(String, nullable=False) # success / failed / skipped
  10. message = Column(Text) # 成功/失败详情
  11. created_at = Column(DateTime(timezone=True), server_default=func.now())
  12. class FetchScheduleConfig(Base):
  13. """定时爬取配置表"""
  14. __tablename__ = "fetch_schedule_config"
  15. __table_args__ = {"schema": "domain_monitor"}
  16. id = Column(Integer, primary_key=True, autoincrement=True)
  17. enabled = Column(Boolean, server_default="false", default=False)
  18. schedule_time = Column(String(5), server_default="02:00") # HH:MM
  19. class SuperAdmin(Base):
  20. """超级管理员表"""
  21. __tablename__ = "super_admin"
  22. __table_args__ = {"schema": "domain_monitor"}
  23. id = Column(Integer, primary_key=True, autoincrement=True)
  24. username = Column(String, nullable=False)
  25. nickname = Column(String)
  26. remark = Column(String) # 域名备注,作为超管显示名称
  27. created_at = Column(DateTime(timezone=True), server_default=func.now())
  28. class SuperAdminTenant(Base):
  29. """超级管理员-租户关联表"""
  30. __tablename__ = "super_admin_tenant"
  31. __table_args__ = {"schema": "domain_monitor"}
  32. id = Column(Integer, primary_key=True, autoincrement=True)
  33. super_admin_id = Column(Integer, nullable=False, index=True)
  34. tenant_id = Column(Integer, nullable=False, index=True)
  35. class Tenant(Base):
  36. """租户(企业)表"""
  37. __tablename__ = "tenant"
  38. __table_args__ = {"schema": "domain_monitor"}
  39. id = Column(Integer, primary_key=True, autoincrement=True)
  40. company_name = Column(String)
  41. subdomain = Column(String, unique=True, nullable=False, index=True)
  42. balance = Column(Numeric(20, 4), server_default="0")
  43. created_at = Column(DateTime(timezone=True), server_default=func.now())
  44. updated_at = Column(DateTime(timezone=True), onupdate=func.now())
  45. class Model(Base):
  46. """模型信息参考表"""
  47. __tablename__ = "models"
  48. __table_args__ = {"schema": "domain_monitor"}
  49. id = Column(Integer, primary_key=True, autoincrement=True)
  50. model_code = Column(String, unique=True, nullable=False, index=True)
  51. model_name = Column(String, nullable=False)
  52. original_price = Column(Numeric(20, 4))
  53. class SuperAdminModelDiscount(Base):
  54. """超级管理员模型折扣表(从 crawler 同步)"""
  55. __tablename__ = "super_admin_model_discount"
  56. __table_args__ = {"schema": "domain_monitor"}
  57. id = Column(Integer, primary_key=True, autoincrement=True)
  58. model_code = Column(String, unique=True, nullable=False, index=True)
  59. discount_rate = Column(Numeric(10, 4), server_default="1.0000", nullable=False)
  60. created_at = Column(DateTime(timezone=True), server_default=func.now())
  61. updated_at = Column(DateTime(timezone=True), onupdate=func.now())
  62. class UserConsumptionDetail(Base):
  63. """用户模型消费明细表(每次调用的记录)"""
  64. __tablename__ = "user_consumption_detail"
  65. __table_args__ = {"schema": "domain_monitor"}
  66. id = Column(Integer, primary_key=True, autoincrement=True)
  67. user_id = Column(String, nullable=False, index=True)
  68. username = Column(String)
  69. tenant_id = Column(Integer, nullable=False, index=True)
  70. model_code = Column(String, nullable=False, index=True)
  71. call_count = Column(Integer, server_default="0")
  72. # 用户侧:用户实际支付
  73. user_actual_total = Column(Numeric(20, 4), server_default="0")
  74. user_discount = Column(Numeric(10, 4), server_default="1.0000")
  75. user_actual_price = Column(Numeric(20, 4))
  76. # 租户侧:平台向企业收取
  77. tenant_actual_total = Column(Numeric(20, 4), server_default="0")
  78. tenant_discount = Column(Numeric(10, 4), server_default="1.0000")
  79. tenant_actual_price = Column(Numeric(20, 4))
  80. # 超管侧:平台向超管收取
  81. super_admin_discount = Column(Numeric(10, 4), server_default="1.0000")
  82. super_admin_actual_price = Column(Numeric(20, 4))
  83. original_price = Column(Numeric(20, 4))
  84. consumption_date = Column(DateTime(timezone=True), nullable=False, index=True)
  85. order_no = Column(String)
  86. invoiced = Column(Boolean, server_default="false")
  87. created_at = Column(DateTime(timezone=True), server_default=func.now())