feat(server): add sentry to track error

This commit is contained in:
MingxuanGame
2025-08-12 17:00:01 +00:00
parent 0ab3c1c492
commit e7d5bcaf4b
6 changed files with 51 additions and 1 deletions

View File

@@ -45,6 +45,9 @@ FETCHER_SCOPES=public
# 日志设置 # 日志设置
LOG_LEVEL="INFO" LOG_LEVEL="INFO"
# Sentry 设置,为空表示不启用
SENTRY_DSN
# 游戏设置 # 游戏设置
ENABLE_OSU_RX=false # 启用 osu!RX 统计数据 ENABLE_OSU_RX=false # 启用 osu!RX 统计数据
ENABLE_OSU_AP=false # 启用 osu!AP 统计数据 ENABLE_OSU_AP=false # 启用 osu!AP 统计数据

View File

@@ -70,7 +70,7 @@ docker-compose -f docker-compose-osurx.yml up -d
| `DEBUG` | 调试模式 | `false` | | `DEBUG` | 调试模式 | `false` |
| `SERVER_URL` | 服务器 URL | `http://localhost:8000` | | `SERVER_URL` | 服务器 URL | `http://localhost:8000` |
| `CORS_URLS` | 额外的 CORS 允许的域名列表 (JSON 格式) | `[]` | | `CORS_URLS` | 额外的 CORS 允许的域名列表 (JSON 格式) | `[]` |
| `FRONTEND_URL` | 前端 URL当访问从游戏打开的 URL 时会重定向到这个 URL为空表示不重定向 | `` | | `FRONTEND_URL` | 前端 URL当访问从游戏打开的 URL 时会重定向到这个 URL为空表示不重定向 | `(null)` |
### OAuth 设置 ### OAuth 设置
| 变量名 | 描述 | 默认值 | | 变量名 | 描述 | 默认值 |
@@ -101,6 +101,11 @@ Fetcher 用于从 osu! 官方 API 获取数据,使用 osu! 官方 API 的 OAut
|--------|------|--------| |--------|------|--------|
| `LOG_LEVEL` | 日志级别 | `INFO` | | `LOG_LEVEL` | 日志级别 | `INFO` |
### Sentry 设置
| 变量名 | 描述 | 默认值 |
|--------|------|--------|
| `SENTRY_DSN` | Sentry DSN为空不启用 Sentry | `(null)` |
### 游戏设置 ### 游戏设置
| 变量名 | 描述 | 默认值 | | 变量名 | 描述 | 默认值 |
|--------|------|--------| |--------|------|--------|

View File

@@ -84,6 +84,9 @@ class Settings(BaseSettings):
# 日志设置 # 日志设置
log_level: str = "INFO" log_level: str = "INFO"
# Sentry 配置
sentry_dsn: HttpUrl | None = None
# 游戏设置 # 游戏设置
enable_osu_rx: bool = False enable_osu_rx: bool = False
enable_osu_ap: bool = False enable_osu_ap: bool = False

View File

@@ -24,6 +24,7 @@ from app.service.osu_rx_statistics import create_rx_statistics
from fastapi import FastAPI, HTTPException, Request from fastapi import FastAPI, HTTPException, Request
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
import sentry_sdk
@asynccontextmanager @asynccontextmanager
@@ -45,6 +46,14 @@ desc = (
"osu! API 模拟服务器,支持 osu! API v2 和 osu!lazer 的绝大部分功能。\n\n" "osu! API 模拟服务器,支持 osu! API v2 和 osu!lazer 的绝大部分功能。\n\n"
"官方文档:[osu!web 文档](https://osu.ppy.sh/docs/index.html)" "官方文档:[osu!web 文档](https://osu.ppy.sh/docs/index.html)"
) )
if settings.sentry_dsn is not None:
sentry_sdk.init(
dsn=str(settings.sentry_dsn),
send_default_pii=False,
environment="production" if not settings.debug else "development",
)
app = FastAPI( app = FastAPI(
title="osu! API 模拟服务器", title="osu! API 模拟服务器",
version="1.0.0", version="1.0.0",

View File

@@ -24,6 +24,7 @@ dependencies = [
"python-jose[cryptography]>=3.3.0", "python-jose[cryptography]>=3.3.0",
"python-multipart>=0.0.6", "python-multipart>=0.0.6",
"redis>=5.0.1", "redis>=5.0.1",
"sentry-sdk[fastapi,httpx,loguru,sqlalchemy]>=2.34.1",
"sqlalchemy>=2.0.23", "sqlalchemy>=2.0.23",
"sqlmodel>=0.0.24", "sqlmodel>=0.0.24",
"uvicorn[standard]>=0.24.0", "uvicorn[standard]>=0.24.0",

29
uv.lock generated
View File

@@ -830,6 +830,7 @@ dependencies = [
{ name = "python-jose", extra = ["cryptography"] }, { name = "python-jose", extra = ["cryptography"] },
{ name = "python-multipart" }, { name = "python-multipart" },
{ name = "redis" }, { name = "redis" },
{ name = "sentry-sdk", extra = ["fastapi", "httpx", "loguru", "sqlalchemy"] },
{ name = "sqlalchemy" }, { name = "sqlalchemy" },
{ name = "sqlmodel" }, { name = "sqlmodel" },
{ name = "uvicorn", extra = ["standard"] }, { name = "uvicorn", extra = ["standard"] },
@@ -864,6 +865,7 @@ requires-dist = [
{ name = "python-jose", extras = ["cryptography"], specifier = ">=3.3.0" }, { name = "python-jose", extras = ["cryptography"], specifier = ">=3.3.0" },
{ name = "python-multipart", specifier = ">=0.0.6" }, { name = "python-multipart", specifier = ">=0.0.6" },
{ name = "redis", specifier = ">=5.0.1" }, { name = "redis", specifier = ">=5.0.1" },
{ name = "sentry-sdk", extras = ["fastapi", "httpx", "loguru", "sqlalchemy"], specifier = ">=2.34.1" },
{ name = "sqlalchemy", specifier = ">=2.0.23" }, { name = "sqlalchemy", specifier = ">=2.0.23" },
{ name = "sqlmodel", specifier = ">=0.0.24" }, { name = "sqlmodel", specifier = ">=0.0.24" },
{ name = "uvicorn", extras = ["standard"], specifier = ">=0.24.0" }, { name = "uvicorn", extras = ["standard"], specifier = ">=0.24.0" },
@@ -1275,6 +1277,33 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724", size = 85308, upload-time = "2025-07-18T19:22:40.947Z" }, { url = "https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724", size = 85308, upload-time = "2025-07-18T19:22:40.947Z" },
] ]
[[package]]
name = "sentry-sdk"
version = "2.34.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3a/38/10d6bfe23df1bfc65ac2262ed10b45823f47f810b0057d3feeea1ca5c7ed/sentry_sdk-2.34.1.tar.gz", hash = "sha256:69274eb8c5c38562a544c3e9f68b5be0a43be4b697f5fd385bf98e4fbe672687", size = 336969, upload-time = "2025-07-30T11:13:37.93Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2d/3e/bb34de65a5787f76848a533afbb6610e01fbcdd59e76d8679c254e02255c/sentry_sdk-2.34.1-py2.py3-none-any.whl", hash = "sha256:b7a072e1cdc5abc48101d5146e1ae680fa81fe886d8d95aaa25a0b450c818d32", size = 357743, upload-time = "2025-07-30T11:13:36.145Z" },
]
[package.optional-dependencies]
fastapi = [
{ name = "fastapi" },
]
httpx = [
{ name = "httpx" },
]
loguru = [
{ name = "loguru" },
]
sqlalchemy = [
{ name = "sqlalchemy" },
]
[[package]] [[package]]
name = "six" name = "six"
version = "1.17.0" version = "1.17.0"