feat(usage-stats): add usage stats backend apis

This commit is contained in:
wren
2026-05-09 20:06:59 +08:00
parent c9d7a693b8
commit 4d56652879
7 changed files with 1315 additions and 0 deletions
@@ -13,6 +13,7 @@ from fastapi_modules.fastapi_leaudit.models.leauditRagDocument import LeauditRag
from fastapi_modules.fastapi_leaudit.models.leauditRagChatApp import LeauditRagChatApp
from fastapi_modules.fastapi_leaudit.models.leauditRagConversation import LeauditRagConversation
from fastapi_modules.fastapi_leaudit.models.leauditRagMessage import LeauditRagMessage
from fastapi_modules.fastapi_leaudit.models.usageLoginEvent import UsageLoginEvent
__all__ = [
"LeauditDocument",
@@ -28,4 +29,5 @@ __all__ = [
"LeauditRagChatApp",
"LeauditRagConversation",
"LeauditRagMessage",
"UsageLoginEvent",
]
@@ -0,0 +1,36 @@
"""系统使用统计 - 登录事件模型。"""
from __future__ import annotations
from datetime import datetime
from sqlalchemy import BigInteger, DateTime, String
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_common.fastapi_common_web.models import BaseModel
class UsageLoginEvent(BaseModel):
"""登录事件明细表。"""
__tablename__ = "usage_login_events"
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
userId: Mapped[int | None] = mapped_column("user_id", BigInteger)
sub: Mapped[str | None] = mapped_column(String(128))
usernameSnapshot: Mapped[str | None] = mapped_column("username_snapshot", String(128))
nickNameSnapshot: Mapped[str | None] = mapped_column("nick_name_snapshot", String(128))
departmentNameSnapshot: Mapped[str | None] = mapped_column("department_name_snapshot", String(255))
ouIdSnapshot: Mapped[str | None] = mapped_column("ou_id_snapshot", String(128))
ouNameSnapshot: Mapped[str | None] = mapped_column("ou_name_snapshot", String(255))
areaSnapshot: Mapped[str | None] = mapped_column("area_snapshot", String(64))
loginTime: Mapped[datetime] = mapped_column("login_time", DateTime(timezone=True))
loginResult: Mapped[str] = mapped_column("login_result", String(16))
loginType: Mapped[str] = mapped_column("login_type", String(32))
ipAddress: Mapped[str | None] = mapped_column("ip_address", String(64))
userAgent: Mapped[str | None] = mapped_column("user_agent", String(1024))
clientType: Mapped[str | None] = mapped_column("client_type", String(32))
tokenJti: Mapped[str | None] = mapped_column("token_jti", String(128))
failureReason: Mapped[str | None] = mapped_column("failure_reason", String(255))
extra: Mapped[dict | None] = mapped_column(JSONB)