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"
# Sentry 设置,为空表示不启用
SENTRY_DSN
# 游戏设置
ENABLE_OSU_RX=false # 启用 osu!RX 统计数据
ENABLE_OSU_AP=false # 启用 osu!AP 统计数据

View File

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

View File

@@ -84,6 +84,9 @@ class Settings(BaseSettings):
# 日志设置
log_level: str = "INFO"
# Sentry 配置
sentry_dsn: HttpUrl | None = None
# 游戏设置
enable_osu_rx: 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.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
import sentry_sdk
@asynccontextmanager
@@ -45,6 +46,14 @@ desc = (
"osu! API 模拟服务器,支持 osu! API v2 和 osu!lazer 的绝大部分功能。\n\n"
"官方文档:[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(
title="osu! API 模拟服务器",
version="1.0.0",

View File

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

29
uv.lock generated
View File

@@ -830,6 +830,7 @@ dependencies = [
{ name = "python-jose", extra = ["cryptography"] },
{ name = "python-multipart" },
{ name = "redis" },
{ name = "sentry-sdk", extra = ["fastapi", "httpx", "loguru", "sqlalchemy"] },
{ name = "sqlalchemy" },
{ name = "sqlmodel" },
{ name = "uvicorn", extra = ["standard"] },
@@ -864,6 +865,7 @@ requires-dist = [
{ name = "python-jose", extras = ["cryptography"], specifier = ">=3.3.0" },
{ name = "python-multipart", specifier = ">=0.0.6" },
{ 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 = "sqlmodel", specifier = ">=0.0.24" },
{ 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" },
]
[[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]]
name = "six"
version = "1.17.0"