diff --git a/CASDOOR_SETUP.md b/CASDOOR_SETUP.md new file mode 100644 index 0000000..34c03c9 --- /dev/null +++ b/CASDOOR_SETUP.md @@ -0,0 +1,188 @@ +# Casdoor 集成配置指南 + +本文档将指导您如何配置 Casdoor 作为项目的登录认证系统。 + +## 前置条件 + +1. 已通过 1Panel 部署 Casdoor 服务 +2. Casdoor 服务可以正常访问 +3. 拥有 Casdoor 管理员权限 + +## 第一步:在 Casdoor 中创建应用 + +1. **登录 Casdoor 管理界面** + - 访问您的 Casdoor 地址(例如:`http://your-server:8000`) + - 使用管理员账户登录(默认:`admin` / `123`) + +2. **创建应用(Application)** + - 进入 "Applications" 页面 + - 点击 "Add" 按钮创建新应用 + - 填写以下信息: + - **Name**: 应用名称(例如:`4an-app`) + - **Display name**: 显示名称(例如:`4AN 工单管理系统`) + - **Organization**: 选择组织(默认:`built-in`) + - **Enable password**: 是否启用密码登录(根据需要选择) + - **Enable sign up**: 是否允许注册(根据需要选择) + +3. **配置回调 URL(Redirect URI)** + - 在应用配置中找到 "Redirect URLs" 或 "Redirect URI" + - 添加您的应用回调地址,例如: + ``` + http://your-app-server:18061/callback + ``` + - 如果有多个环境,可以添加多个回调地址 + +4. **记录应用凭证** + - 创建应用后,Casdoor 会生成: + - **Client ID**: 客户端 ID + - **Client Secret**: 客户端密钥 + - 请妥善保存这些信息,后续配置需要使用 + +## 第二步:配置项目环境变量 + +在您的环境变量文件(`.env` 或系统环境变量)中添加以下配置: + +```bash +# Casdoor 配置 +CASDOOR_ENDPOINT=http://your-casdoor-server:8000 +CASDOOR_CLIENT_ID=your_client_id_here +CASDOOR_CLIENT_SECRET=your_client_secret_here +CASDOOR_ORGANIZATION_NAME=built-in +CASDOOR_APPLICATION_NAME=your_app_name +CASDOOR_REDIRECT_URI=http://your-app-server:18061/callback +``` + +### 配置说明 + +- `CASDOOR_ENDPOINT`: Casdoor 服务的完整地址(不包含路径) +- `CASDOOR_CLIENT_ID`: 在 Casdoor 中创建应用时获得的 Client ID +- `CASDOOR_CLIENT_SECRET`: 在 Casdoor 中创建应用时获得的 Client Secret +- `CASDOOR_ORGANIZATION_NAME`: 组织名称(默认:`built-in`) +- `CASDOOR_APPLICATION_NAME`: 应用名称(与 Casdoor 中创建的应用名称一致) +- `CASDOOR_REDIRECT_URI`: 回调地址,必须与 Casdoor 应用中配置的 Redirect URI 完全一致 + +## 第三步:安装依赖 + +确保已安装所有必要的 Python 依赖: + +```bash +pip install -r requirements.txt +``` + +主要依赖包括: +- `requests`: 用于与 Casdoor API 通信 +- `Flask-Login`: 用于会话管理 +- 其他项目依赖 + +## 第四步:在 Casdoor 中创建用户 + +1. **创建用户** + - 进入 Casdoor 的 "Users" 页面 + - 点击 "Add" 创建新用户 + - 填写用户信息: + - **Name**: 用户名(唯一标识) + - **Display name**: 显示名称 + - **Email**: 邮箱(可选) + - **Phone**: 手机号(建议填写,用于与本地用户表关联) + - **Password**: 密码 + - **Organization**: 选择组织 + +2. **关联用户到应用** + - 在用户详情页面,确保用户属于正确的组织 + - 用户登录后会自动同步到本地数据库 + +## 第五步:测试登录 + +1. **启动应用** + ```bash + python app/app.py + # 或使用 uwsgi/supervisor 启动 + ``` + +2. **访问登录页面** + - 访问 `http://your-app-server:18061/login` + - 您应该看到两个登录选项: + - "使用 Casdoor 登录" 按钮(如果配置了 Casdoor) + - 手机号登录表单(备用方案) + +3. **测试 Casdoor 登录** + - 点击 "使用 Casdoor 登录" 按钮 + - 应该重定向到 Casdoor 登录页面 + - 使用 Casdoor 中的用户账户登录 + - 登录成功后应该重定向回应用并自动登录 + +## 用户信息同步 + +当用户通过 Casdoor 首次登录时,系统会: + +1. 从 Casdoor 获取用户信息 +2. 检查本地数据库中是否存在该用户(通过手机号匹配) +3. 如果不存在,创建新用户记录 +4. 如果存在,更新用户信息(姓名、支局、角色等) + +用户信息映射: +- `phone`: 从 Casdoor 的 `phone` 或 `phoneNumber` 字段获取 +- `name`: 从 Casdoor 的 `name` 或 `displayName` 字段获取 +- `branch`: 从 Casdoor 的 `affiliation` 字段获取 +- `role`: 从 Casdoor 的 `type` 字段获取 + +## 故障排查 + +### 问题:点击 Casdoor 登录按钮没有反应或报错 + +**解决方案**: +1. 检查环境变量是否正确配置 +2. 检查 `CASDOOR_ENDPOINT` 是否可以访问 +3. 检查 `CASDOOR_CLIENT_ID` 和 `CASDOOR_CLIENT_SECRET` 是否正确 +4. 查看应用日志获取详细错误信息 + +### 问题:登录后回调失败 + +**解决方案**: +1. 确保 `CASDOOR_REDIRECT_URI` 与 Casdoor 应用中配置的完全一致 +2. 检查回调地址是否可以从 Casdoor 服务器访问 +3. 检查防火墙和网络配置 + +### 问题:无法获取用户信息 + +**解决方案**: +1. 检查 Casdoor 应用配置中的 Scope 是否包含 `openid profile email phone` +2. 检查用户是否有正确的权限 +3. 查看应用日志中的详细错误信息 + +### 问题:用户信息同步失败 + +**解决方案**: +1. 确保 Casdoor 用户信息中包含手机号(phone) +2. 检查数据库连接是否正常 +3. 查看应用日志获取详细错误信息 + +## 安全建议 + +1. **保护 Client Secret** + - 不要将 `CASDOOR_CLIENT_SECRET` 提交到代码仓库 + - 使用环境变量或密钥管理服务存储敏感信息 + +2. **使用 HTTPS** + - 生产环境建议使用 HTTPS + - 更新 `CASDOOR_ENDPOINT` 和 `CASDOOR_REDIRECT_URI` 为 HTTPS 地址 + +3. **定期更新密码** + - 定期更新 Casdoor 管理员密码 + - 定期轮换 Client Secret + +4. **监控日志** + - 定期检查应用日志,关注认证失败的情况 + - 设置告警机制 + +## 更多信息 + +- Casdoor 官方文档:https://casdoor.org/docs/overview +- Casdoor GitHub:https://github.com/casbin/casdoor + +## 注意事项 + +1. 如果未配置 Casdoor(未设置 `CASDOOR_CLIENT_ID`),系统会自动使用原有的手机号登录方式 +2. 两种登录方式可以并存,用户可以选择使用哪种方式登录 +3. 用户信息会从 Casdoor 同步到本地数据库,确保数据一致性 + diff --git a/app/.env b/app/.env index fad662d..98dfe55 100755 --- a/app/.env +++ b/app/.env @@ -33,4 +33,11 @@ UWSGI_MAX_REQUESTS=1000 UWSGI_BUFFER_SIZE=32768 UWSGI_DISABLE_LOGGING=true UWSGI_MEMORY_REPORT=true -UWSGI_ENABLE_THREADS=true \ No newline at end of file +UWSGI_ENABLE_THREADS=true + +CASDOOR_ENDPOINT=http://10.10.10.14:18000 +CASDOOR_CLIENT_ID=8f323670e073612794ef +CASDOOR_CLIENT_SECRET=bc37d89f9220fe5a46c17125c731d2daf22f1299 +CASDOOR_REDIRECT_URI=http://10.10.10.14:18019/callback +CASDOOR_ORGANIZATION_NAME=built-in +CASDOOR_APPLICATION_NAME=4an \ No newline at end of file diff --git a/app/__pycache__/app.cpython-312.pyc b/app/__pycache__/app.cpython-312.pyc index b79a17a..4e15bd0 100644 Binary files a/app/__pycache__/app.cpython-312.pyc and b/app/__pycache__/app.cpython-312.pyc differ diff --git a/app/__pycache__/config.cpython-312.pyc b/app/__pycache__/config.cpython-312.pyc index 099131e..b63d425 100644 Binary files a/app/__pycache__/config.cpython-312.pyc and b/app/__pycache__/config.cpython-312.pyc differ diff --git a/app/app.py b/app/app.py index e8cb1cb..ea00a61 100755 --- a/app/app.py +++ b/app/app.py @@ -92,4 +92,4 @@ if __name__ == '__main__': app.logger.info("数据库表创建成功") except Exception as e: app.logger.error(f"创建数据库表时出错: {str(e)}") - app.run(host='0.0.0.0', port=18061, debug=True) \ No newline at end of file + app.run(host='0.0.0.0', port=18019, debug=True) \ No newline at end of file diff --git a/app/config.py b/app/config.py index 343c13e..407f2fd 100755 --- a/app/config.py +++ b/app/config.py @@ -22,4 +22,12 @@ class Config: 'user': os.environ.get('KEY110_DB_USER'), 'password': os.environ.get('KEY110_DB_PASSWORD'), 'database': os.environ.get('KEY110_DB_DATABASE') - } \ No newline at end of file + } + + # Casdoor 配置 + CASDOOR_ENDPOINT = os.environ.get('CASDOOR_ENDPOINT', 'http://localhost:8000') + CASDOOR_CLIENT_ID = os.environ.get('CASDOOR_CLIENT_ID') + CASDOOR_CLIENT_SECRET = os.environ.get('CASDOOR_CLIENT_SECRET') + CASDOOR_ORGANIZATION_NAME = os.environ.get('CASDOOR_ORGANIZATION_NAME', 'built-in') + CASDOOR_APPLICATION_NAME = os.environ.get('CASDOOR_APPLICATION_NAME', 'app-built-in') + CASDOOR_REDIRECT_URI = os.environ.get('CASDOOR_REDIRECT_URI', 'http://localhost:18061/callback') \ No newline at end of file diff --git a/app/logs/app.log b/app/logs/app.log index 160994d..158bbac 100644 --- a/app/logs/app.log +++ b/app/logs/app.log @@ -1,94 +1,9 @@ -2025-11-27 16:03:48 INFO: 应用启动 -2025-11-27 16:03:48 INFO: 错误处理器初始化完成 -2025-11-27 16:03:57 INFO: 用户 韦矍森(19977899008) 登录成功 -2025-11-27 16:03:57 INFO: 用户 韦矍森 访问仪表盘页面 -2025-11-27 16:05:16 INFO: 应用启动 -2025-11-27 16:05:16 INFO: 错误处理器初始化完成 -2025-11-27 16:05:23 INFO: 用户 韦矍森 访问仪表盘页面 -2025-11-27 16:05:29 INFO: 用户 韦矍森 访问历史记录页面 -2025-11-27 16:05:30 INFO: 用户 韦矍森 访问历史记录页面 -2025-12-03 14:31:04 INFO: 用户 韦矍森(19977899008) 登录成功 -2025-12-03 14:31:04 INFO: 用户 韦矍森 访问仪表盘页面 -2025-12-03 14:31:23 INFO: 用户 韦矍森 访问统计页面 -2025-12-03 14:31:23 INFO: 用户 韦矍森 访问统计页面 -2025-12-03 14:31:27 INFO: 用户 韦矍森 访问仪表盘页面 -2025-12-03 14:31:27 INFO: 用户 韦矍森 访问统计页面 -2025-12-03 14:31:27 INFO: 用户 韦矍森 访问统计页面 -2025-12-03 14:31:31 INFO: 用户 韦矍森 访问统计页面 -2025-12-03 14:31:31 INFO: 用户 韦矍森 访问统计页面 -2025-12-03 14:32:03 INFO: 用户 韦矍森(19977899008) 登出 -2025-12-03 14:32:29 INFO: 用户 唐昊(18977846300) 登录成功 -2025-12-03 14:32:29 INFO: 用户 唐昊 访问仪表盘页面 -2025-12-03 14:32:30 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:32:30 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:32:35 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:32:35 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:32:45 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:32:45 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:33:04 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:33:04 INFO: 用户 唐昊 访问统计页面 -2025-12-03 14:33:12 INFO: 用户 韦炳育(18176156082) 登录成功 -2025-12-03 14:33:12 INFO: 用户 韦炳育 访问仪表盘页面 -2025-12-03 14:34:03 INFO: 用户 韦炳育 访问仪表盘页面 -2025-12-03 14:38:02 INFO: 用户 韦炳育 开始创建手工故障单 -2025-12-03 14:38:02 INFO: 用户 韦炳育 创建手工故障单成功:M202512030001 -2025-12-03 14:38:02 INFO: 用户 韦炳育 访问历史记录页面 -2025-12-03 14:38:05 INFO: 用户 韦炳育 访问历史记录页面 -2025-12-03 14:38:29 INFO: 用户 韦炳育 访问仪表盘页面 -2025-12-03 14:38:45 INFO: 用户 韦炳育 访问历史记录页面 -2025-12-03 14:38:47 INFO: 用户 韦炳育 查看工单 M202512030001 的详情 -2025-12-03 14:39:26 INFO: 用户 韦炳育 访问仪表盘页面 -2025-12-05 08:08:48 INFO: 应用启动 -2025-12-05 08:08:48 INFO: 错误处理器初始化完成 -2025-12-05 12:10:36 INFO: 用户 韦炳育(18176156082) 登录成功 -2025-12-05 12:10:36 INFO: 用户 韦炳育 访问仪表盘页面 -2025-12-05 12:11:59 INFO: 用户 韦炳育 访问仪表盘页面 -2025-12-05 14:57:55 INFO: 应用启动 -2025-12-05 14:57:55 INFO: 错误处理器初始化完成 -2025-12-09 12:23:07 INFO: 用户 韦矍森(19977899008) 登录成功 -2025-12-09 12:23:07 INFO: 用户 韦矍森 访问仪表盘页面 -2025-12-09 12:23:15 INFO: 用户请求验证码 -2025-12-09 12:23:15 INFO: 验证码获取成功 -2025-12-09 12:23:21 INFO: 用户 韦矍森 开始同步摄像头第一步 -2025-12-09 12:23:21 INFO: 尝试登录中兴平台 -2025-12-09 12:23:21 INFO: 登录成功,开始获取在线信息 -2025-12-09 12:23:22 INFO: 获取到 1436 个设备信息,开始更新数据库 -2025-12-09 12:23:22 INFO: 数据库更新完成,更新了 1436 条记录,其中离线设备 720 个 -2025-12-09 12:23:23 INFO: 用户 韦矍森 开始同步摄像头第二步 -2025-12-09 12:23:24 INFO: 查询到 1107 个需要同步的设备 -2025-12-09 12:23:24 INFO: 发现 35 个离线设备需要创建工单 -2025-12-09 12:23:24 INFO: 成功创建 35 个工单 -2025-12-10 10:38:00 ERROR: 未处理异常: 405 Method Not Allowed: The method is not allowed for the requested URL. -Traceback (most recent call last): - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 891, in dispatch_request - self.raise_routing_exception(req) - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 500, in raise_routing_exception - raise request.routing_exception # type: ignore[misc] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/ctx.py", line 362, in match_request - result = self.url_adapter.match(return_rule=True) # type: ignore - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 624, in match - raise MethodNotAllowed(valid_methods=list(e.have_match_for)) from None -werkzeug.exceptions.MethodNotAllowed: 405 Method Not Allowed: The method is not allowed for the requested URL. - -2025-12-10 10:38:00 ERROR: 未处理异常: 405 Method Not Allowed: The method is not allowed for the requested URL. -Traceback (most recent call last): - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 891, in dispatch_request - self.raise_routing_exception(req) - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 500, in raise_routing_exception - raise request.routing_exception # type: ignore[misc] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/ctx.py", line 362, in match_request - result = self.url_adapter.match(return_rule=True) # type: ignore - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 624, in match - raise MethodNotAllowed(valid_methods=list(e.have_match_for)) from None -werkzeug.exceptions.MethodNotAllowed: 405 Method Not Allowed: The method is not allowed for the requested URL. - +2025-12-10 15:06:31 INFO: 重定向到 Casdoor 授权页面 +2025-12-10 15:06:39 INFO: Casdoor 用户信息: {'sub': '798f4436-fbb6-45f4-bf0c-6e1cf4add605', 'iss': 'http://10.10.10.14:18000', 'aud': '8f323670e073612794ef', 'preferred_username': 'test', 'name': '韦矍森', 'email': 'voole@vip.qq.com', 'email_verified': True, 'picture': 'https://cdn.casbin.org/img/casbin.svg', 'phone': '19977899008'} +2025-12-10 15:06:39 INFO: 更新用户信息: 韦矍森(19977899008) +2025-12-10 15:06:39 INFO: 用户 韦矍森(19977899008) 通过 Casdoor 登录成功 +2025-12-10 15:06:39 INFO: 用户 韦矍森 访问仪表盘页面 +2025-12-10 15:06:49 INFO: 用户 韦矍森 访问统计页面 +2025-12-10 15:06:50 INFO: 用户 韦矍森 访问历史记录页面 +2025-12-10 15:06:51 INFO: 用户 韦矍森 访问统计页面 +2025-12-10 15:06:54 INFO: 用户 韦矍森 访问仪表盘页面 diff --git a/app/static/css/styles.css b/app/static/css/styles.css index 2d22a3c..fe84072 100755 --- a/app/static/css/styles.css +++ b/app/static/css/styles.css @@ -323,6 +323,47 @@ transform: translateY(0); } +.login_button_casdoor { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + margin-bottom: 20px; +} + +.login_button_casdoor:hover { + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3); +} + +.login_button_phone { + margin-top: 0; +} + +.login_casdoor_section { + margin-bottom: 20px; +} + +.login_divider { + display: flex; + align-items: center; + text-align: center; + margin: 25px 0; + color: #999; + font-size: 14px; +} + +.login_divider::before, +.login_divider::after { + content: ''; + flex: 1; + border-bottom: 1px solid #ddd; +} + +.login_divider span { + padding: 0 15px; +} + /* 移动端适配 */ @media (max-width: 991.98px) { .login_box { diff --git a/app/templates/login.html b/app/templates/login.html index 2d9612c..553d2c5 100755 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -5,17 +5,39 @@

欢迎使用

大化重点项目工单管理平台
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} + {{ message }} + {% endfor %} +
+ {% endif %} + {% endwith %} + + {% if casdoor_enabled %} + +
+ + + + + 使用 Casdoor 登录 + +
+ +
+ +
+ {% endif %} + +
- - + +
- {% with messages = get_flashed_messages() %} - {% if messages %} -
请先登录以访问此页面
- {% endif %} - {% endwith %} - +
diff --git a/app/utils/__pycache__/casdoor_auth.cpython-312.pyc b/app/utils/__pycache__/casdoor_auth.cpython-312.pyc new file mode 100644 index 0000000..c1f9fb6 Binary files /dev/null and b/app/utils/__pycache__/casdoor_auth.cpython-312.pyc differ diff --git a/app/utils/casdoor_auth.py b/app/utils/casdoor_auth.py new file mode 100644 index 0000000..1e320f2 --- /dev/null +++ b/app/utils/casdoor_auth.py @@ -0,0 +1,130 @@ +""" +Casdoor 认证工具模块 +用于处理 Casdoor OAuth/OIDC 认证流程 +""" +import requests +import urllib.parse +from flask import session, current_app +import secrets + + +class CasdoorAuth: + """Casdoor 认证处理类""" + + def __init__(self, app=None): + self.app = app + if app: + self.init_app(app) + + def init_app(self, app): + """初始化应用配置""" + self.endpoint = app.config.get('CASDOOR_ENDPOINT') + self.client_id = app.config.get('CASDOOR_CLIENT_ID') + self.client_secret = app.config.get('CASDOOR_CLIENT_SECRET') + self.organization_name = app.config.get('CASDOOR_ORGANIZATION_NAME', 'built-in') + self.application_name = app.config.get('CASDOOR_APPLICATION_NAME', 'app-built-in') + self.redirect_uri = app.config.get('CASDOOR_REDIRECT_URI') + + def get_authorization_url(self, state=None): + """ + 生成 Casdoor 授权 URL + + Args: + state: 状态参数,用于防止 CSRF 攻击 + + Returns: + str: 授权 URL + """ + if not state: + state = secrets.token_urlsafe(32) + session['casdoor_state'] = state + + params = { + 'client_id': self.client_id, + 'response_type': 'code', + 'redirect_uri': self.redirect_uri, + 'scope': 'openid profile email phone', + 'state': state + } + + auth_url = f"{self.endpoint}/login/oauth/authorize" + return f"{auth_url}?{urllib.parse.urlencode(params)}" + + def get_token(self, code): + """ + 使用授权码获取访问令牌 + + Args: + code: 授权码 + + Returns: + dict: 包含 access_token 和 id_token 的字典 + """ + token_url = f"{self.endpoint}/api/login/oauth/access_token" + + data = { + 'grant_type': 'authorization_code', + 'client_id': self.client_id, + 'client_secret': self.client_secret, + 'code': code, + 'redirect_uri': self.redirect_uri + } + + try: + response = requests.post(token_url, data=data) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException as e: + try: + current_app.logger.error(f"获取 Casdoor token 失败: {str(e)}") + except: + pass # 如果无法记录日志,忽略错误 + return None + + def get_user_info(self, access_token): + """ + 使用访问令牌获取用户信息 + + Args: + access_token: 访问令牌 + + Returns: + dict: 用户信息字典 + """ + user_info_url = f"{self.endpoint}/api/userinfo" + + headers = { + 'Authorization': f'Bearer {access_token}' + } + + try: + response = requests.get(user_info_url, headers=headers) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException as e: + try: + current_app.logger.error(f"获取 Casdoor 用户信息失败: {str(e)}") + except: + pass # 如果无法记录日志,忽略错误 + return None + + def verify_state(self, state): + """ + 验证 state 参数,防止 CSRF 攻击 + + Args: + state: 从回调中获取的 state 参数 + + Returns: + bool: 验证是否通过 + """ + stored_state = session.get('casdoor_state') + if stored_state and stored_state == state: + session.pop('casdoor_state', None) + return True + return False + + +# 创建全局实例 +casdoor_auth = CasdoorAuth() + diff --git a/app/views/__pycache__/auth.cpython-312.pyc b/app/views/__pycache__/auth.cpython-312.pyc index 74ee788..d34786f 100644 Binary files a/app/views/__pycache__/auth.cpython-312.pyc and b/app/views/__pycache__/auth.cpython-312.pyc differ diff --git a/app/views/auth.py b/app/views/auth.py index 907754e..3ffdf5a 100755 --- a/app/views/auth.py +++ b/app/views/auth.py @@ -1,26 +1,129 @@ -from flask import render_template, request, redirect, url_for, flash +from flask import render_template, request, redirect, url_for, flash, session from flask_login import login_user, login_required, logout_user, current_user from scripts.models import db, User +from utils.casdoor_auth import casdoor_auth def init_auth_routes(app): + # 初始化 Casdoor 认证 + casdoor_auth.init_app(app) + @app.route('/login', methods=['GET', 'POST']) def login(): + # 如果已登录,直接跳转到仪表盘 + if current_user.is_authenticated: + return redirect(url_for('dashboard')) + + # 检查是否启用了 Casdoor + casdoor_enabled = bool(app.config.get('CASDOOR_CLIENT_ID')) + + # 处理手机号登录 if request.method == 'POST': phone = request.form['phone'] user = User.query.filter_by(phone=phone).first() if user: login_user(user) app.logger.info(f'用户 {user.name}({user.phone}) 登录成功') - # 无论是统计员还是装维员,都跳转到仪表盘 return redirect(url_for('dashboard')) else: app.logger.warning(f'登录失败:用户不存在 (手机号: {phone})') flash('用户不存在') - return render_template('login.html') + + return render_template('login.html', casdoor_enabled=casdoor_enabled) + + @app.route('/casdoor/login') + def casdoor_login(): + """Casdoor 登录入口,重定向到 Casdoor 授权页面""" + if not app.config.get('CASDOOR_CLIENT_ID'): + flash('Casdoor 未配置,请使用手机号登录') + return redirect(url_for('login')) + + auth_url = casdoor_auth.get_authorization_url() + app.logger.info('重定向到 Casdoor 授权页面') + return redirect(auth_url) + + @app.route('/callback') + def casdoor_callback(): + """Casdoor OAuth 回调处理""" + code = request.args.get('code') + state = request.args.get('state') + error = request.args.get('error') + + if error: + app.logger.error(f'Casdoor 认证失败: {error}') + flash(f'登录失败: {error}') + return redirect(url_for('login')) + + if not code: + app.logger.warning('Casdoor 回调缺少授权码') + flash('登录失败:未收到授权码') + return redirect(url_for('login')) + + # 验证 state 参数 + if not casdoor_auth.verify_state(state): + app.logger.warning('Casdoor state 验证失败,可能存在 CSRF 攻击') + flash('登录失败:安全验证失败') + return redirect(url_for('login')) + + # 获取访问令牌 + token_data = casdoor_auth.get_token(code) + if not token_data or 'access_token' not in token_data: + app.logger.error('获取 Casdoor token 失败') + flash('登录失败:无法获取访问令牌') + return redirect(url_for('login')) + + access_token = token_data['access_token'] + + # 获取用户信息 + user_info = casdoor_auth.get_user_info(access_token) + if not user_info: + app.logger.error('获取 Casdoor 用户信息失败') + flash('登录失败:无法获取用户信息') + return redirect(url_for('login')) + + # 从 Casdoor 用户信息中提取数据 + # Casdoor 返回的用户信息可能包含:name, email, phone, id 等字段 + casdoor_id = user_info.get('sub') or user_info.get('id') or user_info.get('name') + phone = user_info.get('phone') or user_info.get('phoneNumber') or casdoor_id + name = user_info.get('name') or user_info.get('displayName') or '未知用户' + + app.logger.info(f'Casdoor 用户信息: {user_info}') + + # 查找或创建本地用户 + user = User.query.filter_by(phone=phone).first() + if not user: + # 如果用户不存在,创建新用户 + user = User( + phone=phone, + name=name, + branch=user_info.get('affiliation', ''), + role=user_info.get('type', '') + ) + db.session.add(user) + db.session.commit() + app.logger.info(f'创建新用户: {name}({phone})') + else: + # 更新用户信息 + user.name = name + if user_info.get('affiliation'): + user.branch = user_info.get('affiliation') + if user_info.get('type'): + user.role = user_info.get('type') + db.session.commit() + app.logger.info(f'更新用户信息: {name}({phone})') + + # 登录用户 + login_user(user) + app.logger.info(f'用户 {user.name}({user.phone}) 通过 Casdoor 登录成功') + + return redirect(url_for('dashboard')) @app.route('/logout') @login_required def logout(): app.logger.info(f'用户 {current_user.name}({current_user.phone}) 登出') logout_user() + # 如果配置了 Casdoor,可以重定向到 Casdoor 登出页面 + if app.config.get('CASDOOR_ENDPOINT'): + logout_url = f"{app.config.get('CASDOOR_ENDPOINT')}/logout" + return redirect(logout_url) return redirect(url_for('login')) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d0fa9c8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +Flask>=2.0.0 +Flask-Login>=0.6.0 +Flask-Migrate>=3.0.0 +Flask-SQLAlchemy>=2.5.0 +SQLAlchemy>=1.4.0 +python-dotenv>=0.19.0 +requests>=2.25.0 +PyMySQL>=1.0.0 + diff --git a/uwsgi.log b/uwsgi.log index ad32660..4d5dcf0 100644 --- a/uwsgi.log +++ b/uwsgi.log @@ -1,2039 +1,9 @@ -*** Starting uWSGI 2.0.31 (64bit) on [Thu Nov 27 16:01:18 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -writing pidfile to /home/v6ole/pyproject/4an/uwsgi.pid -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1048576 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 6 -uwsgi socket 0 bound to UNIX address /home/v6ole/pyproject/4an/uwsgi.sock fd 9 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Python version: 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] -PEP 405 virtualenv detected: /home/v6ole/pyproject/venv -Set PythonHome to /home/v6ole/pyproject/venv -Python main interpreter initialized at 0x7193d0ea3668 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -python threads support enabled -your server socket listen backlog is limited to 100 connections -your mercy for graceful operations on workers is 60 seconds -mapped 703440 bytes (686 KB) for 8 cores -*** Operational MODE: preforking+threaded *** -Traceback (most recent call last): - File "/home/v6ole/pyproject/4an/app/app.py", line 8, in - from views.statistics import init_statistics_routes - File "/home/v6ole/pyproject/4an/app/views/statistics.py", line 6, in - from openpyxl import Workbook -ModuleNotFoundError: No module named 'openpyxl' -unable to load app 0 (mountpoint='') (callable not found or import error) -*** no app loaded. going in full dynamic mode *** -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -*** uWSGI is running in multiple interpreter mode *** -spawned uWSGI master process (pid: 827866) -spawned uWSGI worker 1 (pid: 827965, cores: 2) -spawned uWSGI worker 2 (pid: 827966, cores: 2) -spawned uWSGI worker 3 (pid: 827969, cores: 2) -Python auto-reloader enabled -spawned uWSGI worker 4 (pid: 827973, cores: 2) -*** Stats server enabled on 127.0.0.1:9191 fd: 24 *** -spawned uWSGI http 1 (pid: 827975) -unable to stat() uwsgi.reload, events will be triggered as soon as the file is created -unable to stat() true, events will be triggered as soon as the file is created -SIGINT/SIGTERM received...killing workers... -gateway "uWSGI http 1" has been buried (pid: 827975) -worker 1 buried after 1 seconds -worker 2 buried after 1 seconds -worker 3 buried after 1 seconds -worker 4 buried after 1 seconds -goodbye to uWSGI. -VACUUM: pidfile removed. -VACUUM: unix socket /home/v6ole/pyproject/4an/uwsgi.sock removed. -*** Starting uWSGI 2.0.31 (64bit) on [Thu Nov 27 16:03:48 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -writing pidfile to /home/v6ole/pyproject/4an/uwsgi.pid -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1048576 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 6 -uwsgi socket 0 bound to UNIX address /home/v6ole/pyproject/4an/uwsgi.sock fd 9 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Python version: 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] -PEP 405 virtualenv detected: /home/v6ole/pyproject/venv -Set PythonHome to /home/v6ole/pyproject/venv -Python main interpreter initialized at 0x79a4450a3668 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -python threads support enabled -your server socket listen backlog is limited to 100 connections -your mercy for graceful operations on workers is 60 seconds -mapped 703440 bytes (686 KB) for 8 cores -*** Operational MODE: preforking+threaded *** -[2025-11-27 16:03:48,754] INFO in app: 应用启动 -[2025-11-27 16:03:48,756] INFO in error_handlers: 错误处理器初始化完成 -WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x79a4450a3668 pid: 830667 (default app) -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -*** uWSGI is running in multiple interpreter mode *** -spawned uWSGI master process (pid: 830667) -spawned uWSGI worker 1 (pid: 830835, cores: 2) -spawned uWSGI worker 2 (pid: 830838, cores: 2) -Python auto-reloader enabled -spawned uWSGI worker 3 (pid: 830841, cores: 2) -spawned uWSGI worker 4 (pid: 830842, cores: 2) -*** Stats server enabled on 127.0.0.1:9191 fd: 25 *** -spawned uWSGI http 1 (pid: 830848) -unable to stat() uwsgi.reload, events will be triggered as soon as the file is created -unable to stat() true, events will be triggered as soon as the file is created -[2025-11-27 16:03:57,465] INFO in auth: 用户 韦矍森(19977899008) 登录成功 -[2025-11-27 16:03:57,495] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 -SIGINT/SIGTERM received...killing workers... -gateway "uWSGI http 1" has been buried (pid: 830848) -worker 1 buried after 1 seconds -worker 2 buried after 1 seconds -worker 3 buried after 1 seconds -worker 4 buried after 1 seconds -goodbye to uWSGI. -VACUUM: pidfile removed. -VACUUM: unix socket /home/v6ole/pyproject/4an/uwsgi.sock removed. -*** Starting uWSGI 2.0.31 (64bit) on [Thu Nov 27 16:05:16 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -writing pidfile to /home/v6ole/pyproject/4an/uwsgi.pid -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1024 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 6 -uwsgi socket 0 bound to UNIX address /home/v6ole/pyproject/4an/uwsgi.sock fd 9 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Python version: 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] -PEP 405 virtualenv detected: /home/v6ole/pyproject/venv -Set PythonHome to /home/v6ole/pyproject/venv -Python main interpreter initialized at 0x71acc72a3668 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -python threads support enabled -your server socket listen backlog is limited to 100 connections -your mercy for graceful operations on workers is 60 seconds -mapped 703440 bytes (686 KB) for 8 cores -*** Operational MODE: preforking+threaded *** -[2025-11-27 16:05:16,907] INFO in app: 应用启动 -[2025-11-27 16:05:16,908] INFO in error_handlers: 错误处理器初始化完成 -WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x71acc72a3668 pid: 833548 (default app) -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -*** uWSGI is running in multiple interpreter mode *** -spawned uWSGI master process (pid: 833548) -spawned uWSGI worker 1 (pid: 833706, cores: 2) -Python auto-reloader enabled -spawned uWSGI worker 2 (pid: 833710, cores: 2) -spawned uWSGI worker 3 (pid: 833713, cores: 2) -spawned uWSGI worker 4 (pid: 833716, cores: 2) -*** Stats server enabled on 127.0.0.1:9191 fd: 22 *** -spawned uWSGI http 1 (pid: 833719) -unable to stat() uwsgi.reload, events will be triggered as soon as the file is created -unable to stat() true, events will be triggered as soon as the file is created -[2025-11-27 16:05:23,641] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 -[2025-11-27 16:05:29,202] INFO in history: 用户 韦矍森 访问历史记录页面 -[2025-11-27 16:05:30,870] INFO in history: 用户 韦矍森 访问历史记录页面 -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 854495) -Respawned uWSGI worker 2 (new pid: 854498) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 854501) -Respawned uWSGI worker 3 (new pid: 863303) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 874543) -Respawned uWSGI worker 4 (new pid: 874546) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 883556) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 894820) -Respawned uWSGI worker 4 (new pid: 894823) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 903783) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 915039) -Respawned uWSGI worker 4 (new pid: 915042) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 924004) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 935243) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 935246) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 944148) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 955380) -Respawned uWSGI worker 4 (new pid: 955383) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 964252) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 975500) -Respawned uWSGI worker 4 (new pid: 975503) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 984412) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 995845) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 995848) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1004704) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1015908) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1015911) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1024831) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1036033) -Respawned uWSGI worker 4 (new pid: 1036036) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1044891) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1056087) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1056090) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1064986) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1076218) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1076221) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1085153) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1096335) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1096338) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1105155) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1116348) -Respawned uWSGI worker 4 (new pid: 1116351) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1125274) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1136571) -Respawned uWSGI worker 4 (new pid: 1136574) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1145387) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1156576) -Respawned uWSGI worker 4 (new pid: 1156579) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1165483) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1175809) -Respawned uWSGI worker 4 (new pid: 1175812) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1182127) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1190136) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1190139) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1196523) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1204496) -Respawned uWSGI worker 4 (new pid: 1204499) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1210855) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1218184) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1218187) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1222876) -Respawned uWSGI worker 2 (new pid: 1225362) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1228833) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1228836) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1237201) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1239598) -Respawned uWSGI worker 1 (new pid: 1241609) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 1241631) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1250902) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1252899) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1261577) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1263634) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1272298) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1274289) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1282946) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1285003) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1293693) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1295670) -Respawned uWSGI worker 3 (new pid: 1297499) -Respawned uWSGI worker 1 (new pid: 1297502) -Python auto-reloader enabled -worker 4 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1306394) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1308136) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1317049) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1318790) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1327695) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1329474) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1338333) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1340107) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1349237) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1351068) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1359962) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1361730) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1370560) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1372298) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1381728) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1383474) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1392371) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1394156) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1403020) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1404853) -Respawned uWSGI worker 4 (new pid: 1409430) -Respawned uWSGI worker 1 (new pid: 1409433) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1484106) -Respawned uWSGI worker 3 (new pid: 1484107) -Respawned uWSGI worker 4 (new pid: 1484112) -Respawned uWSGI worker 1 (new pid: 1484115) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1494810) -Respawned uWSGI worker 4 (new pid: 1494813) -Respawned uWSGI worker 1 (new pid: 1494816) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1505469) -Respawned uWSGI worker 4 (new pid: 1505472) -Respawned uWSGI worker 1 (new pid: 1505475) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1516102) -Respawned uWSGI worker 4 (new pid: 1516105) -Respawned uWSGI worker 1 (new pid: 1516108) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1526724) -Respawned uWSGI worker 4 (new pid: 1526727) -Respawned uWSGI worker 1 (new pid: 1526729) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1537311) -Respawned uWSGI worker 4 (new pid: 1537314) -Respawned uWSGI worker 1 (new pid: 1537317) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1547904) -Respawned uWSGI worker 4 (new pid: 1547907) -Respawned uWSGI worker 1 (new pid: 1547910) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1558523) -Respawned uWSGI worker 4 (new pid: 1558526) -Respawned uWSGI worker 1 (new pid: 1558527) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1569227) -Respawned uWSGI worker 4 (new pid: 1569230) -Respawned uWSGI worker 1 (new pid: 1569231) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1579945) -Respawned uWSGI worker 4 (new pid: 1579948) -Respawned uWSGI worker 1 (new pid: 1579951) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1590702) -Respawned uWSGI worker 4 (new pid: 1590705) -Respawned uWSGI worker 1 (new pid: 1590706) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1601371) -Respawned uWSGI worker 4 (new pid: 1601374) -Respawned uWSGI worker 1 (new pid: 1601377) -Python auto-reloader enabled -Respawned uWSGI worker 3 (new pid: 1601582) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1612337) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1612463) -[uwsgi-http key: client_addr: 194.165.16.161 client_port: 22527] hr_read(): Connection reset by peer [plugins/http/http.c line 918] -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1623610) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1623724) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1634263) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1634465) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1645055) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1645183) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1655776) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1655958) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1666499) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1666660) -Respawned uWSGI worker 2 (new pid: 1669568) -Respawned uWSGI worker 1 (new pid: 1669571) -Python auto-reloader enabled -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1677503) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1688178) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1698968) -Respawned uWSGI worker 2 (new pid: 1708321) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1715755) -Respawned uWSGI worker 1 (new pid: 1715758) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 1715761) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1719035) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1726457) -Respawned uWSGI worker 1 (new pid: 1726460) -worker 4 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1729788) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1737165) -Respawned uWSGI worker 1 (new pid: 1737168) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1740503) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1747922) -Respawned uWSGI worker 1 (new pid: 1747925) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1751210) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1758587) -Respawned uWSGI worker 1 (new pid: 1758590) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1762001) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1769385) -Respawned uWSGI worker 1 (new pid: 1769388) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1772640) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1780039) -Respawned uWSGI worker 1 (new pid: 1780042) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1783371) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1790801) -Respawned uWSGI worker 1 (new pid: 1790804) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1794133) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1801503) -Respawned uWSGI worker 1 (new pid: 1801506) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1804861) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1812255) -Respawned uWSGI worker 1 (new pid: 1812257) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1815546) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1822949) -Respawned uWSGI worker 1 (new pid: 1822952) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1826320) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1833715) -Respawned uWSGI worker 1 (new pid: 1833718) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1837076) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1844485) -Respawned uWSGI worker 1 (new pid: 1844488) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1847773) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1855188) -Respawned uWSGI worker 1 (new pid: 1855191) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1858523) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1866049) -Respawned uWSGI worker 1 (new pid: 1866052) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1869340) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1876767) -Respawned uWSGI worker 1 (new pid: 1876770) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1880087) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1887479) -Respawned uWSGI worker 1 (new pid: 1887482) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1890837) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1898211) -Respawned uWSGI worker 1 (new pid: 1898214) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1901556) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1908921) -Respawned uWSGI worker 1 (new pid: 1908924) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1912248) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1920137) -Respawned uWSGI worker 1 (new pid: 1920140) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1923382) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1930907) -Respawned uWSGI worker 1 (new pid: 1930910) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1934274) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1941687) -Respawned uWSGI worker 1 (new pid: 1941690) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1945070) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1952440) -Respawned uWSGI worker 1 (new pid: 1952443) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1955711) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1963087) -Respawned uWSGI worker 1 (new pid: 1963090) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1966460) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1973837) -Respawned uWSGI worker 1 (new pid: 1973838) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1977132) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1984586) -Respawned uWSGI worker 1 (new pid: 1984589) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1987842) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1995228) -Respawned uWSGI worker 1 (new pid: 1995231) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1998606) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2006013) -Respawned uWSGI worker 1 (new pid: 2006016) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2009383) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2016746) -Respawned uWSGI worker 1 (new pid: 2016749) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2020105) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2027505) -Respawned uWSGI worker 1 (new pid: 2027508) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2030768) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2038160) -Respawned uWSGI worker 1 (new pid: 2038163) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2041486) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2048924) -Respawned uWSGI worker 1 (new pid: 2048927) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2052213) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2059653) -Respawned uWSGI worker 1 (new pid: 2059656) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2062924) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2070312) -Respawned uWSGI worker 1 (new pid: 2070315) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2073676) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2081101) -Respawned uWSGI worker 1 (new pid: 2081104) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2084373) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2091903) -Respawned uWSGI worker 1 (new pid: 2091906) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2095220) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2102633) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2105970) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2113408) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2116664) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2124204) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2127566) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2134983) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2138260) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2145657) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2149006) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2156401) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2159729) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2167173) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2170435) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2177843) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2181180) -Respawned uWSGI worker 3 (new pid: 2182486) -Respawned uWSGI worker 4 (new pid: 2182823) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2188694) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2192005) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2193380) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2193686) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2199405) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2202750) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2204068) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2204395) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2210172) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2213531) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2214842) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2215157) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2220926) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2224751) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2226065) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2226374) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2232140) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2235481) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2236791) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2237119) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2242908) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2246220) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2247594) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2247872) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2253671) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2256972) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2258275) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2258606) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2267711) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2269027) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2269335) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2278350) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2279658) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2279972) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2289127) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2290439) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2290751) -Respawned uWSGI worker 1 (new pid: 2294561) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2299820) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2301495) -Respawned uWSGI worker 3 (new pid: 2304206) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2305344) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2314930) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2316113) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2325623) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2326724) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2336316) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2337479) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2347048) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2348177) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2354905) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2357819) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2365666) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2368523) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2376398) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2379450) -Respawned uWSGI worker 4 (new pid: 2380965) -Respawned uWSGI worker 1 (new pid: 2380968) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2387258) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2391630) -Respawned uWSGI worker 1 (new pid: 2391633) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2398029) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2402397) -Respawned uWSGI worker 1 (new pid: 2402400) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2408690) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2413588) -Respawned uWSGI worker 1 (new pid: 2413591) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2419973) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2424331) -Respawned uWSGI worker 1 (new pid: 2424334) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2430713) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2435141) -Respawned uWSGI worker 1 (new pid: 2435144) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2441420) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2445775) -Respawned uWSGI worker 1 (new pid: 2445778) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2452621) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2457002) -Respawned uWSGI worker 1 (new pid: 2457005) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2463315) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2467746) -Respawned uWSGI worker 1 (new pid: 2467749) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2474119) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2478462) -Respawned uWSGI worker 1 (new pid: 2478463) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2484821) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2489230) -Respawned uWSGI worker 1 (new pid: 2489233) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2495527) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2499855) -Respawned uWSGI worker 1 (new pid: 2499858) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2506267) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2510640) -Respawned uWSGI worker 1 (new pid: 2510643) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2516966) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2521406) -Respawned uWSGI worker 1 (new pid: 2521409) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3602 second(s) -Respawned uWSGI worker 2 (new pid: 2527730) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2532102) -Respawned uWSGI worker 1 (new pid: 2532105) -Python auto-reloader enabled -Respawned uWSGI worker 3 (new pid: 2534604) -[2025-12-03 14:31:04,088] INFO in auth: 用户 韦矍森(19977899008) 登录成功 -[2025-12-03 14:31:04,166] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 -[2025-12-03 14:31:23,679] INFO in statistics: 用户 韦矍森 访问统计页面 -[2025-12-03 14:31:23,795] INFO in statistics: 用户 韦矍森 访问统计页面 -[2025-12-03 14:31:27,074] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 -[2025-12-03 14:31:27,685] INFO in statistics: 用户 韦矍森 访问统计页面 -[2025-12-03 14:31:27,785] INFO in statistics: 用户 韦矍森 访问统计页面 -[2025-12-03 14:31:31,515] INFO in statistics: 用户 韦矍森 访问统计页面 -[2025-12-03 14:31:31,616] INFO in statistics: 用户 韦矍森 访问统计页面 -[2025-12-03 14:32:03,009] INFO in auth: 用户 韦矍森(19977899008) 登出 -[2025-12-03 14:32:29,898] INFO in auth: 用户 唐昊(18977846300) 登录成功 -[2025-12-03 14:32:29,970] INFO in dashboard: 用户 唐昊 访问仪表盘页面 -[2025-12-03 14:32:30,329] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:32:30,412] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:32:35,096] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:32:35,192] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:32:45,846] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:32:45,933] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:33:04,799] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:33:04,882] INFO in statistics: 用户 唐昊 访问统计页面 -[2025-12-03 14:33:12,513] INFO in auth: 用户 韦炳育(18176156082) 登录成功 -[2025-12-03 14:33:12,634] INFO in dashboard: 用户 韦炳育 访问仪表盘页面 -[2025-12-03 14:34:03,071] INFO in dashboard: 用户 韦炳育 访问仪表盘页面 -[2025-12-03 14:38:02,344] INFO in manual: 用户 韦炳育 开始创建手工故障单 -[2025-12-03 14:38:02,572] INFO in manual: 用户 韦炳育 创建手工故障单成功:M202512030001 -[2025-12-03 14:38:02,724] INFO in history: 用户 韦炳育 访问历史记录页面 -[2025-12-03 14:38:05,773] INFO in history: 用户 韦炳育 访问历史记录页面 -[2025-12-03 14:38:29,307] INFO in dashboard: 用户 韦炳育 访问仪表盘页面 -[2025-12-03 14:38:45,039] INFO in history: 用户 韦炳育 访问历史记录页面 -[2025-12-03 14:38:47,244] INFO in history: 用户 韦炳育 查看工单 M202512030001 的详情 -[2025-12-03 14:39:26,080] INFO in dashboard: 用户 韦炳育 访问仪表盘页面 -worker 2 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2542855) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2545377) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2553572) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2556067) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2564358) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2566822) -Respawned uWSGI worker 2 (new pid: 2573816) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2575128) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2577658) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2584633) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2585936) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2588439) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2595328) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2596659) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2599105) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2606042) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2607354) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2609869) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2616810) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2618118) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2620624) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2627550) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2628896) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2631325) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2638560) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2639873) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2642390) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2649344) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2650647) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2653154) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2660587) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2661925) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2664421) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2671366) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2672676) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2675223) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2682178) -worker 4 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2685979) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2692895) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2696737) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2703697) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2708388) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2715288) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2719050) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2726023) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2729864) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2736764) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2740481) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2747389) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2751179) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2761973) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2772839) -Respawned uWSGI worker 1 (new pid: 2781446) -Python auto-reloader enabled -Respawned uWSGI worker 4 (new pid: 2781449) -Respawned uWSGI worker 2 (new pid: 2781452) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2783553) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2792259) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2794359) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2802971) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2805056) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2813717) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2815803) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2824542) -Respawned uWSGI worker 1 (new pid: 2826322) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2826325) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2835188) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2837039) -worker 2 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2837042) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2845949) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2847807) -worker 2 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2847811) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2856620) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2858491) -worker 2 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2858494) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2867415) -Respawned uWSGI worker 3 (new pid: 2869067) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2869299) -worker 2 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2869302) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2878232) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 2879822) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 2880032) -worker 2 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 2880035) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 2888956) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 2890789) -gateway "uWSGI http 1" has been buried (pid: 833719) -...brutally killing workers... -worker 3 buried after 1 seconds -worker 1 buried after 1 seconds -worker 4 buried after 1 seconds -worker 2 buried after 1 seconds -binary reloading uWSGI... -chdir() to /home/v6ole/pyproject/4an -closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -found fd 9 mapped to socket 0 (/home/v6ole/pyproject/4an/uwsgi.sock) -running /home/v6ole/pyproject/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/4an/app/uwsgi.ini -*** Starting uWSGI 2.0.31 (64bit) on [Fri Dec 5 00:06:32 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1024 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 7 -probably another instance of uWSGI is running on the same address (0.0.0.0:18019). -bind(): Address already in use [core/socket.c line 769] -VACUUM: pidfile removed. -*** Starting uWSGI 2.0.31 (64bit) on [Fri Dec 5 08:08:47 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -writing pidfile to /home/v6ole/pyproject/4an/uwsgi.pid -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1024 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 6 -uwsgi socket 0 bound to UNIX address /home/v6ole/pyproject/4an/uwsgi.sock fd 9 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Python version: 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] -PEP 405 virtualenv detected: /home/v6ole/pyproject/venv -Set PythonHome to /home/v6ole/pyproject/venv -Python main interpreter initialized at 0x76050daa3668 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -python threads support enabled -your server socket listen backlog is limited to 100 connections -your mercy for graceful operations on workers is 60 seconds -mapped 703440 bytes (686 KB) for 8 cores -*** Operational MODE: preforking+threaded *** -[2025-12-05 08:08:48,792] INFO in app: 应用启动 -[2025-12-05 08:08:48,794] INFO in error_handlers: 错误处理器初始化完成 -WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x76050daa3668 pid: 1183 (default app) -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -*** uWSGI is running in multiple interpreter mode *** -spawned uWSGI master process (pid: 1183) -spawned uWSGI worker 1 (pid: 2076, cores: 2) -Python auto-reloader enabled -spawned uWSGI worker 2 (pid: 2079, cores: 2) -spawned uWSGI worker 3 (pid: 2082, cores: 2) -spawned uWSGI worker 4 (pid: 2085, cores: 2) -*** Stats server enabled on 127.0.0.1:9191 fd: 22 *** -spawned uWSGI http 1 (pid: 2088) -unable to stat() uwsgi.reload, events will be triggered as soon as the file is created -unable to stat() true, events will be triggered as soon as the file is created -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 35205) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 35208) -Respawned uWSGI worker 3 (new pid: 35211) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 45944) -Respawned uWSGI worker 2 (new pid: 45946) -Python auto-reloader enabled -Respawned uWSGI worker 3 (new pid: 45950) -Respawned uWSGI worker 4 (new pid: 52971) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 56786) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 63776) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 67519) -Respawned uWSGI worker 1 (new pid: 67755) -Python auto-reloader enabled -Respawned uWSGI worker 3 (new pid: 67832) -[2025-12-05 12:10:36,094] INFO in auth: 用户 韦炳育(18176156082) 登录成功 -[2025-12-05 12:10:36,222] INFO in dashboard: 用户 韦炳育 访问仪表盘页面 -[2025-12-05 12:11:59,968] INFO in dashboard: 用户 韦炳育 访问仪表盘页面 -worker 4 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 78557) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 81177) -Respawned uWSGI worker 2 (new pid: 81180) -Respawned uWSGI worker 3 (new pid: 81183) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -gateway "uWSGI http 1" has been buried (pid: 2088) -...brutally killing workers... -worker 1 buried after 1 seconds -worker 4 buried after 1 seconds -worker 2 buried after 1 seconds -worker 3 buried after 1 seconds -binary reloading uWSGI... -chdir() to /home/v6ole/pyproject/4an -closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -found fd 9 mapped to socket 0 (/home/v6ole/pyproject/4an/uwsgi.sock) -running /home/v6ole/pyproject/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/4an/app/uwsgi.ini -*** Starting uWSGI 2.0.31 (64bit) on [Fri Dec 5 14:57:54 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1024 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 7 -probably another instance of uWSGI is running on the same address (0.0.0.0:18019). -bind(): Address already in use [core/socket.c line 769] -VACUUM: pidfile removed. -*** Starting uWSGI 2.0.31 (64bit) on [Fri Dec 5 14:57:54 2025] *** -compiled with version: 13.3.0 on 26 November 2025 03:29:52 -os: Linux-6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 -nodename: fnubserver -machine: x86_64 -clock source: unix -detected number of CPU cores: 22 -current working directory: /home/v6ole/pyproject/4an -writing pidfile to /home/v6ole/pyproject/4an/uwsgi.pid -detected binary path: /home/v6ole/pyproject/venv/bin/uwsgi -!!! no internal routing support, rebuild with pcre support !!! -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -chdir() to /home/v6ole/pyproject/4an/app -your processes number limit is 63617 -your memory page size is 4096 bytes - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -detected max file descriptor number: 1024 -lock engine: pthread robust mutexes -thunder lock: disabled (you can enable it with --thunder-lock) -uWSGI http bound on 0.0.0.0:18019 fd 6 -uwsgi socket 0 bound to UNIX address /home/v6ole/pyproject/4an/uwsgi.sock fd 9 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Python version: 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] -PEP 405 virtualenv detected: /home/v6ole/pyproject/venv -Set PythonHome to /home/v6ole/pyproject/venv -Python main interpreter initialized at 0x7d302f6a3668 -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -python threads support enabled -your server socket listen backlog is limited to 100 connections -your mercy for graceful operations on workers is 60 seconds -mapped 703440 bytes (686 KB) for 8 cores -*** Operational MODE: preforking+threaded *** -[2025-12-05 14:57:55,140] INFO in app: 应用启动 -[2025-12-05 14:57:55,142] INFO in error_handlers: 错误处理器初始化完成 -WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7d302f6a3668 pid: 98220 (default app) -uWSGI running as root, you can use --uid/--gid/--chroot options -*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -*** uWSGI is running in multiple interpreter mode *** -spawned uWSGI master process (pid: 98220) -spawned uWSGI worker 1 (pid: 98242, cores: 2) -spawned uWSGI worker 2 (pid: 98243, cores: 2) -spawned uWSGI worker 3 (pid: 98244, cores: 2) -spawned uWSGI worker 4 (pid: 98249, cores: 2) -*** Stats server enabled on 127.0.0.1:9191 fd: 22 *** -Python auto-reloader enabled -spawned uWSGI http 1 (pid: 98252) -unable to stat() uwsgi.reload, events will be triggered as soon as the file is created -unable to stat() true, events will be triggered as soon as the file is created -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 109258) -Respawned uWSGI worker 4 (new pid: 109261) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 120039) -Respawned uWSGI worker 4 (new pid: 120042) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 131389) -Respawned uWSGI worker 4 (new pid: 131392) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 142112) -Respawned uWSGI worker 4 (new pid: 142115) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 152915) -Respawned uWSGI worker 4 (new pid: 152918) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 163658) -Respawned uWSGI worker 4 (new pid: 163661) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 174492) -Respawned uWSGI worker 4 (new pid: 174493) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 185338) -Respawned uWSGI worker 4 (new pid: 185341) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 196174) -Respawned uWSGI worker 4 (new pid: 196177) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 206965) -Respawned uWSGI worker 4 (new pid: 206968) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 217743) -Respawned uWSGI worker 4 (new pid: 217746) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 228469) -Respawned uWSGI worker 4 (new pid: 228470) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 239269) -Respawned uWSGI worker 4 (new pid: 239272) -Respawned uWSGI worker 3 (new pid: 240387) -Respawned uWSGI worker 1 (new pid: 249625) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 251076) -Respawned uWSGI worker 2 (new pid: 252812) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 261859) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 263601) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 272781) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 274420) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 283515) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 285235) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 294829) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 296552) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 305569) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 307316) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 316385) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 318050) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 327079) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 328825) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 339574) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 350295) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 361031) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 371841) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 382534) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 393365) -Respawned uWSGI worker 1 (new pid: 398955) -Python auto-reloader enabled -Respawned uWSGI worker 3 (new pid: 398959) -Respawned uWSGI worker 4 (new pid: 399292) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 410065) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 420738) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 431508) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 442254) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 453000) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 463957) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 474677) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 485448) -Respawned uWSGI worker 3 (new pid: 494911) -Respawned uWSGI worker 2 (new pid: 494914) -Respawned uWSGI worker 1 (new pid: 495018) -Python auto-reloader enabled -worker 4 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 505709) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 516520) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 527404) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 538201) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 548895) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 559655) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 570400) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 581097) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 591847) -Respawned uWSGI worker 4 (new pid: 601134) -Respawned uWSGI worker 1 (new pid: 601137) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 601140) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 611924) -worker 2 lifetime reached, it was running for 3601 second(s) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 622710) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 633505) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 639168) -Respawned uWSGI worker 3 (new pid: 639171) -Respawned uWSGI worker 4 (new pid: 639174) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 644322) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 655040) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 665827) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 676543) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 687375) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 698135) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 708951) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 719896) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 730636) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 741490) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 752257) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 763041) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 773834) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 785145) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 795950) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 806664) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 817481) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 846147) -Respawned uWSGI worker 3 (new pid: 846150) -Respawned uWSGI worker 4 (new pid: 846151) -Respawned uWSGI worker 1 (new pid: 846155) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 857148) -Respawned uWSGI worker 3 (new pid: 857151) -Respawned uWSGI worker 4 (new pid: 857152) -Respawned uWSGI worker 1 (new pid: 857157) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 867834) -Respawned uWSGI worker 3 (new pid: 867837) -Respawned uWSGI worker 4 (new pid: 867838) -Respawned uWSGI worker 1 (new pid: 867843) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 878433) -Respawned uWSGI worker 3 (new pid: 878436) -Respawned uWSGI worker 4 (new pid: 878437) -Respawned uWSGI worker 1 (new pid: 878440) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 889192) -Respawned uWSGI worker 3 (new pid: 889195) -Respawned uWSGI worker 4 (new pid: 889197) -Respawned uWSGI worker 1 (new pid: 889199) -Python auto-reloader enabled -worker 1 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 899952) -Respawned uWSGI worker 4 (new pid: 899955) -Respawned uWSGI worker 1 (new pid: 899958) -Python auto-reloader enabled -Respawned uWSGI worker 2 (new pid: 905974) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 910709) -Respawned uWSGI worker 4 (new pid: 910712) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 921519) -Respawned uWSGI worker 4 (new pid: 921522) -Respawned uWSGI worker 2 (new pid: 928414) -Respawned uWSGI worker 1 (new pid: 928417) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 932337) -Respawned uWSGI worker 4 (new pid: 932340) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 939287) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 939290) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 943151) -Respawned uWSGI worker 4 (new pid: 943154) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 950024) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 950045) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 953931) -Respawned uWSGI worker 4 (new pid: 953934) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 960801) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 960805) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 964640) -Respawned uWSGI worker 4 (new pid: 964643) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 971555) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 971559) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 975595) -Respawned uWSGI worker 4 (new pid: 975598) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 982485) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 982488) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 986350) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 993306) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 993309) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 997139) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1004048) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1004051) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1007976) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1014863) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1014866) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1018660) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1025540) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1025570) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1029451) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1036330) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1036333) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1040261) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1047274) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1047277) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1051134) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1058014) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1058041) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1061896) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1068807) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1068810) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1072634) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1079550) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1079582) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1083442) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1091908) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1091911) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1095752) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1102656) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1102659) -Python auto-reloader enabled -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 3 (new pid: 1106545) -Respawned uWSGI worker 4 (new pid: 1108644) -[2025-12-09 12:23:07,228] INFO in auth: 用户 韦矍森(19977899008) 登录成功 -[2025-12-09 12:23:07,318] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 -[2025-12-09 12:23:15,590] INFO in device: 用户请求验证码 -[2025-12-09 12:23:15,676] INFO in device: 验证码获取成功 -[2025-12-09 12:23:21,511] INFO in device: 用户 韦矍森 开始同步摄像头第一步 -[2025-12-09 12:23:21,512] INFO in device: 尝试登录中兴平台 -[2025-12-09 12:23:21,818] INFO in device: 登录成功,开始获取在线信息 -[2025-12-09 12:23:22,544] INFO in device: 获取到 1436 个设备信息,开始更新数据库 -[2025-12-09 12:23:22,737] INFO in device: 数据库更新完成,更新了 1436 条记录,其中离线设备 720 个 -{address space usage: 1096757248 bytes/1045MB} {rss usage: 83034112 bytes/79MB} [pid: 1106545|app: 0|req: 34/138] 175.178.19.237 () {56 vars in 1260 bytes} [Tue Dec 9 12:23:21 2025] POST /sync_camera_step1 => generated 58 bytes in 1230 msecs (HTTP/1.1 200) 3 headers in 85 bytes (1 switches on core 1) -[2025-12-09 12:23:23,997] INFO in device: 用户 韦矍森 开始同步摄像头第二步 -[2025-12-09 12:23:24,010] INFO in device: 查询到 1107 个需要同步的设备 -[2025-12-09 12:23:24,752] INFO in device: 发现 35 个离线设备需要创建工单 -[2025-12-09 12:23:24,816] INFO in device: 成功创建 35 个工单 -worker 2 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1331157) -Respawned uWSGI worker 4 (new pid: 1331160) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1345741) -Respawned uWSGI worker 4 (new pid: 1345744) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1360481) -Respawned uWSGI worker 4 (new pid: 1360484) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1375695) -Respawned uWSGI worker 4 (new pid: 1375698) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1391140) -Respawned uWSGI worker 4 (new pid: 1391143) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1406801) -Respawned uWSGI worker 4 (new pid: 1406802) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1422500) -Respawned uWSGI worker 4 (new pid: 1422503) -Respawned uWSGI worker 3 (new pid: 1426691) -Respawned uWSGI worker 1 (new pid: 1426819) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1438231) -worker 3 lifetime reached, it was running for 3601 second(s) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1442517) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1454041) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1458332) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1469078) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1473037) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1483634) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1487654) -Python auto-reloader enabled -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1500346) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1502390) -Python auto-reloader enabled -Respawned uWSGI worker 3 (new pid: 1507360) -worker 2 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1516114) -Respawned uWSGI worker 4 (new pid: 1516117) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1517331) -Python auto-reloader enabled -[uwsgi-http key: client_addr: 111.7.96.147 client_port: 43622] hr_read(): Connection reset by peer [plugins/http/http.c line 918] -worker 3 lifetime reached, it was running for 3601 second(s) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1530872) -worker 1 lifetime reached, it was running for 3601 second(s) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1546253) -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1560989) -[2025-12-10 10:38:00,665] ERROR in error_handlers: 未处理异常: 405 Method Not Allowed: The method is not allowed for the requested URL. -Traceback (most recent call last): - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 891, in dispatch_request - self.raise_routing_exception(req) - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 500, in raise_routing_exception - raise request.routing_exception # type: ignore[misc] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/ctx.py", line 362, in match_request - result = self.url_adapter.match(return_rule=True) # type: ignore - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 624, in match - raise MethodNotAllowed(valid_methods=list(e.have_match_for)) from None -werkzeug.exceptions.MethodNotAllowed: 405 Method Not Allowed: The method is not allowed for the requested URL. - -Respawned uWSGI worker 2 (new pid: 1563950) -[2025-12-10 10:38:00,876] ERROR in error_handlers: 未处理异常: 405 Method Not Allowed: The method is not allowed for the requested URL. -Traceback (most recent call last): - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 891, in dispatch_request - self.raise_routing_exception(req) - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/app.py", line 500, in raise_routing_exception - raise request.routing_exception # type: ignore[misc] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/flask/ctx.py", line 362, in match_request - result = self.url_adapter.match(return_rule=True) # type: ignore - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/home/v6ole/pyproject/venv/lib/python3.12/site-packages/werkzeug/routing/map.py", line 624, in match - raise MethodNotAllowed(valid_methods=list(e.have_match_for)) from None -werkzeug.exceptions.MethodNotAllowed: 405 Method Not Allowed: The method is not allowed for the requested URL. - -Respawned uWSGI worker 3 (new pid: 1563953) -Respawned uWSGI worker 1 (new pid: 1563956) -Python auto-reloader enabled -worker 4 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 4 (new pid: 1575846) -worker 2 lifetime reached, it was running for 3601 second(s) -worker 3 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 2 (new pid: 1578835) -Respawned uWSGI worker 3 (new pid: 1578838) -worker 1 lifetime reached, it was running for 3601 second(s) -Respawned uWSGI worker 1 (new pid: 1578844) -Python auto-reloader enabled +[2025-12-10 15:06:31,680] INFO in auth: 重定向到 Casdoor 授权页面 +[2025-12-10 15:06:39,922] INFO in auth: Casdoor 用户信息: {'sub': '798f4436-fbb6-45f4-bf0c-6e1cf4add605', 'iss': 'http://10.10.10.14:18000', 'aud': '8f323670e073612794ef', 'preferred_username': 'test', 'name': '韦矍森', 'email': 'voole@vip.qq.com', 'email_verified': True, 'picture': 'https://cdn.casbin.org/img/casbin.svg', 'phone': '19977899008'} +[2025-12-10 15:06:39,925] INFO in auth: 更新用户信息: 韦矍森(19977899008) +[2025-12-10 15:06:39,926] INFO in auth: 用户 韦矍森(19977899008) 通过 Casdoor 登录成功 +[2025-12-10 15:06:39,936] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 +[2025-12-10 15:06:49,485] INFO in statistics: 用户 韦矍森 访问统计页面 +[2025-12-10 15:06:50,638] INFO in history: 用户 韦矍森 访问历史记录页面 +[2025-12-10 15:06:51,827] INFO in statistics: 用户 韦矍森 访问统计页面 +[2025-12-10 15:06:54,693] INFO in dashboard: 用户 韦矍森 访问仪表盘页面 diff --git a/uwsgi.pid b/uwsgi.pid index 781291f..7c939ba 100644 --- a/uwsgi.pid +++ b/uwsgi.pid @@ -1 +1 @@ -98220 +1645179