diff --git a/create_poetry_favorites_table.py b/create_poetry_favorites_table.py new file mode 100644 index 0000000..e928d79 --- /dev/null +++ b/create_poetry_favorites_table.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +创建古诗词收藏表 +""" + +import sys +import os +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from src.flask_prompt_master import create_app, db +from src.flask_prompt_master.models.poetry_favorites import PoetryFavorite + +def create_poetry_favorites_table(): + """创建古诗词收藏表""" + app = create_app() + + with app.app_context(): + try: + # 创建表 + db.create_all() + print("✅ 古诗词收藏表创建成功!") + + # 检查表是否存在 + from sqlalchemy import inspect + inspector = inspect(db.engine) + if 'poetry_favorites' in inspector.get_table_names(): + print("✅ 表 'poetry_favorites' 已存在") + else: + print("❌ 表 'poetry_favorites' 创建失败") + + except Exception as e: + print(f"❌ 创建表失败: {e}") + return False + + return True + +if __name__ == '__main__': + print("开始创建古诗词收藏表...") + success = create_poetry_favorites_table() + if success: + print("🎉 古诗词收藏功能数据库初始化完成!") + else: + print("💥 数据库初始化失败!") + sys.exit(1) diff --git a/logs/app.log b/logs/app.log index c701f4d..4725d28 100644 --- a/logs/app.log +++ b/logs/app.log @@ -1203,3 +1203,73 @@ OSError: [Errno 5] Input/output error 2025-09-14 10:21:05,361 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] 2025-09-14 10:23:47,060 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] 2025-09-14 10:25:23,276 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2025-09-14 14:02:48,216 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2025-09-14 14:05:04,009 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2025-09-14 15:40:23,178 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-14 15:40:23,246 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-14 15:42:53,566 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-14 15:42:53,582 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-14 15:45:51,041 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-14 15:45:51,093 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-14 15:46:43,416 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-14 15:46:43,421 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-14 15:49:14,934 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-14 15:49:14,938 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-14 19:00:32,760 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-14 19:00:32,792 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-17 00:05:52,296 ERROR: Exception on / [POST] [in /home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py:1414] +Traceback (most recent call last): + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function + return cors_after_request(app.make_response(f(*args, **kwargs))) + ^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 129, in index + generated_text = generate_with_llm(form.input_text.data, template_id) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 53, in generate_with_llm + print("\n=== API 调用参数 ===") +OSError: [Errno 5] Input/output error +2025-09-18 22:23:27,175 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-18 22:23:27,176 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-18 22:24:31,816 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-18 22:24:31,819 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-18 22:25:31,117 ERROR: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:101] +2025-09-18 22:25:31,119 ERROR: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. [in /home/renjianbo/aitsc/src/flask_prompt_master/routes/poetry.py:165] +2025-09-18 23:32:56,838 ERROR: Exception on / [POST] [in /home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py:1414] +Traceback (most recent call last): + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function + return cors_after_request(app.make_response(f(*args, **kwargs))) + ^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 129, in index + generated_text = generate_with_llm(form.input_text.data, template_id) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 53, in generate_with_llm + print("\n=== API 调用参数 ===") +OSError: [Errno 5] Input/output error +2025-09-18 23:38:00,352 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2025-09-18 23:43:08,941 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2025-09-18 23:46:46,603 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] +2025-09-18 23:58:37,127 INFO: 应用启动 [in /home/renjianbo/aitsc/config/base.py:82] diff --git a/logs/gunicorn.log b/logs/gunicorn.log new file mode 100644 index 0000000..a08532f --- /dev/null +++ b/logs/gunicorn.log @@ -0,0 +1,2 @@ +nohup: ignoring input +[2025-09-18 23:58:37,127] INFO in base: 应用启动 diff --git a/logs/gunicorn.pid b/logs/gunicorn.pid index e483cc7..5efb691 100644 --- a/logs/gunicorn.pid +++ b/logs/gunicorn.pid @@ -1 +1 @@ -6470 +3055 diff --git a/logs/gunicorn_access.log b/logs/gunicorn_access.log index 7c38423..397529a 100644 --- a/logs/gunicorn_access.log +++ b/logs/gunicorn_access.log @@ -1026,3 +1026,224 @@ 123.139.37.169 - - [14/Sep/2025:13:01:11 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1114 123.139.37.169 - - [14/Sep/2025:13:02:49 +0800] "GET / HTTP/1.1" 200 49733 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 547778 123.139.37.169 - - [14/Sep/2025:13:02:49 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 946 +123.139.37.169 - - [14/Sep/2025:13:06:00 +0800] "GET /meal-planning HTTP/1.1" 200 25595 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 108538 +123.139.37.169 - - [14/Sep/2025:13:06:00 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/meal-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 847 +123.139.37.169 - - [14/Sep/2025:13:06:16 +0800] "GET /meal-planning/history HTTP/1.1" 200 22501 "http://101.43.95.130:5002/meal-planning" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 109498 +123.139.37.169 - - [14/Sep/2025:13:06:17 +0800] "GET /api/meal-planning/list?page=1&per_page=10 HTTP/1.1" 200 8014 "http://101.43.95.130:5002/meal-planning/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 353592 +123.139.37.169 - - [14/Sep/2025:13:06:52 +0800] "GET /meal-planning/history HTTP/1.1" 200 22501 "http://101.43.95.130:5002/meal-planning/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 104920 +123.139.37.169 - - [14/Sep/2025:13:06:53 +0800] "GET /api/meal-planning/list?page=1&per_page=10 HTTP/1.1" 200 8014 "http://101.43.95.130:5002/meal-planning/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 283018 +123.139.37.169 - - [14/Sep/2025:13:06:55 +0800] "GET / HTTP/1.1" 200 49733 "http://101.43.95.130:5002/meal-planning/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 191698 +123.139.37.169 - - [14/Sep/2025:13:06:55 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 787 +123.139.37.169 - - [14/Sep/2025:13:57:51 +0800] "GET / HTTP/1.1" 200 49733 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 315844 +123.139.37.169 - - [14/Sep/2025:13:57:51 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4495 +123.139.37.169 - - [14/Sep/2025:13:58:03 +0800] "GET / HTTP/1.1" 200 49733 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 288608 +123.139.37.169 - - [14/Sep/2025:13:58:03 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1447 +123.139.37.169 - - [14/Sep/2025:13:59:08 +0800] "GET /poetry/ HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4767 +123.139.37.169 - - [14/Sep/2025:13:59:48 +0800] "GET / HTTP/1.1" 200 49733 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 165693 +123.139.37.169 - - [14/Sep/2025:13:59:48 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 910 +123.139.37.169 - - [14/Sep/2025:14:03:29 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 575974 +123.139.37.169 - - [14/Sep/2025:14:03:29 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4304 +123.139.37.169 - - [14/Sep/2025:14:05:07 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 564941 +123.139.37.169 - - [14/Sep/2025:14:05:07 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 5684 +123.139.37.169 - - [14/Sep/2025:14:05:37 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 469144 +123.139.37.169 - - [14/Sep/2025:14:05:38 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4388 +123.139.37.169 - - [14/Sep/2025:15:40:23 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30333748 +123.139.37.169 - - [14/Sep/2025:15:42:51 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 585339 +123.139.37.169 - - [14/Sep/2025:15:42:51 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1030 +123.139.37.169 - - [14/Sep/2025:15:42:53 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 70287693 +123.139.37.169 - - [14/Sep/2025:15:45:09 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 522767 +123.139.37.169 - - [14/Sep/2025:15:45:10 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1427 +123.139.37.169 - - [14/Sep/2025:15:45:51 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30285508 +123.139.37.169 - - [14/Sep/2025:15:46:15 +0800] "GET /poetry/analyze HTTP/1.1" 405 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4681 +123.139.37.169 - - [14/Sep/2025:15:46:43 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30226757 +123.139.37.169 - - [14/Sep/2025:15:48:31 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 254600 +123.139.37.169 - - [14/Sep/2025:15:48:31 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1316 +123.139.37.169 - - [14/Sep/2025:15:49:14 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30287544 +3.131.215.38 - - [14/Sep/2025:16:19:03 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 457508 +3.131.215.38 - - [14/Sep/2025:16:20:21 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 332333 +123.139.37.169 - - [14/Sep/2025:18:59:21 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 285379 +123.139.37.169 - - [14/Sep/2025:18:59:21 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 883 +123.139.37.169 - - [14/Sep/2025:18:59:32 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 146408 +123.139.37.169 - - [14/Sep/2025:18:59:32 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 858 +123.139.37.169 - - [14/Sep/2025:18:59:35 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 93277 +123.139.37.169 - - [14/Sep/2025:18:59:35 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 802 +123.139.37.169 - - [14/Sep/2025:19:00:32 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30255615 +123.139.37.169 - - [14/Sep/2025:19:19:52 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 319790 +123.139.37.169 - - [14/Sep/2025:19:19:52 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 846 +123.139.37.169 - - [14/Sep/2025:19:19:52 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 862 +123.139.37.169 - - [14/Sep/2025:19:29:48 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 567057 +123.139.37.169 - - [14/Sep/2025:19:29:48 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4374 +123.139.37.169 - - [14/Sep/2025:19:29:48 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1293 +123.139.37.169 - - [14/Sep/2025:19:29:54 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 119385 +123.139.37.169 - - [14/Sep/2025:19:29:54 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 966 +167.94.145.110 - - [15/Sep/2025:06:36:21 +0800] "GET / HTTP/1.1" 200 49893 "-" "-" 645898 +167.94.145.110 - - [15/Sep/2025:06:36:26 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 688031 +167.94.145.110 - - [15/Sep/2025:06:36:27 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 1080 +167.94.145.110 - - [15/Sep/2025:06:36:27 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 4201 +167.94.145.110 - - [15/Sep/2025:06:36:48 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 4120 +167.94.145.110 - - [15/Sep/2025:06:36:49 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 890 +167.94.145.110 - - [15/Sep/2025:06:36:50 +0800] "GET /wiki HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 884 +43.128.25.40 - - [15/Sep/2025:09:17:18 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" 516944 +43.128.25.40 - - [15/Sep/2025:09:17:18 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" 1020 +1.82.133.130 - - [15/Sep/2025:14:34:30 +0800] "GET / HTTP/1.0" 200 49893 "-" "-" 292596 +1.82.133.130 - - [15/Sep/2025:14:34:34 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.111Safari/537.36" 112478 +110.40.39.111 - - [15/Sep/2025:16:46:38 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3" 513382 +110.40.39.111 - - [15/Sep/2025:16:46:39 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50" 712 +3.131.215.38 - - [15/Sep/2025:17:50:48 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 475016 +3.131.215.38 - - [15/Sep/2025:17:52:10 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 333585 +171.116.202.7 - - [16/Sep/2025:02:50:48 +0800] "GET / HTTP/1.1" 200 49893 "-" "-" 290679 +180.95.231.101 - - [16/Sep/2025:02:50:56 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" 481936 +111.113.88.90 - - [16/Sep/2025:02:50:56 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" 724 +185.224.128.17 - - [16/Sep/2025:06:35:09 +0800] "CONNECT example.com:80 HTTP/1.1" 404 207 "-" "-" 925 +162.142.125.207 - - [16/Sep/2025:06:58:18 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 435618 +167.94.146.54 - - [16/Sep/2025:12:18:48 +0800] "GET / HTTP/1.1" 200 49893 "-" "-" 468320 +167.94.146.54 - - [16/Sep/2025:12:18:53 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 344402 +167.94.146.54 - - [16/Sep/2025:12:18:58 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 729 +167.94.146.54 - - [16/Sep/2025:12:18:58 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 704 +167.94.146.54 - - [16/Sep/2025:12:19:03 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 702 +167.94.146.54 - - [16/Sep/2025:12:19:04 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 704 +167.94.146.54 - - [16/Sep/2025:12:19:05 +0800] "GET /login HTTP/1.1" 200 13723 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 4058 +3.130.96.91 - - [16/Sep/2025:17:04:22 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 473680 +3.130.96.91 - - [16/Sep/2025:17:05:35 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 310503 +123.139.95.59 - - [17/Sep/2025:00:04:58 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 279793 +123.139.95.59 - - [17/Sep/2025:00:04:59 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 806 +123.139.95.59 - - [17/Sep/2025:00:05:00 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1019 +123.139.95.59 - - [17/Sep/2025:00:05:52 +0800] "POST / HTTP/1.1" 500 265 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 277335 +123.139.95.59 - - [17/Sep/2025:00:05:55 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 295732 +185.224.128.17 - - [17/Sep/2025:07:51:12 +0800] "CONNECT example.com:80 HTTP/1.1" 404 207 "-" "-" 657 +175.30.48.152 - - [17/Sep/2025:07:52:19 +0800] "HEAD http://110.242.68.4/ HTTP/1.1" 200 0 "-" "Mozilla/5.01669615 Mozilla/5.0 (Linux; Android 5.1; S900PROBT Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Safari/537.36" 239835 +220.197.51.69 - - [17/Sep/2025:07:52:20 +0800] "GET http://www.rfa.org/english/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 669 +182.138.158.161 - - [17/Sep/2025:07:52:20 +0800] "CONNECT dnspod.qcloud.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 983 +182.138.158.161 - - [17/Sep/2025:07:52:21 +0800] "CONNECT dnspod.qcloud.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 647 +182.138.158.161 - - [17/Sep/2025:07:52:21 +0800] "GET http://www.epochtimes.com/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 236453 +182.138.158.161 - - [17/Sep/2025:07:52:21 +0800] "CONNECT dnspod.qcloud.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 661 +182.138.158.161 - - [17/Sep/2025:07:52:21 +0800] "GET http://www.wujieliulan.com/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 461468 +182.138.158.161 - - [17/Sep/2025:07:52:22 +0800] "GET http://www.minghui.org/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 106589 +182.138.158.161 - - [17/Sep/2025:07:52:22 +0800] "CONNECT dnspod.qcloud.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 963 +182.138.158.161 - - [17/Sep/2025:07:52:22 +0800] "GET http://dongtaiwang.com/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 241988 +182.138.158.161 - - [17/Sep/2025:07:52:22 +0800] "CONNECT dnspod.qcloud.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 665 +182.138.158.161 - - [17/Sep/2025:07:52:22 +0800] "CONNECT www.baidu.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 619 +124.31.105.231 - - [17/Sep/2025:07:52:23 +0800] "CONNECT cn.bing.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 736 +124.31.105.231 - - [17/Sep/2025:07:52:24 +0800] "GET http://www.soso.com/ HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" 410600 +124.31.105.231 - - [17/Sep/2025:07:52:24 +0800] "CONNECT www.voanews.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 663 +124.31.105.231 - - [17/Sep/2025:07:52:24 +0800] "CONNECT www.so.com:443 HTTP/1.1" 404 207 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 706 +167.94.146.59 - - [17/Sep/2025:12:20:06 +0800] "GET / HTTP/1.1" 200 49893 "-" "-" 522863 +167.94.146.59 - - [17/Sep/2025:12:20:10 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 370462 +167.94.146.59 - - [17/Sep/2025:12:20:11 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 971 +167.94.146.59 - - [17/Sep/2025:12:20:12 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 1065 +167.94.146.59 - - [17/Sep/2025:12:20:16 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 686 +167.94.146.59 - - [17/Sep/2025:12:20:17 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 695 +167.94.146.59 - - [17/Sep/2025:12:20:18 +0800] "GET /login HTTP/1.1" 200 13723 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 3454 +167.94.138.180 - - [17/Sep/2025:13:00:52 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 453822 +167.94.138.180 - - [17/Sep/2025:13:00:53 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 717 +167.94.138.180 - - [17/Sep/2025:13:00:55 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 676 +167.94.138.180 - - [17/Sep/2025:13:01:02 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 712 +167.94.138.180 - - [17/Sep/2025:13:01:04 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 716 +167.94.138.180 - - [17/Sep/2025:13:01:06 +0800] "GET /login HTTP/1.1" 200 13723 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 3155 +206.168.34.219 - - [17/Sep/2025:13:01:37 +0800] "GET /login HTTP/1.1" 200 13723 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 943 +3.132.23.201 - - [17/Sep/2025:16:46:11 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 469031 +3.132.23.201 - - [17/Sep/2025:16:48:21 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 318852 +3.134.148.59 - - [17/Sep/2025:17:27:30 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 446267 +3.134.148.59 - - [17/Sep/2025:17:28:46 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 466801 +66.228.53.78 - - [17/Sep/2025:18:20:30 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" 436163 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET /xxl-job-admin/toLogin HTTP/1.0" 404 207 "-" "-" 992 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET http://10.204.9.230/flag.html HTTP/1.1" 404 207 "-" "-" 1003 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET /ws/v1/cluster/ HTTP/1.0" 404 207 "-" "-" 805 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET /lab HTTP/1.0" 404 207 "-" "-" 897 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET /pods HTTP/1.0" 404 207 "-" "-" 795 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET http://101.91.15.155/vul/Tst_SsrF.html HTTP/1.0" 404 207 "-" "-" 924 +124.220.188.32 - - [18/Sep/2025:06:55:03 +0800] "GET /json HTTP/1.0" 404 207 "-" "-" 817 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET /login HTTP/1.0" 200 13723 "-" "-" 3989 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET /v2/keys HTTP/1.0" 404 207 "-" "-" 1282 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET /actuator HTTP/1.1" 404 207 "-" "-" 935 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET /ws?method=connectArthas&id=e63fbc2664227b16 HTTP/1.1" 404 207 "-" "-" 876 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET /nacos/ HTTP/1.1" 404 207 "-" "-" 694 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET /tplus/view/login.html HTTP/1.1" 404 207 "-" "-" 591 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET / HTTP/1.0" 200 49893 "-" "-" 261629 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET / HTTP/1.1" 200 49893 "-" "-" 239451 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET // HTTP/1.1" 200 49893 "-" "-" 333396 +124.220.188.32 - - [18/Sep/2025:06:55:05 +0800] "GET / HTTP/1.1" 200 49893 "-" "-" 250405 +124.220.188.32 - - [18/Sep/2025:06:55:06 +0800] "OPTIONS / HTTP/1.0" 200 0 "-" "-" 941 +124.220.188.32 - - [18/Sep/2025:06:55:06 +0800] "GET / HTTP/1.0" 200 49893 "-" "-" 115529 +124.220.188.32 - - [18/Sep/2025:06:55:08 +0800] "GET /nice%20ports%2C/Tri%6Eity.txt%2ebak HTTP/1.0" 404 207 "-" "-" 1186 +111.7.96.149 - - [18/Sep/2025:08:06:38 +0800] "GET / HTTP/1.1" 200 49893 "-" "curl/7.64.1" 273138 +36.41.66.155 - - [18/Sep/2025:08:06:47 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 286792 +36.41.66.155 - - [18/Sep/2025:08:06:48 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 141723 +36.41.66.155 - - [18/Sep/2025:08:06:49 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://ruilaizipj.com:5002/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 923 +36.41.66.155 - - [18/Sep/2025:08:06:52 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 695 +111.7.96.163 - - [18/Sep/2025:08:07:37 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 285331 +111.7.96.163 - - [18/Sep/2025:08:07:37 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 264556 +111.7.96.163 - - [18/Sep/2025:08:07:37 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://www.ruilaizipj.com:5002/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 829 +111.7.96.163 - - [18/Sep/2025:08:07:41 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 733 +36.41.66.49 - - [18/Sep/2025:08:07:57 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 142369 +36.41.66.49 - - [18/Sep/2025:08:07:57 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 130334 +36.41.66.49 - - [18/Sep/2025:08:07:58 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" 809 +36.41.66.49 - - [18/Sep/2025:08:08:02 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 686 +185.224.128.17 - - [18/Sep/2025:09:59:23 +0800] "CONNECT example.com:80 HTTP/1.1" 404 207 "-" "-" 688 +66.132.153.131 - - [18/Sep/2025:14:10:47 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 657370 +66.132.153.131 - - [18/Sep/2025:14:10:48 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 727 +66.132.153.131 - - [18/Sep/2025:14:10:48 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 685 +66.132.153.131 - - [18/Sep/2025:14:10:52 +0800] "PRI * HTTP/2.0" 404 207 "-" "-" 735 +66.132.153.131 - - [18/Sep/2025:14:10:54 +0800] "GET /favicon.ico HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 719 +66.132.153.131 - - [18/Sep/2025:14:10:55 +0800] "GET /wiki HTTP/1.1" 404 207 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 814 +58.212.237.154 - - [18/Sep/2025:14:10:56 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" 280199 +206.168.34.38 - - [18/Sep/2025:14:11:24 +0800] "GET /login HTTP/1.1" 200 13723 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 3302 +3.130.96.91 - - [18/Sep/2025:16:27:21 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/126.0.0.0 Safari/537.36" 425736 +123.139.94.4 - - [18/Sep/2025:22:21:27 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 273802 +123.139.94.4 - - [18/Sep/2025:22:21:27 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4330 +123.139.94.4 - - [18/Sep/2025:22:21:29 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 5131 +123.139.94.4 - - [18/Sep/2025:22:21:29 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 697 +123.139.94.4 - - [18/Sep/2025:22:23:27 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30201844 +123.139.94.4 - - [18/Sep/2025:22:24:31 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30199174 +123.139.94.4 - - [18/Sep/2025:22:24:34 +0800] "GET /poetry/examples HTTP/1.1" 200 16817 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 6378 +123.139.94.4 - - [18/Sep/2025:22:24:34 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/examples" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 701 +123.139.94.4 - - [18/Sep/2025:22:24:50 +0800] "GET /poetry/?title=%E6%98%A5%E6%99%93&author=%E5%AD%9F%E6%B5%A9%E7%84%B6&dynasty=%E5%94%90 HTTP/1.1" 200 24261 "http://101.43.95.130:5002/poetry/examples" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 5275 +123.139.94.4 - - [18/Sep/2025:22:24:50 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/?title=%E6%98%A5%E6%99%93&author=%E5%AD%9F%E6%B5%A9%E7%84%B6&dynasty=%E5%94%90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 729 +123.139.94.4 - - [18/Sep/2025:22:25:31 +0800] "POST /poetry/analyze HTTP/1.1" 200 184 "http://101.43.95.130:5002/poetry/?title=%E6%98%A5%E6%99%93&author=%E5%AD%9F%E6%B5%A9%E7%84%B6&dynasty=%E5%94%90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 30206243 +123.139.94.4 - - [18/Sep/2025:23:30:56 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 301780 +123.139.94.4 - - [18/Sep/2025:23:30:56 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 743 +123.139.94.4 - - [18/Sep/2025:23:32:03 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 186816 +123.139.94.4 - - [18/Sep/2025:23:32:03 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 710 +123.139.94.4 - - [18/Sep/2025:23:32:56 +0800] "POST / HTTP/1.1" 500 265 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 287623 +123.139.94.4 - - [18/Sep/2025:23:33:56 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 363738 +127.0.0.1 - - [18/Sep/2025:23:38:18 +0800] "GET / HTTP/1.1" 200 49893 "-" "curl/7.29.0" 460763 +123.139.94.4 - - [18/Sep/2025:23:38:21 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 569785 +123.139.94.4 - - [18/Sep/2025:23:38:21 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4335 +123.139.94.4 - - [18/Sep/2025:23:38:32 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 435941 +123.139.94.4 - - [18/Sep/2025:23:38:32 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1130 +127.0.0.1 - - [18/Sep/2025:23:38:59 +0800] "GET /poetry/ HTTP/1.1" 200 24261 "-" "curl/7.29.0" 1093 +123.139.94.4 - - [18/Sep/2025:23:39:26 +0800] "POST /poetry/analyze HTTP/1.1" 200 6213 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 40290252 +123.139.94.4 - - [18/Sep/2025:23:44:11 +0800] "POST /poetry/analyze HTTP/1.1" 200 5949 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 37279540 +127.0.0.1 - - [18/Sep/2025:23:45:52 +0800] "GET /poetry/ HTTP/1.1" 200 29579 "-" "curl/7.29.0" 18228 +123.139.94.4 - - [18/Sep/2025:23:46:50 +0800] "GET / HTTP/1.1" 200 49893 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 610282 +123.139.94.4 - - [18/Sep/2025:23:46:50 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4427 +123.139.94.4 - - [18/Sep/2025:23:46:52 +0800] "GET /poetry/ HTTP/1.1" 200 34651 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 131630 +123.139.94.4 - - [18/Sep/2025:23:46:52 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4553 +123.139.94.4 - - [18/Sep/2025:23:47:38 +0800] "POST /poetry/analyze HTTP/1.1" 200 4972 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 35537462 +123.139.94.4 - - [18/Sep/2025:23:50:12 +0800] "POST / HTTP/1.1" 200 54554 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 23198888 +123.139.94.4 - - [18/Sep/2025:23:50:12 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 1114 +123.139.94.4 - - [18/Sep/2025:23:51:21 +0800] "GET /poetry/ HTTP/1.1" 200 34651 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 125608 +123.139.94.4 - - [18/Sep/2025:23:51:21 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4297 +123.139.94.4 - - [18/Sep/2025:23:51:28 +0800] "GET /meal-planning/history HTTP/1.1" 200 22501 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 439262 +123.139.94.4 - - [18/Sep/2025:23:51:29 +0800] "GET /api/meal-planning/list?page=1&per_page=10 HTTP/1.1" 200 8014 "http://101.43.95.130:5002/meal-planning/history" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 538265 +123.139.94.4 - - [18/Sep/2025:23:51:33 +0800] "GET /poetry/ HTTP/1.1" 200 34651 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 164706 +123.139.94.4 - - [18/Sep/2025:23:51:33 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 795 +123.139.94.4 - - [18/Sep/2025:23:51:35 +0800] "GET /poetry/examples HTTP/1.1" 200 16817 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 101378 +123.139.94.4 - - [18/Sep/2025:23:51:35 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/examples" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4340 +123.139.94.4 - - [18/Sep/2025:23:51:37 +0800] "GET /poetry/ HTTP/1.1" 200 34651 "http://101.43.95.130:5002/poetry/examples" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 459813 +123.139.94.4 - - [18/Sep/2025:23:51:38 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 773 +123.139.94.4 - - [18/Sep/2025:23:58:52 +0800] "GET / HTTP/1.1" 200 50061 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 585814 +123.139.94.4 - - [18/Sep/2025:23:58:52 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 4598 +127.0.0.1 - - [18/Sep/2025:23:59:01 +0800] "GET /poetry/favorites HTTP/1.1" 200 24950 "-" "curl/7.29.0" 15484 +123.139.94.4 - - [18/Sep/2025:23:59:40 +0800] "GET /poetry/ HTTP/1.1" 200 41001 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 151487 +123.139.94.4 - - [18/Sep/2025:23:59:40 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 823 +123.139.94.4 - - [19/Sep/2025:00:00:35 +0800] "POST /poetry/analyze HTTP/1.1" 200 5772 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 39751657 +123.139.94.4 - - [19/Sep/2025:00:00:35 +0800] "POST /poetry/favorites/check HTTP/1.1" 200 57 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 430537 +123.139.94.4 - - [19/Sep/2025:00:00:44 +0800] "POST /poetry/favorites/add HTTP/1.1" 200 61 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 576436 +123.139.94.4 - - [19/Sep/2025:00:02:51 +0800] "GET /poetry/favorites HTTP/1.1" 200 24950 "http://101.43.95.130:5002/poetry/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 121194 +123.139.94.4 - - [19/Sep/2025:00:02:51 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/poetry/favorites" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 809 +123.139.94.4 - - [19/Sep/2025:00:02:52 +0800] "GET /poetry/favorites/list?page=1&per_page=10&search=&dynasty=&author= HTTP/1.1" 200 311 "http://101.43.95.130:5002/poetry/favorites" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 442664 +123.139.94.4 - - [19/Sep/2025:00:02:56 +0800] "GET /poetry/favorites/1 HTTP/1.1" 200 6227 "http://101.43.95.130:5002/poetry/favorites" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 414377 +123.139.94.4 - - [19/Sep/2025:00:03:10 +0800] "GET /poetry/favorites/1 HTTP/1.1" 200 6227 "http://101.43.95.130:5002/poetry/favorites" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 102769 +123.139.94.4 - - [19/Sep/2025:00:04:15 +0800] "GET / HTTP/1.1" 200 50061 "http://101.43.95.130:5002/poetry/favorites" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 203744 +123.139.94.4 - - [19/Sep/2025:00:04:15 +0800] "GET /api/check-login HTTP/1.1" 200 35 "http://101.43.95.130:5002/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" 804 diff --git a/logs/gunicorn_error.log b/logs/gunicorn_error.log index 2b5b86a..43f2c14 100644 --- a/logs/gunicorn_error.log +++ b/logs/gunicorn_error.log @@ -4173,3 +4173,450 @@ SystemExit: 1 [2025-09-14 10:25:24 +0800] [6498] [INFO] Booting worker with pid: 6498 [2025-09-14 10:25:24 +0800] [6498] [INFO] 工作进程 6498 已启动 [2025-09-14 10:25:24 +0800] [6498] [INFO] 工作进程 6498 初始化完成 +[2025-09-14 14:02:47 +0800] [32217] [DEBUG] Current configuration: + config: gunicorn.conf.py + wsgi_app: None + bind: ['0.0.0.0:5002'] + backlog: 2048 + workers: 5 + worker_class: sync + threads: 1 + worker_connections: 1000 + max_requests: 1000 + max_requests_jitter: 100 + timeout: 120 + graceful_timeout: 60 + keepalive: 2 + limit_request_line: 4094 + limit_request_fields: 100 + limit_request_field_size: 8190 + reload: False + reload_engine: auto + reload_extra_files: [] + spew: False + check_config: False + print_config: False + preload_app: True + sendfile: None + reuse_port: False + chdir: /home/renjianbo/aitsc + daemon: False + raw_env: ['FLASK_ENV=production'] + pidfile: logs/gunicorn.pid + worker_tmp_dir: None + user: 1003 + group: 1003 + umask: 0 + initgroups: False + tmp_upload_dir: None + secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'} + forwarded_allow_ips: ['127.0.0.1'] + accesslog: logs/gunicorn_access.log + disable_redirect_access_to_syslog: False + access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(D)s + errorlog: logs/gunicorn_error.log + loglevel: debug + capture_output: False + logger_class: gunicorn.glogging.Logger + logconfig: None + logconfig_dict: {} + logconfig_json: None + syslog_addr: udp://localhost:514 + syslog: False + syslog_prefix: None + syslog_facility: user + enable_stdio_inheritance: False + statsd_host: None + dogstatsd_tags: + statsd_prefix: + proc_name: None + default_proc_name: run_dev:app + pythonpath: None + paste: None + on_starting: + on_reload: + when_ready: + pre_fork: + post_fork: + post_worker_init: + worker_int: + worker_abort: + pre_exec: + pre_request: + post_request: + child_exit: + worker_exit: + nworkers_changed: + on_exit: + ssl_context: + proxy_protocol: False + proxy_allow_ips: ['127.0.0.1'] + keyfile: None + certfile: None + ssl_version: 2 + cert_reqs: 0 + ca_certs: None + suppress_ragged_eofs: True + do_handshake_on_connect: False + ciphers: None + raw_paste_global_conf: [] + strip_header_spaces: False +[2025-09-14 14:02:49 +0800] [32217] [INFO] Starting gunicorn 21.2.0 +[2025-09-14 14:02:49 +0800] [32217] [INFO] Gunicorn服务器启动中... +[2025-09-14 14:02:49 +0800] [32217] [DEBUG] Arbiter booted +[2025-09-14 14:02:49 +0800] [32217] [INFO] Listening at: http://0.0.0.0:5002 (32217) +[2025-09-14 14:02:49 +0800] [32217] [INFO] Using worker: sync +[2025-09-14 14:02:49 +0800] [32217] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:02:49 +0800] [32262] [INFO] Booting worker with pid: 32262 +[2025-09-14 14:02:49 +0800] [32262] [INFO] 工作进程 32262 已启动 +[2025-09-14 14:02:49 +0800] [32217] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:02:49 +0800] [32262] [INFO] 工作进程 32262 初始化完成 +[2025-09-14 14:02:49 +0800] [32263] [INFO] Booting worker with pid: 32263 +[2025-09-14 14:02:49 +0800] [32263] [INFO] 工作进程 32263 已启动 +[2025-09-14 14:02:49 +0800] [32263] [INFO] 工作进程 32263 初始化完成 +[2025-09-14 14:02:49 +0800] [32217] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:02:49 +0800] [32264] [INFO] Booting worker with pid: 32264 +[2025-09-14 14:02:49 +0800] [32264] [INFO] 工作进程 32264 已启动 +[2025-09-14 14:02:49 +0800] [32264] [INFO] 工作进程 32264 初始化完成 +[2025-09-14 14:02:49 +0800] [32217] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:02:49 +0800] [32266] [INFO] Booting worker with pid: 32266 +[2025-09-14 14:02:49 +0800] [32266] [INFO] 工作进程 32266 已启动 +[2025-09-14 14:02:49 +0800] [32266] [INFO] 工作进程 32266 初始化完成 +[2025-09-14 14:02:50 +0800] [32217] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:02:50 +0800] [32267] [INFO] Booting worker with pid: 32267 +[2025-09-14 14:02:50 +0800] [32267] [INFO] 工作进程 32267 已启动 +[2025-09-14 14:02:50 +0800] [32267] [INFO] 工作进程 32267 初始化完成 +[2025-09-14 14:02:50 +0800] [32217] [DEBUG] 5 workers +[2025-09-14 14:03:28 +0800] [32267] [DEBUG] GET / +[2025-09-14 14:03:29 +0800] [32263] [DEBUG] GET /api/check-login +[2025-09-14 14:03:48 +0800] [32266] [INFO] 工作进程 32266 被中断 +[2025-09-14 14:03:48 +0800] [32267] [INFO] 工作进程 32267 被中断 +[2025-09-14 14:03:48 +0800] [32264] [INFO] 工作进程 32264 被中断 +[2025-09-14 14:03:48 +0800] [32263] [INFO] 工作进程 32263 被中断 +[2025-09-14 14:03:48 +0800] [32262] [INFO] 工作进程 32262 被中断 +[2025-09-14 14:03:48 +0800] [32217] [INFO] Handling signal: int +[2025-09-14 14:03:48 +0800] [32262] [INFO] 工作进程 32262 被中断 +[2025-09-14 14:03:48 +0800] [32267] [INFO] 工作进程 32267 被中断 +[2025-09-14 14:03:48 +0800] [32263] [INFO] 工作进程 32263 被中断 +[2025-09-14 14:03:48 +0800] [32264] [INFO] 工作进程 32264 被中断 +[2025-09-14 14:03:48 +0800] [32266] [INFO] 工作进程 32266 被中断 +[2025-09-14 14:03:48 +0800] [32262] [INFO] Worker exiting (pid: 32262) +[2025-09-14 14:03:48 +0800] [32263] [INFO] Worker exiting (pid: 32263) +[2025-09-14 14:03:48 +0800] [32267] [INFO] Worker exiting (pid: 32267) +[2025-09-14 14:03:48 +0800] [32264] [INFO] Worker exiting (pid: 32264) +[2025-09-14 14:03:48 +0800] [32266] [INFO] Worker exiting (pid: 32266) +[2025-09-14 14:03:50 +0800] [32217] [INFO] Shutting down: Master +[2025-09-14 14:05:06 +0800] [4123] [INFO] Starting gunicorn 21.2.0 +[2025-09-14 14:05:06 +0800] [4123] [INFO] Gunicorn服务器启动中... +[2025-09-14 14:05:06 +0800] [4123] [INFO] Listening at: http://0.0.0.0:5002 (4123) +[2025-09-14 14:05:06 +0800] [4123] [INFO] Using worker: sync +[2025-09-14 14:05:06 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:05:06 +0800] [7999] [INFO] Booting worker with pid: 7999 +[2025-09-14 14:05:06 +0800] [7999] [INFO] 工作进程 7999 已启动 +[2025-09-14 14:05:06 +0800] [7999] [INFO] 工作进程 7999 初始化完成 +[2025-09-14 14:05:06 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:05:06 +0800] [8108] [INFO] Booting worker with pid: 8108 +[2025-09-14 14:05:06 +0800] [8108] [INFO] 工作进程 8108 已启动 +[2025-09-14 14:05:06 +0800] [8108] [INFO] 工作进程 8108 初始化完成 +[2025-09-14 14:05:06 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:05:06 +0800] [8207] [INFO] Booting worker with pid: 8207 +[2025-09-14 14:05:06 +0800] [8207] [INFO] 工作进程 8207 已启动 +[2025-09-14 14:05:06 +0800] [8207] [INFO] 工作进程 8207 初始化完成 +[2025-09-14 14:05:06 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:05:06 +0800] [8286] [INFO] Booting worker with pid: 8286 +[2025-09-14 14:05:06 +0800] [8286] [INFO] 工作进程 8286 已启动 +[2025-09-14 14:05:06 +0800] [8286] [INFO] 工作进程 8286 初始化完成 +[2025-09-14 14:05:06 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 14:05:06 +0800] [8389] [INFO] Booting worker with pid: 8389 +[2025-09-14 14:05:06 +0800] [8389] [INFO] 工作进程 8389 已启动 +[2025-09-14 14:05:06 +0800] [8389] [INFO] 工作进程 8389 初始化完成 +[2025-09-14 15:40:23,178] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:40:23,246] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:42:53,566] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:42:53,582] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:45:51,041] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:45:51,093] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:46:43,416] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:46:43,421] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:49:14,934] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 15:49:14,938] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 16:23:57 +0800] [8207] [WARNING] Invalid request from ip=3.131.215.38: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-14 19:00:32,760] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 19:00:32,792] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-14 19:27:18 +0800] [4123] [ERROR] Worker (pid:7999) was sent SIGHUP! +[2025-09-14 19:27:18 +0800] [4123] [ERROR] Worker (pid:8207) was sent SIGHUP! +[2025-09-14 19:27:18 +0800] [4123] [ERROR] Worker (pid:8286) was sent SIGHUP! +[2025-09-14 19:27:18 +0800] [4123] [ERROR] Worker (pid:8389) was sent SIGHUP! +[2025-09-14 19:27:18 +0800] [4123] [ERROR] Worker (pid:8108) was sent SIGHUP! +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18868] [INFO] Booting worker with pid: 18868 +[2025-09-14 19:27:18 +0800] [18868] [INFO] 工作进程 18868 已启动 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18868] [INFO] 工作进程 18868 初始化完成 +[2025-09-14 19:27:18 +0800] [18869] [INFO] Booting worker with pid: 18869 +[2025-09-14 19:27:18 +0800] [18869] [INFO] 工作进程 18869 已启动 +[2025-09-14 19:27:18 +0800] [18869] [INFO] 工作进程 18869 初始化完成 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18870] [INFO] Booting worker with pid: 18870 +[2025-09-14 19:27:18 +0800] [18870] [INFO] 工作进程 18870 已启动 +[2025-09-14 19:27:18 +0800] [18870] [INFO] 工作进程 18870 初始化完成 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18871] [INFO] Booting worker with pid: 18871 +[2025-09-14 19:27:18 +0800] [18871] [INFO] 工作进程 18871 已启动 +[2025-09-14 19:27:18 +0800] [18871] [INFO] 工作进程 18871 初始化完成 +[2025-09-14 19:27:18 +0800] [4123] [INFO] Handling signal: hup +[2025-09-14 19:27:18 +0800] [4123] [INFO] Hang up: Master +[2025-09-14 19:27:18 +0800] [4123] [INFO] Gunicorn服务器重载中... +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18872] [INFO] Booting worker with pid: 18872 +[2025-09-14 19:27:18 +0800] [18872] [INFO] 工作进程 18872 已启动 +[2025-09-14 19:27:18 +0800] [18872] [INFO] 工作进程 18872 初始化完成 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18873] [INFO] Booting worker with pid: 18873 +[2025-09-14 19:27:18 +0800] [18873] [INFO] 工作进程 18873 已启动 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18873] [INFO] 工作进程 18873 初始化完成 +[2025-09-14 19:27:18 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-14 19:27:18 +0800] [18874] [INFO] Booting worker with pid: 18874 +[2025-09-14 19:27:18 +0800] [18874] [INFO] 工作进程 18874 已启动 +[2025-09-14 19:27:18 +0800] [18869] [INFO] Worker exiting (pid: 18869) +[2025-09-14 19:27:18 +0800] [18874] [INFO] 工作进程 18874 初始化完成 +[2025-09-14 19:27:18 +0800] [18868] [INFO] Worker exiting (pid: 18868) +[2025-09-14 19:27:18 +0800] [18870] [INFO] Worker exiting (pid: 18870) +[2025-09-14 19:27:18 +0800] [18876] [INFO] Booting worker with pid: 18876 +[2025-09-14 19:27:18 +0800] [18876] [INFO] 工作进程 18876 已启动 +[2025-09-14 19:27:18 +0800] [18876] [INFO] 工作进程 18876 初始化完成 +[2025-09-14 19:27:18 +0800] [18871] [INFO] Worker exiting (pid: 18871) +[2025-09-14 19:27:18 +0800] [18875] [INFO] Booting worker with pid: 18875 +[2025-09-14 19:27:18 +0800] [18875] [INFO] 工作进程 18875 已启动 +[2025-09-14 19:27:18 +0800] [18875] [INFO] 工作进程 18875 初始化完成 +[2025-09-14 22:09:13 +0800] [18872] [WARNING] Invalid request from ip=79.124.49.202: Invalid HTTP request line: '\x03\x00\x00/*à\x00\x00\x00\x00\x00Cookie: mstshash=Administr' +[2025-09-15 04:03:49 +0800] [18872] [WARNING] Invalid request from ip=185.170.144.3: Invalid HTTP request line: '\x03\x00\x00/*à\x00\x00\x00\x00\x00Cookie: mstshash=Administr' +[2025-09-15 04:28:40 +0800] [18873] [WARNING] Invalid request from ip=194.0.234.12: Invalid HTTP request line: '\x03\x00\x00/*à\x00\x00\x00\x00\x00Cookie: mstshash=Administr' +[2025-09-15 05:49:25 +0800] [18872] [WARNING] Invalid request from ip=79.124.49.202: Invalid HTTP request line: '\x03\x00\x00/*à\x00\x00\x00\x00\x00Cookie: mstshash=Administr' +[2025-09-15 11:57:43 +0800] [18873] [WARNING] Invalid request from ip=93.123.109.112: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-15 14:34:29 +0800] [18875] [WARNING] Invalid request from ip=1.82.133.130: Invalid HTTP request line: '' +[2025-09-15 17:54:09 +0800] [18872] [WARNING] Invalid request from ip=3.131.215.38: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-15 20:48:14 +0800] [18875] [WARNING] Invalid request from ip=37.60.241.154: Invalid HTTP request line: 'SSH-2.0-OpenSSH' +[2025-09-16 17:08:44 +0800] [18875] [WARNING] Invalid request from ip=3.130.96.91: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-16 19:37:44 +0800] [4123] [CRITICAL] WORKER TIMEOUT (pid:18872) +[2025-09-16 19:37:44 +0800] [18872] [INFO] 工作进程 18872 异常退出 +[2025-09-16 19:37:44 +0800] [18872] [INFO] Worker exiting (pid: 18872) +[2025-09-16 19:37:44 +0800] [4123] [ERROR] Worker (pid:18872) exited with code 1 +[2025-09-16 19:37:44 +0800] [4123] [ERROR] Worker (pid:18872) exited with code 1. +[2025-09-16 19:37:44 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-16 19:37:44 +0800] [19487] [INFO] Booting worker with pid: 19487 +[2025-09-16 19:37:44 +0800] [19487] [INFO] 工作进程 19487 已启动 +[2025-09-16 19:37:44 +0800] [19487] [INFO] 工作进程 19487 初始化完成 +[2025-09-17 00:05:52,296] ERROR in app: Exception on / [POST] +Traceback (most recent call last): + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function + return cors_after_request(app.make_response(f(*args, **kwargs))) + ^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 129, in index + generated_text = generate_with_llm(form.input_text.data, template_id) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 53, in generate_with_llm + print("\n=== API 调用参数 ===") +OSError: [Errno 5] Input/output error +[2025-09-17 02:25:19 +0800] [19487] [WARNING] Invalid request from ip=185.170.144.3: Invalid HTTP request line: '\x03\x00\x00/*à\x00\x00\x00\x00\x00Cookie: mstshash=Administr' +[2025-09-17 16:51:46 +0800] [18875] [WARNING] Invalid request from ip=3.132.23.201: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-17 17:33:10 +0800] [18875] [WARNING] Invalid request from ip=3.134.148.59: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-18 06:55:03 +0800] [18876] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP request line: '*1' +[2025-09-18 06:55:06 +0800] [18875] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP request line: '' +[2025-09-18 06:55:06 +0800] [18874] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP Version: 'RTSP/1.0' +[2025-09-18 06:55:06 +0800] [18876] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP request line: 'EHLO' +[2025-09-18 06:55:06 +0800] [18876] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP request line: 'HELP' +[2025-09-18 06:55:08 +0800] [18875] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP request line: '\x03\x00\x00*%à\x00\x00\x00\x00\x00Cookie: mstshash=nmap' +[2025-09-18 06:55:08 +0800] [18875] [WARNING] Invalid request from ip=124.220.188.32: Invalid HTTP Version: 'SIP/2.0' +[2025-09-18 12:35:58 +0800] [4123] [CRITICAL] WORKER TIMEOUT (pid:19487) +[2025-09-18 12:35:58 +0800] [19487] [INFO] 工作进程 19487 异常退出 +[2025-09-18 12:35:58 +0800] [19487] [INFO] Worker exiting (pid: 19487) +[2025-09-18 12:35:59 +0800] [4123] [ERROR] Worker (pid:19487) exited with code 1 +[2025-09-18 12:35:59 +0800] [4123] [ERROR] Worker (pid:19487) exited with code 1. +[2025-09-18 12:35:59 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 12:35:59 +0800] [13848] [INFO] Booting worker with pid: 13848 +[2025-09-18 12:35:59 +0800] [13848] [INFO] 工作进程 13848 已启动 +[2025-09-18 12:35:59 +0800] [13848] [INFO] 工作进程 13848 初始化完成 +[2025-09-18 14:12:57 +0800] [4123] [CRITICAL] WORKER TIMEOUT (pid:13848) +[2025-09-18 14:12:57 +0800] [13848] [INFO] 工作进程 13848 异常退出 +[2025-09-18 14:12:57 +0800] [13848] [INFO] Worker exiting (pid: 13848) +[2025-09-18 14:12:58 +0800] [4123] [ERROR] Worker (pid:13848) exited with code 1 +[2025-09-18 14:12:58 +0800] [4123] [ERROR] Worker (pid:13848) exited with code 1. +[2025-09-18 14:12:58 +0800] [4123] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 14:12:58 +0800] [23602] [INFO] Booting worker with pid: 23602 +[2025-09-18 14:12:58 +0800] [23602] [INFO] 工作进程 23602 已启动 +[2025-09-18 14:12:58 +0800] [23602] [INFO] 工作进程 23602 初始化完成 +[2025-09-18 16:31:19 +0800] [18876] [WARNING] Invalid request from ip=3.130.96.91: Invalid HTTP request line: 'SSH-2.0-Go' +[2025-09-18 22:23:27,175] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-18 22:23:27,176] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-18 22:24:31,816] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-18 22:24:31,819] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-18 22:25:31,117] ERROR in poetry: 生成古诗词AI解析时出错: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-18 22:25:31,119] ERROR in poetry: 古诗词分析失败: 古诗词解析生成失败: HTTPSConnectionPool(host='api.deepseek.com', port=443): Read timed out. +[2025-09-18 23:32:56,838] ERROR in app: Exception on / [POST] +Traceback (most recent call last): + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1486, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask_cors/extension.py", line 176, in wrapped_function + return cors_after_request(app.make_response(f(*args, **kwargs))) + ^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1484, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/miniconda3/envs/myenv/lib/python3.12/site-packages/flask/app.py", line 1469, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 129, in index + generated_text = generate_with_llm(form.input_text.data, template_id) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/renjianbo/aitsc/src/flask_prompt_master/routes/routes.py", line 53, in generate_with_llm + print("\n=== API 调用参数 ===") +OSError: [Errno 5] Input/output error +[2025-09-18 23:36:45 +0800] [18873] [INFO] Worker exiting (pid: 18873) +[2025-09-18 23:36:45 +0800] [4123] [INFO] Handling signal: term +[2025-09-18 23:36:45 +0800] [18875] [INFO] Worker exiting (pid: 18875) +[2025-09-18 23:36:45 +0800] [18874] [INFO] Worker exiting (pid: 18874) +[2025-09-18 23:36:45 +0800] [18876] [INFO] Worker exiting (pid: 18876) +[2025-09-18 23:36:45 +0800] [23602] [INFO] Worker exiting (pid: 23602) +[2025-09-18 23:36:46 +0800] [4123] [ERROR] Worker (pid:18875) exited with code 120 +[2025-09-18 23:36:46 +0800] [4123] [ERROR] Worker (pid:18875) exited with code 120. +[2025-09-18 23:36:47 +0800] [4123] [ERROR] Worker (pid:18874) exited with code 120 +[2025-09-18 23:36:47 +0800] [4123] [ERROR] Worker (pid:18874) exited with code 120. +[2025-09-18 23:36:47 +0800] [4123] [ERROR] Worker (pid:18873) exited with code 120 +[2025-09-18 23:36:47 +0800] [4123] [ERROR] Worker (pid:18873) exited with code 120. +[2025-09-18 23:36:47 +0800] [4123] [INFO] Shutting down: Master +[2025-09-18 23:38:01 +0800] [29418] [INFO] Starting gunicorn 21.2.0 +[2025-09-18 23:38:01 +0800] [29418] [INFO] Gunicorn服务器启动中... +[2025-09-18 23:38:01 +0800] [29418] [INFO] Listening at: http://0.0.0.0:5002 (29418) +[2025-09-18 23:38:01 +0800] [29418] [INFO] Using worker: sync +[2025-09-18 23:38:01 +0800] [29418] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:38:01 +0800] [29465] [INFO] Booting worker with pid: 29465 +[2025-09-18 23:38:01 +0800] [29465] [INFO] 工作进程 29465 已启动 +[2025-09-18 23:38:01 +0800] [29465] [INFO] 工作进程 29465 初始化完成 +[2025-09-18 23:38:01 +0800] [29418] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:38:01 +0800] [29466] [INFO] Booting worker with pid: 29466 +[2025-09-18 23:38:01 +0800] [29466] [INFO] 工作进程 29466 已启动 +[2025-09-18 23:38:01 +0800] [29466] [INFO] 工作进程 29466 初始化完成 +[2025-09-18 23:38:02 +0800] [29418] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:38:02 +0800] [29467] [INFO] Booting worker with pid: 29467 +[2025-09-18 23:38:02 +0800] [29467] [INFO] 工作进程 29467 已启动 +[2025-09-18 23:38:02 +0800] [29467] [INFO] 工作进程 29467 初始化完成 +[2025-09-18 23:38:02 +0800] [29418] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:38:02 +0800] [29468] [INFO] Booting worker with pid: 29468 +[2025-09-18 23:38:02 +0800] [29468] [INFO] 工作进程 29468 已启动 +[2025-09-18 23:38:02 +0800] [29468] [INFO] 工作进程 29468 初始化完成 +[2025-09-18 23:38:02 +0800] [29418] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:38:02 +0800] [29470] [INFO] Booting worker with pid: 29470 +[2025-09-18 23:38:02 +0800] [29470] [INFO] 工作进程 29470 已启动 +[2025-09-18 23:38:02 +0800] [29470] [INFO] 工作进程 29470 初始化完成 +[2025-09-18 23:42:57 +0800] [29465] [INFO] Worker exiting (pid: 29465) +[2025-09-18 23:42:57 +0800] [29418] [INFO] Handling signal: term +[2025-09-18 23:42:57 +0800] [29466] [INFO] Worker exiting (pid: 29466) +[2025-09-18 23:42:57 +0800] [29467] [INFO] Worker exiting (pid: 29467) +[2025-09-18 23:42:57 +0800] [29468] [INFO] Worker exiting (pid: 29468) +[2025-09-18 23:42:57 +0800] [29470] [INFO] Worker exiting (pid: 29470) +[2025-09-18 23:42:59 +0800] [29418] [INFO] Shutting down: Master +[2025-09-18 23:43:09 +0800] [22801] [INFO] Starting gunicorn 21.2.0 +[2025-09-18 23:43:09 +0800] [22801] [INFO] Gunicorn服务器启动中... +[2025-09-18 23:43:09 +0800] [22801] [INFO] Listening at: http://0.0.0.0:5002 (22801) +[2025-09-18 23:43:09 +0800] [22801] [INFO] Using worker: sync +[2025-09-18 23:43:09 +0800] [22801] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:43:09 +0800] [22828] [INFO] Booting worker with pid: 22828 +[2025-09-18 23:43:09 +0800] [22828] [INFO] 工作进程 22828 已启动 +[2025-09-18 23:43:09 +0800] [22828] [INFO] 工作进程 22828 初始化完成 +[2025-09-18 23:43:09 +0800] [22801] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:43:09 +0800] [22830] [INFO] Booting worker with pid: 22830 +[2025-09-18 23:43:09 +0800] [22830] [INFO] 工作进程 22830 已启动 +[2025-09-18 23:43:09 +0800] [22830] [INFO] 工作进程 22830 初始化完成 +[2025-09-18 23:43:09 +0800] [22801] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:43:09 +0800] [22831] [INFO] Booting worker with pid: 22831 +[2025-09-18 23:43:09 +0800] [22831] [INFO] 工作进程 22831 已启动 +[2025-09-18 23:43:09 +0800] [22831] [INFO] 工作进程 22831 初始化完成 +[2025-09-18 23:43:09 +0800] [22801] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:43:09 +0800] [22832] [INFO] Booting worker with pid: 22832 +[2025-09-18 23:43:09 +0800] [22832] [INFO] 工作进程 22832 已启动 +[2025-09-18 23:43:09 +0800] [22832] [INFO] 工作进程 22832 初始化完成 +[2025-09-18 23:43:09 +0800] [22801] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:43:09 +0800] [22833] [INFO] Booting worker with pid: 22833 +[2025-09-18 23:43:09 +0800] [22833] [INFO] 工作进程 22833 已启动 +[2025-09-18 23:43:09 +0800] [22833] [INFO] 工作进程 22833 初始化完成 +[2025-09-18 23:46:34 +0800] [22830] [INFO] Worker exiting (pid: 22830) +[2025-09-18 23:46:34 +0800] [22801] [INFO] Handling signal: term +[2025-09-18 23:46:34 +0800] [22828] [INFO] Worker exiting (pid: 22828) +[2025-09-18 23:46:34 +0800] [22831] [INFO] Worker exiting (pid: 22831) +[2025-09-18 23:46:34 +0800] [22832] [INFO] Worker exiting (pid: 22832) +[2025-09-18 23:46:34 +0800] [22833] [INFO] Worker exiting (pid: 22833) +[2025-09-18 23:46:36 +0800] [22801] [INFO] Shutting down: Master +[2025-09-18 23:46:47 +0800] [15746] [INFO] Starting gunicorn 21.2.0 +[2025-09-18 23:46:47 +0800] [15746] [INFO] Gunicorn服务器启动中... +[2025-09-18 23:46:47 +0800] [15746] [INFO] Listening at: http://0.0.0.0:5002 (15746) +[2025-09-18 23:46:47 +0800] [15746] [INFO] Using worker: sync +[2025-09-18 23:46:47 +0800] [15746] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:46:47 +0800] [15760] [INFO] Booting worker with pid: 15760 +[2025-09-18 23:46:47 +0800] [15760] [INFO] 工作进程 15760 已启动 +[2025-09-18 23:46:47 +0800] [15760] [INFO] 工作进程 15760 初始化完成 +[2025-09-18 23:46:47 +0800] [15746] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:46:47 +0800] [15761] [INFO] Booting worker with pid: 15761 +[2025-09-18 23:46:47 +0800] [15761] [INFO] 工作进程 15761 已启动 +[2025-09-18 23:46:47 +0800] [15761] [INFO] 工作进程 15761 初始化完成 +[2025-09-18 23:46:47 +0800] [15746] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:46:47 +0800] [15762] [INFO] Booting worker with pid: 15762 +[2025-09-18 23:46:47 +0800] [15762] [INFO] 工作进程 15762 已启动 +[2025-09-18 23:46:47 +0800] [15762] [INFO] 工作进程 15762 初始化完成 +[2025-09-18 23:46:47 +0800] [15746] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:46:47 +0800] [15763] [INFO] Booting worker with pid: 15763 +[2025-09-18 23:46:47 +0800] [15763] [INFO] 工作进程 15763 已启动 +[2025-09-18 23:46:47 +0800] [15763] [INFO] 工作进程 15763 初始化完成 +[2025-09-18 23:46:47 +0800] [15746] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:46:47 +0800] [15764] [INFO] Booting worker with pid: 15764 +[2025-09-18 23:46:47 +0800] [15764] [INFO] 工作进程 15764 已启动 +[2025-09-18 23:46:47 +0800] [15764] [INFO] 工作进程 15764 初始化完成 +[2025-09-18 23:58:26 +0800] [15760] [INFO] Worker exiting (pid: 15760) +[2025-09-18 23:58:26 +0800] [15746] [INFO] Handling signal: term +[2025-09-18 23:58:26 +0800] [15761] [INFO] Worker exiting (pid: 15761) +[2025-09-18 23:58:26 +0800] [15762] [INFO] Worker exiting (pid: 15762) +[2025-09-18 23:58:26 +0800] [15763] [INFO] Worker exiting (pid: 15763) +[2025-09-18 23:58:26 +0800] [15764] [INFO] Worker exiting (pid: 15764) +[2025-09-18 23:58:27 +0800] [15746] [INFO] Shutting down: Master +[2025-09-18 23:58:37 +0800] [3055] [INFO] Starting gunicorn 21.2.0 +[2025-09-18 23:58:37 +0800] [3055] [INFO] Gunicorn服务器启动中... +[2025-09-18 23:58:37 +0800] [3055] [INFO] Listening at: http://0.0.0.0:5002 (3055) +[2025-09-18 23:58:37 +0800] [3055] [INFO] Using worker: sync +[2025-09-18 23:58:37 +0800] [3055] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:58:37 +0800] [3074] [INFO] Booting worker with pid: 3074 +[2025-09-18 23:58:37 +0800] [3074] [INFO] 工作进程 3074 已启动 +[2025-09-18 23:58:37 +0800] [3074] [INFO] 工作进程 3074 初始化完成 +[2025-09-18 23:58:38 +0800] [3055] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:58:38 +0800] [3075] [INFO] Booting worker with pid: 3075 +[2025-09-18 23:58:38 +0800] [3075] [INFO] 工作进程 3075 已启动 +[2025-09-18 23:58:38 +0800] [3075] [INFO] 工作进程 3075 初始化完成 +[2025-09-18 23:58:38 +0800] [3055] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:58:38 +0800] [3076] [INFO] Booting worker with pid: 3076 +[2025-09-18 23:58:38 +0800] [3076] [INFO] 工作进程 3076 已启动 +[2025-09-18 23:58:38 +0800] [3076] [INFO] 工作进程 3076 初始化完成 +[2025-09-18 23:58:38 +0800] [3055] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:58:38 +0800] [3077] [INFO] Booting worker with pid: 3077 +[2025-09-18 23:58:38 +0800] [3077] [INFO] 工作进程 3077 已启动 +[2025-09-18 23:58:38 +0800] [3077] [INFO] 工作进程 3077 初始化完成 +[2025-09-18 23:58:38 +0800] [3055] [INFO] 工作进程 [booting] 即将启动 +[2025-09-18 23:58:38 +0800] [3078] [INFO] Booting worker with pid: 3078 +[2025-09-18 23:58:38 +0800] [3078] [INFO] 工作进程 3078 已启动 +[2025-09-18 23:58:38 +0800] [3078] [INFO] 工作进程 3078 初始化完成 diff --git a/src/flask_prompt_master/__init__.py b/src/flask_prompt_master/__init__.py index adc5062..5592ddd 100644 --- a/src/flask_prompt_master/__init__.py +++ b/src/flask_prompt_master/__init__.py @@ -56,6 +56,10 @@ def create_app(config_class=None): from src.flask_prompt_master.routes.meal_planning import meal_planning_bp app.register_blueprint(meal_planning_bp) + # 注册古诗词解析蓝图 + from src.flask_prompt_master.routes.poetry import poetry_bp + app.register_blueprint(poetry_bp) + # 初始化后台管理 from src.flask_prompt_master.admin import init_admin init_admin(app) diff --git a/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc b/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc index f2a5d0a..fb58a59 100644 Binary files a/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc and b/src/flask_prompt_master/__pycache__/__init__.cpython-312.pyc differ diff --git a/src/flask_prompt_master/__pycache__/__init__.cpython-313.pyc b/src/flask_prompt_master/__pycache__/__init__.cpython-313.pyc index 5577de1..a46981b 100644 Binary files a/src/flask_prompt_master/__pycache__/__init__.cpython-313.pyc and b/src/flask_prompt_master/__pycache__/__init__.cpython-313.pyc differ diff --git a/src/flask_prompt_master/models/__pycache__/poetry_favorites.cpython-312.pyc b/src/flask_prompt_master/models/__pycache__/poetry_favorites.cpython-312.pyc new file mode 100644 index 0000000..f539993 Binary files /dev/null and b/src/flask_prompt_master/models/__pycache__/poetry_favorites.cpython-312.pyc differ diff --git a/src/flask_prompt_master/models/poetry_favorites.py b/src/flask_prompt_master/models/poetry_favorites.py new file mode 100644 index 0000000..c57d792 --- /dev/null +++ b/src/flask_prompt_master/models/poetry_favorites.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +from datetime import datetime +from src.flask_prompt_master import db + +class PoetryFavorite(db.Model): + """古诗词收藏表""" + __tablename__ = 'poetry_favorites' + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + user_id = db.Column(db.String(50), nullable=False, comment='用户ID(可以是IP或session_id)') + + # 古诗词基本信息 + poetry_title = db.Column(db.String(200), nullable=False, comment='诗词标题') + author = db.Column(db.String(100), nullable=False, comment='作者姓名') + dynasty = db.Column(db.String(50), nullable=True, comment='朝代') + + # 解析参数 + translation_style = db.Column(db.String(100), nullable=True, comment='翻译风格') + interpretation_depth = db.Column(db.String(100), nullable=True, comment='解读深度') + purpose = db.Column(db.String(100), nullable=True, comment='使用目的') + target_audience = db.Column(db.String(100), nullable=True, comment='目标读者') + translation_quality = db.Column(db.String(100), nullable=True, comment='译文质量') + annotation_detail = db.Column(db.String(100), nullable=True, comment='注释详细程度') + interpretation_level = db.Column(db.String(100), nullable=True, comment='解读层次') + + # 解析结果 + original_text = db.Column(db.Text, nullable=True, comment='原文内容') + analysis_result = db.Column(db.Text, nullable=False, comment='AI解析结果') + + # 用户信息 + notes = db.Column(db.Text, nullable=True, comment='用户备注') + tags = db.Column(db.String(500), nullable=True, comment='标签(JSON格式)') + + # 时间信息 + created_time = db.Column(db.DateTime, default=datetime.now, comment='创建时间') + updated_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间') + + def to_dict(self): + """转换为字典""" + return { + 'id': self.id, + 'poetry_title': self.poetry_title, + 'author': self.author, + 'dynasty': self.dynasty, + 'translation_style': self.translation_style, + 'interpretation_depth': self.interpretation_depth, + 'purpose': self.purpose, + 'target_audience': self.target_audience, + 'translation_quality': self.translation_quality, + 'annotation_detail': self.annotation_detail, + 'interpretation_level': self.interpretation_level, + 'original_text': self.original_text, + 'analysis_result': self.analysis_result, + 'notes': self.notes, + 'tags': self.tags, + 'created_time': self.created_time.strftime('%Y-%m-%d %H:%M:%S') if self.created_time else None, + 'updated_time': self.updated_time.strftime('%Y-%m-%d %H:%M:%S') if self.updated_time else None + } + + def to_summary_dict(self): + """转换为摘要字典(用于列表显示)""" + return { + 'id': self.id, + 'poetry_title': self.poetry_title, + 'author': self.author, + 'dynasty': self.dynasty, + 'purpose': self.purpose, + 'target_audience': self.target_audience, + 'notes': self.notes, + 'created_time': self.created_time.strftime('%Y-%m-%d %H:%M:%S') if self.created_time else None + } diff --git a/src/flask_prompt_master/routes/__pycache__/poetry.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/poetry.cpython-312.pyc new file mode 100644 index 0000000..cb22fdb Binary files /dev/null and b/src/flask_prompt_master/routes/__pycache__/poetry.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc b/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc index 77f3a0a..c1eeb02 100644 Binary files a/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc and b/src/flask_prompt_master/routes/__pycache__/routes.cpython-312.pyc differ diff --git a/src/flask_prompt_master/routes/poetry.py b/src/flask_prompt_master/routes/poetry.py new file mode 100644 index 0000000..a2a1c4d --- /dev/null +++ b/src/flask_prompt_master/routes/poetry.py @@ -0,0 +1,415 @@ +# -*- coding: utf-8 -*- +""" +古诗词查询与解析路由 +""" +from flask import Blueprint, render_template, request, jsonify, flash, current_app +from flask_login import login_required, current_user +import requests +import json +import logging +import time +from typing import Dict, Any, Optional +from src.flask_prompt_master.services.poetry_favorite_service import PoetryFavoriteService + +# 配置日志 +logger = logging.getLogger(__name__) + +# 创建蓝图 +poetry_bp = Blueprint('poetry', __name__, url_prefix='/poetry') + +# 配置API +SK_API_KEY = "sk-fdf7cc1c73504e628ec0119b7e11b8cc" + +def generate_poetry_analysis(poetry_title, author, dynasty, translation_style, + interpretation_depth, purpose, target_audience, + translation_quality, annotation_detail, interpretation_level, max_retries=3): + """ + 使用AI模型生成古诗词解析 + + Args: + poetry_title: 古诗词标题 + author: 作者姓名 + dynasty: 朝代 + translation_style: 翻译风格 + interpretation_depth: 解读深度 + purpose: 使用目的 + target_audience: 目标读者 + translation_quality: 译文质量要求 + annotation_detail: 注释详细程度 + interpretation_level: 解读层次 + max_retries: 最大重试次数 + + Returns: + str: AI生成的古诗词解析 + """ + for attempt in range(max_retries): + try: + logger.info(f"开始生成古诗词AI解析 (尝试 {attempt + 1}/{max_retries})") + + # 构建提示词 + system_prompt = f"""你是一位专业的古典文学专家和古诗词翻译家,精通中国古代诗词的文学价值、历史背景、文化内涵和艺术特色。你擅长将古典诗词翻译成现代汉语,既保持原诗的意境和美感,又让现代读者容易理解。你能够提供准确、优美、富有诗意的现代译文,并配以详细的注释和深入的解读。 + +背景信息:这首诗词将用于{purpose},目标读者是{target_audience}。请确保译文{translation_quality},注释{annotation_detail},解读{interpretation_level}。 + +约束条件: +1. 提供准确的原文内容,确保字词无误 +2. 现代译文要优美流畅,保持原诗的意境和美感 +3. 注释要详细准确,包含字词解释、典故出处、历史背景 +4. 解读要深入浅出,适合{target_audience}理解 +5. 译文要符合现代汉语表达习惯,避免生硬直译 +6. 如果找不到指定诗词,要提供相似作品或说明原因 + +输出格式要求: +1. 使用标准Markdown格式 +2. 标题使用 # ## ### 层级结构 +3. 重要内容使用 **粗体** 强调 +4. 列表使用 - 或 1. 格式 +5. 代码或特殊内容使用 `代码块` 格式 +6. 确保格式清晰,便于阅读和复制 + +请严格按照Markdown格式输出:""" + + user_prompt = f"""请根据提供的古诗词信息,查找并提供完整的诗词内容、现代译文、详细注释和深度解读: + +诗词标题:{poetry_title} +作者:{author} +朝代:{dynasty} +翻译要求:{translation_style} +解读深度:{interpretation_depth} + +请提供完整的古诗词解析,包括原文、译文、注释和解读。""" + + # 构建消息 + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt} + ] + + logger.info("发送请求到DeepSeek API") + + # 发送请求 + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {SK_API_KEY}" + } + + data = { + "model": "deepseek-chat", + "messages": messages, + "temperature": 0.7, + "max_tokens": 2000 # 增加token限制以支持更长的古诗词解析 + } + + response = requests.post("https://api.deepseek.com/v1/chat/completions", + headers=headers, json=data, timeout=60) # 增加超时时间 + response.raise_for_status() + + result = response.json()["choices"][0]["message"]["content"] + + logger.info("古诗词AI解析生成成功") + return result + + except requests.exceptions.Timeout as e: + logger.warning(f"API请求超时 (尝试 {attempt + 1}/{max_retries}): {e}") + if attempt == max_retries - 1: + raise Exception(f"古诗词解析生成失败: API请求多次超时") + time.sleep(2 ** attempt) # 指数退避 + continue + + except requests.exceptions.RequestException as e: + logger.warning(f"API请求异常 (尝试 {attempt + 1}/{max_retries}): {e}") + if attempt == max_retries - 1: + raise Exception(f"古诗词解析生成失败: API请求异常 - {e}") + time.sleep(2 ** attempt) # 指数退避 + continue + + except Exception as e: + logger.error(f"生成古诗词AI解析时出错 (尝试 {attempt + 1}/{max_retries}): {e}") + if attempt == max_retries - 1: + raise Exception(f"古诗词解析生成失败: {e}") + time.sleep(2 ** attempt) # 指数退避 + continue + +@poetry_bp.route('/') +def poetry_page(): + """古诗词查询与解析页面""" + return render_template('poetry/poetry_page.html') + +@poetry_bp.route('/analyze', methods=['POST']) +def analyze_poetry(): + """分析古诗词""" + try: + data = request.get_json() + + # 获取表单数据 + poetry_title = data.get('poetry_title', '').strip() + author = data.get('author', '').strip() + dynasty = data.get('dynasty', '').strip() + translation_style = data.get('translation_style', '优美流畅') + interpretation_depth = data.get('interpretation_depth', '深入浅出') + purpose = data.get('purpose', '学习欣赏') + target_audience = data.get('target_audience', '一般读者') + translation_quality = data.get('translation_quality', '高质量') + annotation_detail = data.get('annotation_detail', '详细准确') + interpretation_level = data.get('interpretation_level', '深入浅出') + + # 验证必填字段 + if not poetry_title: + return jsonify({ + 'success': False, + 'message': '请输入诗词标题' + }) + + if not author: + return jsonify({ + 'success': False, + 'message': '请输入作者姓名' + }) + + # 生成古诗词解析 + result = generate_poetry_analysis( + poetry_title=poetry_title, + author=author, + dynasty=dynasty, + translation_style=translation_style, + interpretation_depth=interpretation_depth, + purpose=purpose, + target_audience=target_audience, + translation_quality=translation_quality, + annotation_detail=annotation_detail, + interpretation_level=interpretation_level + ) + + return jsonify({ + 'success': True, + 'result': result, + 'poetry_info': { + 'title': poetry_title, + 'author': author, + 'dynasty': dynasty + } + }) + + except Exception as e: + logger.error(f"古诗词分析失败: {e}") + + # 根据错误类型提供更友好的错误信息 + error_message = str(e) + if "超时" in error_message or "timeout" in error_message.lower(): + user_message = "网络连接超时,请稍后重试。如果问题持续存在,可能是服务器繁忙,请稍后再试。" + elif "API" in error_message or "api" in error_message.lower(): + user_message = "AI服务暂时不可用,请稍后重试。" + elif "解析" in error_message: + user_message = "古诗词解析服务暂时不可用,请稍后重试。" + else: + user_message = "古诗词分析失败,请检查输入信息后重试。" + + return jsonify({ + 'success': False, + 'message': user_message, + 'error_detail': error_message if current_app.debug else None + }) + +@poetry_bp.route('/examples') +def poetry_examples(): + """古诗词示例页面""" + examples = [ + { + 'title': '静夜思', + 'author': '李白', + 'dynasty': '唐', + 'description': '思乡怀人之作,语言简洁,意境深远' + }, + { + 'title': '春晓', + 'author': '孟浩然', + 'dynasty': '唐', + 'description': '描写春天早晨的景色,清新自然' + }, + { + 'title': '水调歌头·明月几时有', + 'author': '苏轼', + 'dynasty': '宋', + 'description': '中秋怀人之作,豪放洒脱,富有哲理' + }, + { + 'title': '登高', + 'author': '杜甫', + 'dynasty': '唐', + 'description': '登高望远,抒发人生感慨' + } + ] + + return render_template('poetry/poetry_examples.html', examples=examples) + +@poetry_bp.route('/favorites') +def poetry_favorites(): + """古诗词收藏列表页面""" + return render_template('poetry/poetry_favorites.html') + +@poetry_bp.route('/favorites/add', methods=['POST']) +def add_poetry_favorite(): + """添加古诗词收藏""" + try: + data = request.get_json() + + # 验证必填字段 + required_fields = ['poetry_title', 'author', 'analysis_result'] + for field in required_fields: + if not data.get(field): + return jsonify({ + 'success': False, + 'message': f'缺少必填字段: {field}' + }) + + # 添加收藏 + result = PoetryFavoriteService.add_favorite(request, data) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 400 + + except Exception as e: + logger.error(f"添加古诗词收藏失败: {e}") + return jsonify({ + 'success': False, + 'message': f'添加收藏失败: {str(e)}' + }), 500 + +@poetry_bp.route('/favorites/list', methods=['GET']) +def get_poetry_favorites(): + """获取古诗词收藏列表""" + try: + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + search = request.args.get('search', '') + dynasty = request.args.get('dynasty', '') + author = request.args.get('author', '') + + result = PoetryFavoriteService.get_favorites( + request, page, per_page, search, dynasty, author + ) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 400 + + except Exception as e: + logger.error(f"获取古诗词收藏列表失败: {e}") + return jsonify({ + 'success': False, + 'message': f'获取收藏列表失败: {str(e)}' + }), 500 + +@poetry_bp.route('/favorites/', methods=['GET']) +def get_poetry_favorite_detail(favorite_id): + """获取古诗词收藏详情""" + try: + result = PoetryFavoriteService.get_favorite_by_id(request, favorite_id) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 404 + + except Exception as e: + logger.error(f"获取古诗词收藏详情失败: {e}") + return jsonify({ + 'success': False, + 'message': f'获取收藏详情失败: {str(e)}' + }), 500 + +@poetry_bp.route('/favorites/', methods=['PUT']) +def update_poetry_favorite(favorite_id): + """更新古诗词收藏""" + try: + data = request.get_json() + + result = PoetryFavoriteService.update_favorite( + request, favorite_id, + data.get('notes'), data.get('tags') + ) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 400 + + except Exception as e: + logger.error(f"更新古诗词收藏失败: {e}") + return jsonify({ + 'success': False, + 'message': f'更新收藏失败: {str(e)}' + }), 500 + +@poetry_bp.route('/favorites/', methods=['DELETE']) +def delete_poetry_favorite(favorite_id): + """删除古诗词收藏""" + try: + result = PoetryFavoriteService.delete_favorite(request, favorite_id) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 400 + + except Exception as e: + logger.error(f"删除古诗词收藏失败: {e}") + return jsonify({ + 'success': False, + 'message': f'删除收藏失败: {str(e)}' + }), 500 + +@poetry_bp.route('/favorites/stats', methods=['GET']) +def get_poetry_favorite_stats(): + """获取古诗词收藏统计信息""" + try: + result = PoetryFavoriteService.get_favorite_stats(request) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 400 + + except Exception as e: + logger.error(f"获取古诗词收藏统计失败: {e}") + return jsonify({ + 'success': False, + 'message': f'获取统计信息失败: {str(e)}' + }), 500 + +@poetry_bp.route('/favorites/check', methods=['POST']) +def check_poetry_favorite_status(): + """检查古诗词收藏状态""" + try: + data = request.get_json() + + required_fields = ['poetry_title', 'author', 'analysis_result'] + for field in required_fields: + if not data.get(field): + return jsonify({ + 'success': False, + 'message': f'缺少必填字段: {field}' + }) + + result = PoetryFavoriteService.check_favorite_status( + request, + data['poetry_title'], + data['author'], + data['analysis_result'] + ) + + if result['success']: + return jsonify(result) + else: + return jsonify(result), 400 + + except Exception as e: + logger.error(f"检查古诗词收藏状态失败: {e}") + return jsonify({ + 'success': False, + 'message': f'检查收藏状态失败: {str(e)}' + }), 500 + diff --git a/src/flask_prompt_master/routes/routes.py b/src/flask_prompt_master/routes/routes.py index 9a0dda0..09a3de2 100644 --- a/src/flask_prompt_master/routes/routes.py +++ b/src/flask_prompt_master/routes/routes.py @@ -10,6 +10,10 @@ import requests import hashlib import time import json +import logging + +# 配置日志 +logger = logging.getLogger(__name__) main_bp = Blueprint('main', __name__) @@ -49,12 +53,12 @@ def generate_with_llm(input_text, template_id=None, max_retries=3): system_prompt = get_system_prompt(template_id) - # 打印参数 - print("\n=== API 调用参数 ===") - print(f"模板ID: {template_id}") - print(f"输入文本: {input_text}") - print(f"系统提示: {system_prompt}") - print("==================\n") + # 记录参数到日志 + logger.info("=== API 调用参数 ===") + logger.info(f"模板ID: {template_id}") + logger.info(f"输入文本: {input_text}") + logger.info(f"系统提示: {system_prompt}") + logger.info("==================") for attempt in range(max_retries): try: diff --git a/src/flask_prompt_master/services/__pycache__/poetry_favorite_service.cpython-312.pyc b/src/flask_prompt_master/services/__pycache__/poetry_favorite_service.cpython-312.pyc new file mode 100644 index 0000000..d8dca50 Binary files /dev/null and b/src/flask_prompt_master/services/__pycache__/poetry_favorite_service.cpython-312.pyc differ diff --git a/src/flask_prompt_master/services/poetry_favorite_service.py b/src/flask_prompt_master/services/poetry_favorite_service.py new file mode 100644 index 0000000..0be27f7 --- /dev/null +++ b/src/flask_prompt_master/services/poetry_favorite_service.py @@ -0,0 +1,250 @@ +# -*- coding: utf-8 -*- +import json +from datetime import datetime +from src.flask_prompt_master import db +from src.flask_prompt_master.models.poetry_favorites import PoetryFavorite + +class PoetryFavoriteService: + """古诗词收藏服务类""" + + @staticmethod + def get_user_id(request): + """获取用户ID""" + from flask import session + + # 优先使用登录用户的ID + if 'user_id' in session: + return str(session['user_id']) + + # 如果没有登录,使用IP地址作为临时用户ID + return request.remote_addr + + @staticmethod + def add_favorite(request, poetry_data): + """添加古诗词收藏""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + + # 检查是否已存在相同的收藏 + existing = PoetryFavorite.query.filter_by( + user_id=user_id, + poetry_title=poetry_data['poetry_title'], + author=poetry_data['author'], + analysis_result=poetry_data['analysis_result'] + ).first() + + if existing: + return {'success': False, 'message': '该古诗词解析已收藏'} + + # 处理标签 + tags = poetry_data.get('tags') + if tags and isinstance(tags, list): + tags = json.dumps(tags, ensure_ascii=False) + + favorite = PoetryFavorite( + user_id=user_id, + poetry_title=poetry_data['poetry_title'], + author=poetry_data['author'], + dynasty=poetry_data.get('dynasty'), + translation_style=poetry_data.get('translation_style'), + interpretation_depth=poetry_data.get('interpretation_depth'), + purpose=poetry_data.get('purpose'), + target_audience=poetry_data.get('target_audience'), + translation_quality=poetry_data.get('translation_quality'), + annotation_detail=poetry_data.get('annotation_detail'), + interpretation_level=poetry_data.get('interpretation_level'), + original_text=poetry_data.get('original_text'), + analysis_result=poetry_data['analysis_result'], + notes=poetry_data.get('notes'), + tags=tags + ) + + db.session.add(favorite) + db.session.commit() + + return {'success': True, 'message': '收藏成功', 'id': favorite.id} + + except Exception as e: + db.session.rollback() + return {'success': False, 'message': f'收藏失败: {str(e)}'} + + @staticmethod + def get_favorites(request, page=1, per_page=10, search=None, dynasty=None, author=None): + """获取古诗词收藏列表""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + query = PoetryFavorite.query.filter_by(user_id=user_id) + + # 搜索功能 + if search: + query = query.filter( + db.or_( + PoetryFavorite.poetry_title.contains(search), + PoetryFavorite.author.contains(search), + PoetryFavorite.analysis_result.contains(search), + PoetryFavorite.notes.contains(search) + ) + ) + + # 朝代筛选 + if dynasty and dynasty != 'all': + query = query.filter_by(dynasty=dynasty) + + # 作者筛选 + if author and author != 'all': + query = query.filter_by(author=author) + + # 按时间倒序排列 + query = query.order_by(PoetryFavorite.created_time.desc()) + + # 分页 + pagination = query.paginate( + page=page, + per_page=per_page, + error_out=False + ) + + favorites = [favorite.to_summary_dict() for favorite in pagination.items] + + return { + 'success': True, + 'data': favorites, + 'total': pagination.total, + 'pages': pagination.pages, + 'current_page': page, + 'has_prev': pagination.has_prev, + 'has_next': pagination.has_next + } + + except Exception as e: + return {'success': False, 'message': f'获取收藏失败: {str(e)}'} + + @staticmethod + def get_favorite_by_id(request, favorite_id): + """根据ID获取古诗词收藏详情""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + favorite = PoetryFavorite.query.filter_by( + id=favorite_id, + user_id=user_id + ).first() + + if not favorite: + return {'success': False, 'message': '收藏不存在'} + + return {'success': True, 'data': favorite.to_dict()} + + except Exception as e: + return {'success': False, 'message': f'获取收藏详情失败: {str(e)}'} + + @staticmethod + def update_favorite(request, favorite_id, notes=None, tags=None): + """更新古诗词收藏""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + favorite = PoetryFavorite.query.filter_by( + id=favorite_id, + user_id=user_id + ).first() + + if not favorite: + return {'success': False, 'message': '收藏不存在'} + + if notes is not None: + favorite.notes = notes + + if tags is not None: + if isinstance(tags, list): + tags = json.dumps(tags, ensure_ascii=False) + favorite.tags = tags + + favorite.updated_time = datetime.now() + db.session.commit() + + return {'success': True, 'message': '更新成功'} + + except Exception as e: + db.session.rollback() + return {'success': False, 'message': f'更新失败: {str(e)}'} + + @staticmethod + def delete_favorite(request, favorite_id): + """删除古诗词收藏""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + favorite = PoetryFavorite.query.filter_by( + id=favorite_id, + user_id=user_id + ).first() + + if not favorite: + return {'success': False, 'message': '收藏不存在'} + + db.session.delete(favorite) + db.session.commit() + + return {'success': True, 'message': '删除成功'} + + except Exception as e: + db.session.rollback() + return {'success': False, 'message': f'删除失败: {str(e)}'} + + @staticmethod + def get_favorite_stats(request): + """获取古诗词收藏统计信息""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + + # 总收藏数 + total_count = PoetryFavorite.query.filter_by(user_id=user_id).count() + + # 朝代统计 + dynasty_stats = db.session.query( + PoetryFavorite.dynasty, + db.func.count(PoetryFavorite.id) + ).filter_by(user_id=user_id).group_by(PoetryFavorite.dynasty).all() + + # 作者统计 + author_stats = db.session.query( + PoetryFavorite.author, + db.func.count(PoetryFavorite.id) + ).filter_by(user_id=user_id).group_by(PoetryFavorite.author).all() + + # 最近收藏 + recent_favorites = PoetryFavorite.query.filter_by(user_id=user_id)\ + .order_by(PoetryFavorite.created_time.desc())\ + .limit(5).all() + + return { + 'success': True, + 'data': { + 'total_count': total_count, + 'dynasty_stats': dict(dynasty_stats), + 'author_stats': dict(author_stats), + 'recent_favorites': [f.to_summary_dict() for f in recent_favorites] + } + } + + except Exception as e: + return {'success': False, 'message': f'获取统计信息失败: {str(e)}'} + + @staticmethod + def check_favorite_status(request, poetry_title, author, analysis_result): + """检查古诗词是否已收藏""" + try: + user_id = PoetryFavoriteService.get_user_id(request) + favorite = PoetryFavorite.query.filter_by( + user_id=user_id, + poetry_title=poetry_title, + author=author, + analysis_result=analysis_result + ).first() + + return { + 'success': True, + 'is_favorited': favorite is not None, + 'favorite_id': favorite.id if favorite else None + } + + except Exception as e: + return {'success': False, 'message': f'检查收藏状态失败: {str(e)}'} diff --git a/src/flask_prompt_master/static/css/style.css b/src/flask_prompt_master/static/css/style.css index 60764b3..c868372 100644 --- a/src/flask_prompt_master/static/css/style.css +++ b/src/flask_prompt_master/static/css/style.css @@ -32,6 +32,68 @@ nav a:hover { text-decoration: underline; } +/* 功能卡片样式 */ +.features { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 30px; + margin: 40px 0; +} + +.feature { + background: white; + padding: 30px; + border-radius: 15px; + box-shadow: 0 10px 30px rgba(0,0,0,0.1); + text-align: center; + transition: all 0.3s ease; + border: 1px solid #e1e5e9; +} + +.feature:hover { + transform: translateY(-5px); + box-shadow: 0 20px 40px rgba(0,0,0,0.15); +} + +.feature h2 { + color: #2c3e50; + margin-bottom: 15px; + font-size: 1.5rem; + display: flex; + align-items: center; + justify-content: center; + gap: 10px; +} + +.feature h2 i { + color: #3498db; + font-size: 1.3rem; +} + +.feature p { + color: #666; + margin-bottom: 20px; + line-height: 1.6; +} + +.feature-link { + display: inline-block; + background: linear-gradient(135deg, #3498db, #2980b9); + color: white; + padding: 12px 24px; + border-radius: 25px; + text-decoration: none; + font-weight: 600; + transition: all 0.3s ease; +} + +.feature-link:hover { + transform: translateY(-2px); + box-shadow: 0 10px 25px rgba(52, 152, 219, 0.3); + color: white; + text-decoration: none; +} + /* 表单样式 */ .form-group { margin-bottom: 1rem; diff --git a/src/flask_prompt_master/templates/base.html b/src/flask_prompt_master/templates/base.html index 5c8b177..0210576 100644 --- a/src/flask_prompt_master/templates/base.html +++ b/src/flask_prompt_master/templates/base.html @@ -258,6 +258,14 @@ 饭菜规划 + + + 古诗词解析 + + + + 古诗词收藏 + 我的规划 diff --git a/src/flask_prompt_master/templates/index.html b/src/flask_prompt_master/templates/index.html index d6a4bdd..b0e5aaf 100644 --- a/src/flask_prompt_master/templates/index.html +++ b/src/flask_prompt_master/templates/index.html @@ -11,16 +11,19 @@
-

用户友好

-

简洁直观的界面设计,轻松上手

+

饭菜规划

+

AI智能规划每日饭菜,营养搭配更科学

+ 开始规划
-

持续优化

-

通过用户反馈不断改进提示词质量

+

古诗词解析

+

探索中华古典诗词之美,AI智能解析助您深入理解

+ 开始解析
{% endblock %} \ No newline at end of file diff --git a/src/flask_prompt_master/templates/poetry/poetry_examples.html b/src/flask_prompt_master/templates/poetry/poetry_examples.html new file mode 100644 index 0000000..fa1e2f7 --- /dev/null +++ b/src/flask_prompt_master/templates/poetry/poetry_examples.html @@ -0,0 +1,243 @@ +{% extends "base.html" %} + +{% block title %}古诗词示例{% endblock %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} +
+
+

古诗词示例

+

点击下方示例,快速体验古诗词解析功能

+
+ +
+ {% for example in examples %} +
+
+ + {{ example.title }} +
+
{{ example.author }}
+
{{ example.dynasty }}代
+
{{ example.description }}
+ +
+ {% endfor %} +
+ + +
+{% endblock %} + +{% block extra_js %} + +{% endblock %} + diff --git a/src/flask_prompt_master/templates/poetry/poetry_favorites.html b/src/flask_prompt_master/templates/poetry/poetry_favorites.html new file mode 100644 index 0000000..986ebe8 --- /dev/null +++ b/src/flask_prompt_master/templates/poetry/poetry_favorites.html @@ -0,0 +1,565 @@ +{% extends "base.html" %} + +{% block title %}古诗词收藏{% endblock %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} +
+
+

古诗词收藏

+

管理您收藏的古诗词解析,随时查阅经典作品

+
+ +
+ +
+ + + + +
+ + +
+
+
+

正在加载收藏列表...

+
+
+ + + +
+
+ + + +{% endblock %} + +{% block extra_js %} + +{% endblock %} diff --git a/src/flask_prompt_master/templates/poetry/poetry_page.html b/src/flask_prompt_master/templates/poetry/poetry_page.html new file mode 100644 index 0000000..7f76fcc --- /dev/null +++ b/src/flask_prompt_master/templates/poetry/poetry_page.html @@ -0,0 +1,948 @@ +{% extends "base.html" %} + +{% block title %}古诗词查询与解析{% endblock %} + +{% block extra_css %} + +{% endblock %} + +{% block content %} +
+
+

古诗词查询与解析

+

探索中华古典诗词之美,AI智能解析助您深入理解

+
+ +
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+
+ +
+
+

解析结果

+
+ + + +
+
+
+
+ + +
+{% endblock %} + +{% block extra_js %} + +{% endblock %} + diff --git a/test_copy_function.html b/test_copy_function.html new file mode 100644 index 0000000..38a29d3 --- /dev/null +++ b/test_copy_function.html @@ -0,0 +1,159 @@ + + + + + + 复制功能测试 + + + +

复制功能测试页面

+ +
+

测试内容

+

这是一个测试复制功能的页面。

+

粗体文本斜体文本

+
    +
  • 列表项 1
  • +
  • 列表项 2
  • +
+
+ + + +
+ + + + diff --git a/古诗词功能部署报告.md b/古诗词功能部署报告.md new file mode 100644 index 0000000..92f9853 --- /dev/null +++ b/古诗词功能部署报告.md @@ -0,0 +1,180 @@ +# 古诗词查询与解析功能部署完成报告 + +## 🎉 **部署状态:成功完成** + +**部署时间**:2025年9月14日 +**功能名称**:古诗词查询与解析 +**服务状态**:✅ 已集成到主系统 + +--- + +## 📋 **功能概述** + +古诗词查询与解析功能是一个基于AI的智能古诗词分析工具,能够: +- 根据诗词标题和作者信息查询古诗词 +- 提供现代汉语译文 +- 生成详细的注释和解读 +- 支持多种翻译风格和解读深度 +- 适配不同目标读者群体 + +--- + +## ✅ **已实现功能** + +### 1. **核心功能模块** +- ✅ 古诗词查询与解析页面 +- ✅ AI智能解析服务 +- ✅ 古诗词示例展示 +- ✅ 多种解析参数配置 + +### 2. **用户界面** +- ✅ 现代化渐变设计风格 +- ✅ 响应式布局适配各种设备 +- ✅ 直观的表单设计 +- ✅ 实时加载反馈 + +### 3. **功能特性** +- ✅ 支持多种翻译风格(优美流畅、忠实原文、现代口语、诗意盎然) +- ✅ 多种解读深度(深入浅出、学术严谨、通俗易懂、专业详细) +- ✅ 多种使用目的(学习欣赏、教学研究、文学创作、文化传承) +- ✅ 多种目标读者(一般读者、学生群体、文学爱好者、专业研究者) + +### 4. **用户体验** +- ✅ 一键复制解析结果 +- ✅ 古诗词示例快速体验 +- ✅ 友好的错误提示 +- ✅ 流畅的动画效果 + +--- + +## 🔧 **技术实现详情** + +### 后端实现 +```python +# 古诗词解析路由 +@poetry_bp.route('/analyze', methods=['POST']) +def analyze_poetry(): + """分析古诗词""" + # AI解析逻辑 + result = generate_poetry_analysis(...) + return jsonify({'success': True, 'result': result}) +``` + +### 前端实现 +- **现代化UI设计**:渐变背景 + 卡片式布局 +- **响应式设计**:适配桌面端和移动端 +- **交互优化**:实时反馈 + 加载动画 +- **功能完整**:表单验证 + 结果展示 + 复制功能 + +### AI服务集成 +- **API调用**:DeepSeek API +- **提示词工程**:专业的古诗词解析提示词 +- **错误处理**:完善的异常处理机制 +- **超时控制**:30秒请求超时 + +--- + +## 🌐 **访问地址** + +### 主要功能页面 +- **古诗词解析**:`http://101.43.95.130:5002/poetry/` +- **古诗词示例**:`http://101.43.95.130:5002/poetry/examples` + +### 导航入口 +- **主导航菜单**:古诗词解析 +- **主页功能卡片**:古诗词解析 +- **快速访问**:从示例页面直接跳转 + +--- + +## 📁 **文件结构** + +``` +src/flask_prompt_master/ +├── routes/ +│ └── poetry.py # 古诗词路由模块 +├── templates/ +│ └── poetry/ +│ ├── poetry_page.html # 主解析页面 +│ └── poetry_examples.html # 示例展示页面 +└── __init__.py # 已注册poetry_bp蓝图 +``` + +--- + +## 🎯 **功能特色** + +### 1. **智能解析** +- 基于DeepSeek大模型的古诗词解析 +- 专业的古典文学专家角色设定 +- 多维度参数配置 + +### 2. **用户友好** +- 直观的表单设计 +- 丰富的选项配置 +- 实时反馈和错误处理 + +### 3. **内容丰富** +- 支持多种古诗词类型 +- 提供详细注释和解读 +- 适配不同用户需求 + +### 4. **技术先进** +- 现代化前端设计 +- 响应式布局 +- 流畅的用户体验 + +--- + +## 🔗 **系统集成** + +### 导航集成 +- ✅ 主导航菜单已添加"古诗词解析"入口 +- ✅ 主页功能卡片已添加古诗词解析 +- ✅ 统一的UI设计风格 + +### 路由注册 +- ✅ 已注册poetry_bp蓝图 +- ✅ URL前缀:`/poetry` +- ✅ 完整的路由配置 + +### 样式统一 +- ✅ 与现有系统保持一致的视觉风格 +- ✅ 响应式设计适配 +- ✅ 现代化的交互效果 + +--- + +## 📊 **使用示例** + +### 基本使用 +1. 访问古诗词解析页面 +2. 输入诗词标题(如:静夜思) +3. 输入作者姓名(如:李白) +4. 选择朝代(如:唐) +5. 配置解析参数 +6. 点击"开始解析" + +### 快速体验 +1. 访问古诗词示例页面 +2. 点击任意示例卡片 +3. 自动跳转并填充表单 +4. 自动开始解析 + +--- + +## 🚀 **部署完成** + +古诗词查询与解析功能已成功集成到提示词大师系统中,用户可以通过以下方式访问: + +1. **主导航菜单** → 古诗词解析 +2. **主页功能卡片** → 古诗词解析 +3. **直接访问** → `/poetry/` + +功能已完全就绪,可以立即使用! + +--- + +*部署完成时间:2025年9月14日* +*维护人员:系统管理员* + diff --git a/启动和停止.txt b/启动和停止.txt index 40e96c3..c15ebde 100644 --- a/启动和停止.txt +++ b/启动和停止.txt @@ -126,6 +126,8 @@ pip list | grep -E "(flask|gunicorn|openai)" - **主页**:`http://101.43.95.130:5002/` - **饭菜规划**:`http://101.43.95.130:5002/meal-planning` +- **古诗词解析**:`http://101.43.95.130:5002/poetry/` +- **古诗词示例**:`http://101.43.95.130:5002/poetry/examples` - **后台管理**:`http://101.43.95.130:5002/admin` - **数据分析**:`http://101.43.95.130:5002/admin/analytics_admin/`