From 690dd42adcca8a1556d21b3595a1ec08e8952330 Mon Sep 17 00:00:00 2001 From: rjb <263303411@qq.com> Date: Fri, 19 Sep 2025 00:14:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=97=E8=AF=8D=E6=94=B6?= =?UTF-8?q?=E8=97=8F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- create_poetry_favorites_table.py | 45 + logs/app.log | 70 ++ logs/gunicorn.log | 2 + logs/gunicorn.pid | 2 +- logs/gunicorn_access.log | 221 ++++ logs/gunicorn_error.log | 447 +++++++++ src/flask_prompt_master/__init__.py | 4 + .../__pycache__/__init__.cpython-312.pyc | Bin 2591 -> 2720 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 2567 -> 2696 bytes .../poetry_favorites.cpython-312.pyc | Bin 0 -> 5035 bytes .../models/poetry_favorites.py | 71 ++ .../routes/__pycache__/poetry.cpython-312.pyc | Bin 0 -> 16994 bytes .../routes/__pycache__/routes.cpython-312.pyc | Bin 47341 -> 47577 bytes src/flask_prompt_master/routes/poetry.py | 415 ++++++++ src/flask_prompt_master/routes/routes.py | 16 +- .../poetry_favorite_service.cpython-312.pyc | Bin 0 -> 11087 bytes .../services/poetry_favorite_service.py | 250 +++++ src/flask_prompt_master/static/css/style.css | 62 ++ src/flask_prompt_master/templates/base.html | 8 + src/flask_prompt_master/templates/index.html | 13 +- .../templates/poetry/poetry_examples.html | 243 +++++ .../templates/poetry/poetry_favorites.html | 565 +++++++++++ .../templates/poetry/poetry_page.html | 948 ++++++++++++++++++ test_copy_function.html | 159 +++ 古诗词功能部署报告.md | 180 ++++ 启动和停止.txt | 2 + 26 files changed, 3711 insertions(+), 12 deletions(-) create mode 100644 create_poetry_favorites_table.py create mode 100644 logs/gunicorn.log create mode 100644 src/flask_prompt_master/models/__pycache__/poetry_favorites.cpython-312.pyc create mode 100644 src/flask_prompt_master/models/poetry_favorites.py create mode 100644 src/flask_prompt_master/routes/__pycache__/poetry.cpython-312.pyc create mode 100644 src/flask_prompt_master/routes/poetry.py create mode 100644 src/flask_prompt_master/services/__pycache__/poetry_favorite_service.cpython-312.pyc create mode 100644 src/flask_prompt_master/services/poetry_favorite_service.py create mode 100644 src/flask_prompt_master/templates/poetry/poetry_examples.html create mode 100644 src/flask_prompt_master/templates/poetry/poetry_favorites.html create mode 100644 src/flask_prompt_master/templates/poetry/poetry_page.html create mode 100644 test_copy_function.html create mode 100644 古诗词功能部署报告.md 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 f2a5d0aea5fd2c30892a71e01d2c97d61cc25319..fb58a597fd6843c60fc7b251e92ed9d5537cb0ff 100644 GIT binary patch delta 468 zcmbO)vOtvgG%qg~0}v<{9n1K;k(Yy!anWWmMsB9bpP9t%*;X@xv^lA2dm#17;XNrMQG sAw}{aLIFg8Oj^lMWB_7=g8CMRO>TZlX-=wLk@@6noQ@o3jQn6(03}9PfB*mh delta 364 zcmZ1=I$wnMG%qg~0}vQ5+M7|Zk(Yy!v1GFtBR7)=6GIJK4dZG?kR$^GBSQ^imKKDK zOlIjK^C0XL-V!~SXqLg`{fz3&d@1~s4>C(?5^I9Mk>&3oxG4m zno(@>UY0kLx3TszN^W*x6JVU&z%I`yGI;@zWS@M1U5B-p9q7u*-`V}SK%Ni+;^OGZ z0US3b+i>1=(g1RAv8Cjfq~?_sffN==fd~!|AqOJlK?F$SN`@kkcZ+m@#4Qe+-29Z% ToK(9a)5+mnjvPje{9suCzpOb- diff --git a/src/flask_prompt_master/__pycache__/__init__.cpython-313.pyc b/src/flask_prompt_master/__pycache__/__init__.cpython-313.pyc index 5577de13111e6c36688c9937bb93b2758e2b6e2b..a46981b65570c847332fd744d3de9b10d282225c 100644 GIT binary patch delta 510 zcmZn{=@8}p%*)Hg00fFf$1?tI|nlVBbaEA$>exubx;0a0aGT37$1W%6IrGT z0$socHccp4m}1jJV5TvP28&J3WRYeRpWMpwfSt1-KeeQ&a&kQDWJc-DpIHSM8C54= zWRvHBh!=@W{?DeYC<^q;Ew-He^z_uCTP&G*Y5BL9@{4b=r{(0p(jWq4NRd2YvlbfGXnv-f*WIlNxrz3|MBR^Oc E0H5JhxBvhE delta 368 zcmeAWZ5QGF%*)Hg00hR1_GT1pPO4pz>12B@M-C%Key}V65?4f9 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 0000000000000000000000000000000000000000..f53999311bcfa83c32aa6cd1886c5f08c4b33a68 GIT binary patch literal 5035 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', 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 0000000000000000000000000000000000000000..d8dca50eaf8ee682ce083e3f4fffa4f8da6ff68e GIT binary patch literal 11087 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 literal 0 HcmV?d00001 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/`