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 %}
+
+
+
+
+ 或
+
+ {% endif %}
+
+
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