jettask 0.2.19__py3-none-any.whl → 0.2.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. jettask/__init__.py +12 -3
  2. jettask/cli.py +314 -228
  3. jettask/config/__init__.py +9 -1
  4. jettask/config/config.py +245 -0
  5. jettask/config/env_loader.py +381 -0
  6. jettask/config/lua_scripts.py +158 -0
  7. jettask/config/nacos_config.py +132 -5
  8. jettask/core/__init__.py +1 -1
  9. jettask/core/app.py +1573 -666
  10. jettask/core/app_importer.py +33 -16
  11. jettask/core/container.py +532 -0
  12. jettask/core/task.py +1 -4
  13. jettask/core/unified_manager_base.py +2 -2
  14. jettask/executor/__init__.py +38 -0
  15. jettask/executor/core.py +625 -0
  16. jettask/executor/executor.py +338 -0
  17. jettask/executor/orchestrator.py +290 -0
  18. jettask/executor/process_entry.py +638 -0
  19. jettask/executor/task_executor.py +317 -0
  20. jettask/messaging/__init__.py +68 -0
  21. jettask/messaging/event_pool.py +2188 -0
  22. jettask/messaging/reader.py +519 -0
  23. jettask/messaging/registry.py +266 -0
  24. jettask/messaging/scanner.py +369 -0
  25. jettask/messaging/sender.py +312 -0
  26. jettask/persistence/__init__.py +118 -0
  27. jettask/persistence/backlog_monitor.py +567 -0
  28. jettask/{backend/data_access.py → persistence/base.py} +58 -57
  29. jettask/persistence/consumer.py +315 -0
  30. jettask/{core → persistence}/db_manager.py +23 -22
  31. jettask/persistence/maintenance.py +81 -0
  32. jettask/persistence/message_consumer.py +259 -0
  33. jettask/{backend/namespace_data_access.py → persistence/namespace.py} +66 -98
  34. jettask/persistence/offline_recovery.py +196 -0
  35. jettask/persistence/queue_discovery.py +215 -0
  36. jettask/persistence/task_persistence.py +218 -0
  37. jettask/persistence/task_updater.py +583 -0
  38. jettask/scheduler/__init__.py +2 -2
  39. jettask/scheduler/loader.py +6 -5
  40. jettask/scheduler/run_scheduler.py +1 -1
  41. jettask/scheduler/scheduler.py +7 -7
  42. jettask/scheduler/{unified_scheduler_manager.py → scheduler_coordinator.py} +18 -13
  43. jettask/task/__init__.py +16 -0
  44. jettask/{router.py → task/router.py} +26 -8
  45. jettask/task/task_center/__init__.py +9 -0
  46. jettask/task/task_executor.py +318 -0
  47. jettask/task/task_registry.py +291 -0
  48. jettask/test_connection_monitor.py +73 -0
  49. jettask/utils/__init__.py +31 -1
  50. jettask/{monitor/run_backlog_collector.py → utils/backlog_collector.py} +1 -1
  51. jettask/utils/db_connector.py +1629 -0
  52. jettask/{db_init.py → utils/db_init.py} +1 -1
  53. jettask/utils/rate_limit/__init__.py +30 -0
  54. jettask/utils/rate_limit/concurrency_limiter.py +665 -0
  55. jettask/utils/rate_limit/config.py +145 -0
  56. jettask/utils/rate_limit/limiter.py +41 -0
  57. jettask/utils/rate_limit/manager.py +269 -0
  58. jettask/utils/rate_limit/qps_limiter.py +154 -0
  59. jettask/utils/rate_limit/task_limiter.py +384 -0
  60. jettask/utils/serializer.py +3 -0
  61. jettask/{monitor/stream_backlog_monitor.py → utils/stream_backlog.py} +14 -6
  62. jettask/utils/time_sync.py +173 -0
  63. jettask/webui/__init__.py +27 -0
  64. jettask/{api/v1 → webui/api}/alerts.py +1 -1
  65. jettask/{api/v1 → webui/api}/analytics.py +2 -2
  66. jettask/{api/v1 → webui/api}/namespaces.py +1 -1
  67. jettask/{api/v1 → webui/api}/overview.py +1 -1
  68. jettask/{api/v1 → webui/api}/queues.py +3 -3
  69. jettask/{api/v1 → webui/api}/scheduled.py +1 -1
  70. jettask/{api/v1 → webui/api}/settings.py +1 -1
  71. jettask/{api.py → webui/app.py} +253 -145
  72. jettask/webui/namespace_manager/__init__.py +10 -0
  73. jettask/{multi_namespace_consumer.py → webui/namespace_manager/multi.py} +69 -22
  74. jettask/{unified_consumer_manager.py → webui/namespace_manager/unified.py} +1 -1
  75. jettask/{run.py → webui/run.py} +2 -2
  76. jettask/{services → webui/services}/__init__.py +1 -3
  77. jettask/{services → webui/services}/overview_service.py +34 -16
  78. jettask/{services → webui/services}/queue_service.py +1 -1
  79. jettask/{backend → webui/services}/queue_stats_v2.py +1 -1
  80. jettask/{services → webui/services}/settings_service.py +1 -1
  81. jettask/worker/__init__.py +53 -0
  82. jettask/worker/lifecycle.py +1507 -0
  83. jettask/worker/manager.py +583 -0
  84. jettask/{core/offline_worker_recovery.py → worker/recovery.py} +268 -175
  85. {jettask-0.2.19.dist-info → jettask-0.2.23.dist-info}/METADATA +2 -71
  86. jettask-0.2.23.dist-info/RECORD +145 -0
  87. jettask/__main__.py +0 -140
  88. jettask/api/__init__.py +0 -103
  89. jettask/backend/__init__.py +0 -1
  90. jettask/backend/api/__init__.py +0 -3
  91. jettask/backend/api/v1/__init__.py +0 -17
  92. jettask/backend/api/v1/monitoring.py +0 -431
  93. jettask/backend/api/v1/namespaces.py +0 -504
  94. jettask/backend/api/v1/queues.py +0 -342
  95. jettask/backend/api/v1/tasks.py +0 -367
  96. jettask/backend/core/__init__.py +0 -3
  97. jettask/backend/core/cache.py +0 -221
  98. jettask/backend/core/database.py +0 -200
  99. jettask/backend/core/exceptions.py +0 -102
  100. jettask/backend/dependencies.py +0 -261
  101. jettask/backend/init_meta_db.py +0 -158
  102. jettask/backend/main.py +0 -1426
  103. jettask/backend/main_unified.py +0 -78
  104. jettask/backend/main_v2.py +0 -394
  105. jettask/backend/models/__init__.py +0 -3
  106. jettask/backend/models/requests.py +0 -236
  107. jettask/backend/models/responses.py +0 -230
  108. jettask/backend/namespace_api_old.py +0 -267
  109. jettask/backend/services/__init__.py +0 -3
  110. jettask/backend/start.py +0 -42
  111. jettask/backend/unified_api_router.py +0 -1541
  112. jettask/cleanup_deprecated_tables.sql +0 -16
  113. jettask/core/consumer_manager.py +0 -1695
  114. jettask/core/delay_scanner.py +0 -256
  115. jettask/core/event_pool.py +0 -1700
  116. jettask/core/heartbeat_process.py +0 -222
  117. jettask/core/task_batch.py +0 -153
  118. jettask/core/worker_scanner.py +0 -271
  119. jettask/executors/__init__.py +0 -5
  120. jettask/executors/asyncio.py +0 -876
  121. jettask/executors/base.py +0 -30
  122. jettask/executors/common.py +0 -148
  123. jettask/executors/multi_asyncio.py +0 -309
  124. jettask/gradio_app.py +0 -570
  125. jettask/integrated_gradio_app.py +0 -1088
  126. jettask/main.py +0 -0
  127. jettask/monitoring/__init__.py +0 -3
  128. jettask/pg_consumer.py +0 -1896
  129. jettask/run_monitor.py +0 -22
  130. jettask/run_webui.py +0 -148
  131. jettask/scheduler/multi_namespace_scheduler.py +0 -294
  132. jettask/scheduler/unified_manager.py +0 -450
  133. jettask/task_center_client.py +0 -150
  134. jettask/utils/serializer_optimized.py +0 -33
  135. jettask/webui_exceptions.py +0 -67
  136. jettask-0.2.19.dist-info/RECORD +0 -150
  137. /jettask/{constants.py → config/constants.py} +0 -0
  138. /jettask/{backend/config.py → config/task_center.py} +0 -0
  139. /jettask/{pg_consumer → messaging/pg_consumer}/pg_consumer_v2.py +0 -0
  140. /jettask/{pg_consumer → messaging/pg_consumer}/sql/add_execution_time_field.sql +0 -0
  141. /jettask/{pg_consumer → messaging/pg_consumer}/sql/create_new_tables.sql +0 -0
  142. /jettask/{pg_consumer → messaging/pg_consumer}/sql/create_tables_v3.sql +0 -0
  143. /jettask/{pg_consumer → messaging/pg_consumer}/sql/migrate_to_new_structure.sql +0 -0
  144. /jettask/{pg_consumer → messaging/pg_consumer}/sql/modify_time_fields.sql +0 -0
  145. /jettask/{pg_consumer → messaging/pg_consumer}/sql_utils.py +0 -0
  146. /jettask/{models.py → persistence/models.py} +0 -0
  147. /jettask/scheduler/{manager.py → task_crud.py} +0 -0
  148. /jettask/{schema.sql → schemas/schema.sql} +0 -0
  149. /jettask/{task_center.py → task/task_center/client.py} +0 -0
  150. /jettask/{monitoring → utils}/file_watcher.py +0 -0
  151. /jettask/{services/redis_monitor_service.py → utils/redis_monitor.py} +0 -0
  152. /jettask/{api/v1 → webui/api}/__init__.py +0 -0
  153. /jettask/{webui_config.py → webui/config.py} +0 -0
  154. /jettask/{webui_models → webui/models}/__init__.py +0 -0
  155. /jettask/{webui_models → webui/models}/namespace.py +0 -0
  156. /jettask/{services → webui/services}/alert_service.py +0 -0
  157. /jettask/{services → webui/services}/analytics_service.py +0 -0
  158. /jettask/{services → webui/services}/scheduled_task_service.py +0 -0
  159. /jettask/{services → webui/services}/task_service.py +0 -0
  160. /jettask/{webui_sql → webui/sql}/batch_upsert_functions.sql +0 -0
  161. /jettask/{webui_sql → webui/sql}/verify_database.sql +0 -0
  162. {jettask-0.2.19.dist-info → jettask-0.2.23.dist-info}/WHEEL +0 -0
  163. {jettask-0.2.19.dist-info → jettask-0.2.23.dist-info}/entry_points.txt +0 -0
  164. {jettask-0.2.19.dist-info → jettask-0.2.23.dist-info}/licenses/LICENSE +0 -0
  165. {jettask-0.2.19.dist-info → jettask-0.2.23.dist-info}/top_level.txt +0 -0
@@ -1,78 +0,0 @@
1
- """
2
- 统一的FastAPI应用主文件
3
- 简化版本,所有API接口都在unified_api_router.py中定义
4
- """
5
-
6
- from fastapi import FastAPI
7
- from fastapi.middleware.cors import CORSMiddleware
8
- from fastapi.staticfiles import StaticFiles
9
- import logging
10
- import os
11
-
12
- # 导入统一的路由器
13
- try:
14
- from unified_api_router import router as api_router
15
- except ImportError:
16
- # 如果相对导入失败,尝试绝对导入
17
- from jettask.backend.unified_api_router import router as api_router
18
-
19
- # 设置日志
20
- logging.basicConfig(
21
- level=logging.INFO,
22
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
23
- )
24
- logger = logging.getLogger(__name__)
25
-
26
- # 创建FastAPI应用
27
- app = FastAPI(
28
- title="JetTask WebUI API",
29
- description="统一的任务队列管理系统API",
30
- version="2.0.0"
31
- )
32
-
33
- # 配置CORS
34
- app.add_middleware(
35
- CORSMiddleware,
36
- allow_origins=["*"], # 在生产环境中应该设置具体的域名
37
- allow_credentials=True,
38
- allow_methods=["*"],
39
- allow_headers=["*"],
40
- )
41
-
42
- # 注册统一的API路由
43
- app.include_router(api_router)
44
-
45
- # 静态文件服务(如果需要)
46
- frontend_path = os.path.join(os.path.dirname(__file__), "../frontend/dist")
47
- if os.path.exists(frontend_path):
48
- app.mount("/", StaticFiles(directory=frontend_path, html=True), name="static")
49
- logger.info(f"Serving static files from {frontend_path}")
50
-
51
- # 健康检查端点
52
- @app.get("/health")
53
- async def health_check():
54
- """健康检查端点"""
55
- return {"status": "healthy", "service": "jettask-webui"}
56
-
57
- # 启动事件
58
- @app.on_event("startup")
59
- async def startup_event():
60
- """应用启动事件"""
61
- logger.info("JetTask WebUI API 启动成功")
62
- logger.info("所有API接口已统一到 unified_api_router.py 文件中")
63
-
64
- # 关闭事件
65
- @app.on_event("shutdown")
66
- async def shutdown_event():
67
- """应用关闭事件"""
68
- logger.info("JetTask WebUI API 正在关闭...")
69
-
70
- if __name__ == "__main__":
71
- import uvicorn
72
- uvicorn.run(
73
- "main_unified:app",
74
- host="0.0.0.0",
75
- port=8001,
76
- reload=True,
77
- log_level="info"
78
- )
@@ -1,394 +0,0 @@
1
- """
2
- JetTask WebUI Backend v2 - Refactored and Optimized
3
-
4
- 重构后的主要改进:
5
- 1. 模块化架构,职责分离清晰
6
- 2. 统一的错误处理和响应格式
7
- 3. 缓存系统优化性能
8
- 4. 依赖注入提升可测试性
9
- 5. 监控和日志系统完善
10
- """
11
- import sys
12
- import os
13
- import asyncio
14
- import time
15
- from contextlib import asynccontextmanager
16
- from datetime import datetime, timezone
17
- import logging
18
-
19
- from fastapi import FastAPI, Request, HTTPException
20
- from fastapi.middleware.cors import CORSMiddleware
21
- from fastapi.middleware.gzip import GZipMiddleware
22
- from fastapi.responses import JSONResponse
23
- from fastapi.exceptions import RequestValidationError
24
-
25
- # 添加项目路径
26
- sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
27
-
28
- # 导入核心模块
29
- from core.database import db_manager
30
- from core.cache import cache_manager
31
- from core.exceptions import JetTaskAPIException
32
-
33
- # 导入API路由
34
- from api.v1 import v1_router
35
-
36
- # 导入原有路由(向后兼容)
37
- from namespace_api import router as namespace_router_old
38
- from queue_backlog_api import router as backlog_router_old
39
-
40
- # 设置日志
41
- logging.basicConfig(
42
- level=logging.INFO,
43
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
44
- )
45
- logger = logging.getLogger(__name__)
46
-
47
- # 应用启动时间
48
- APP_START_TIME = time.time()
49
-
50
-
51
- @asynccontextmanager
52
- async def lifespan(app: FastAPI):
53
- """应用生命周期管理"""
54
- # 启动时初始化
55
- startup_start = time.time()
56
-
57
- try:
58
- logger.info("=" * 60)
59
- logger.info("JetTask WebUI Backend v2 启动中...")
60
-
61
- # 1. 初始化缓存管理器
62
- if os.getenv('REDIS_URL'):
63
- from core.database import get_redis_client
64
- redis_client = await get_redis_client(os.getenv('REDIS_URL'), "cache")
65
- cache_manager.redis_client = redis_client
66
- logger.info("缓存管理器已初始化 (Redis)")
67
- else:
68
- logger.info("缓存管理器已初始化 (本地缓存)")
69
-
70
- # 2. 初始化数据库连接池
71
- pg_url = os.getenv('JETTASK_PG_URL', 'postgresql://jettask:123456@localhost:5432/jettask')
72
- await db_manager.get_pg_pool(pg_url, "default")
73
- logger.info(f"数据库连接池已初始化: {pg_url.split('@')[1] if '@' in pg_url else pg_url}")
74
-
75
- # 3. 初始化命名空间数据访问
76
- from namespace_data_access import get_namespace_data_access
77
- namespace_data_access = get_namespace_data_access()
78
- logger.info("命名空间数据访问已初始化")
79
-
80
- startup_duration = time.time() - startup_start
81
- logger.info(f"系统启动完成,耗时: {startup_duration:.2f}s")
82
- logger.info("=" * 60)
83
-
84
- except Exception as e:
85
- logger.error(f"启动失败: {e}")
86
- raise
87
-
88
- yield
89
-
90
- # 关闭时清理资源
91
- try:
92
- logger.info("正在关闭系统...")
93
-
94
- # 清理数据库连接
95
- await db_manager.close_all()
96
-
97
- # 清理缓存
98
- cache_stats = cache_manager.get_stats()
99
- logger.info(f"缓存统计: {cache_stats}")
100
-
101
- logger.info("系统关闭完成")
102
-
103
- except Exception as e:
104
- logger.error(f"关闭时出错: {e}")
105
-
106
-
107
- # 创建FastAPI应用
108
- app = FastAPI(
109
- title="JetTask WebUI Backend",
110
- version="2.0.0",
111
- description="重构优化的JetTask监控后端API",
112
- lifespan=lifespan,
113
- docs_url="/docs",
114
- redoc_url="/redoc",
115
- openapi_url="/openapi.json"
116
- )
117
-
118
- # 添加中间件
119
- app.add_middleware(GZipMiddleware, minimum_size=1000)
120
- app.add_middleware(
121
- CORSMiddleware,
122
- allow_origins=["*"], # 生产环境应配置具体域名
123
- allow_credentials=True,
124
- allow_methods=["*"],
125
- allow_headers=["*"],
126
- )
127
-
128
-
129
- # 请求计时中间件
130
- @app.middleware("http")
131
- async def log_requests(request: Request, call_next):
132
- start_time = time.time()
133
-
134
- # 记录请求开始
135
- logger.debug(f"开始处理请求: {request.method} {request.url}")
136
-
137
- response = await call_next(request)
138
-
139
- # 记录请求完成
140
- duration = time.time() - start_time
141
- logger.info(
142
- f"{request.method} {request.url.path} - "
143
- f"状态码: {response.status_code} - "
144
- f"耗时: {duration:.3f}s"
145
- )
146
-
147
- # 添加响应头
148
- response.headers["X-Response-Time"] = f"{duration:.3f}s"
149
- response.headers["X-API-Version"] = "2.0.0"
150
-
151
- return response
152
-
153
-
154
- # 全局异常处理器
155
- @app.exception_handler(JetTaskAPIException)
156
- async def jettask_exception_handler(request: Request, exc: JetTaskAPIException):
157
- """处理自定义API异常"""
158
- return JSONResponse(
159
- status_code=exc.status_code,
160
- content={
161
- "success": False,
162
- "error_code": exc.error_code,
163
- "message": exc.detail,
164
- "details": exc.extra_data,
165
- "timestamp": datetime.now(timezone.utc).isoformat(),
166
- "path": str(request.url)
167
- }
168
- )
169
-
170
-
171
- @app.exception_handler(RequestValidationError)
172
- async def validation_exception_handler(request: Request, exc: RequestValidationError):
173
- """处理请求验证异常"""
174
- return JSONResponse(
175
- status_code=422,
176
- content={
177
- "success": False,
178
- "error_code": "VALIDATION_ERROR",
179
- "message": "请求参数验证失败",
180
- "details": {
181
- "errors": exc.errors(),
182
- "body": exc.body
183
- },
184
- "timestamp": datetime.now(timezone.utc).isoformat(),
185
- "path": str(request.url)
186
- }
187
- )
188
-
189
-
190
- @app.exception_handler(HTTPException)
191
- async def http_exception_handler(request: Request, exc: HTTPException):
192
- """处理HTTP异常"""
193
- return JSONResponse(
194
- status_code=exc.status_code,
195
- content={
196
- "success": False,
197
- "error_code": f"HTTP_{exc.status_code}",
198
- "message": exc.detail,
199
- "timestamp": datetime.now(timezone.utc).isoformat(),
200
- "path": str(request.url)
201
- }
202
- )
203
-
204
-
205
- @app.exception_handler(Exception)
206
- async def general_exception_handler(request: Request, exc: Exception):
207
- """处理未知异常"""
208
- logger.exception(f"未处理的异常: {exc}")
209
- return JSONResponse(
210
- status_code=500,
211
- content={
212
- "success": False,
213
- "error_code": "INTERNAL_SERVER_ERROR",
214
- "message": "内部服务器错误",
215
- "timestamp": datetime.now(timezone.utc).isoformat(),
216
- "path": str(request.url)
217
- }
218
- )
219
-
220
-
221
- # 根路由
222
- @app.get("/")
223
- async def root():
224
- """API根路径"""
225
- uptime = time.time() - APP_START_TIME
226
-
227
- return {
228
- "name": "JetTask WebUI Backend",
229
- "version": "2.0.0",
230
- "status": "healthy",
231
- "uptime_seconds": round(uptime, 2),
232
- "timestamp": datetime.now(timezone.utc).isoformat(),
233
- "features": [
234
- "模块化架构",
235
- "统一错误处理",
236
- "智能缓存",
237
- "性能监控",
238
- "向后兼容"
239
- ],
240
- "endpoints": {
241
- "v1_api": "/api/v1",
242
- "v2_docs": "/docs",
243
- "health": "/health",
244
- "metrics": "/metrics"
245
- }
246
- }
247
-
248
-
249
- @app.get("/health")
250
- async def health_check():
251
- """健康检查"""
252
- uptime = time.time() - APP_START_TIME
253
-
254
- # 检查各组件状态
255
- components = {"api": "healthy"}
256
-
257
- # 检查数据库连接
258
- try:
259
- if "default" in db_manager._pg_pools:
260
- components["postgresql"] = "healthy"
261
- else:
262
- components["postgresql"] = "not_configured"
263
- except Exception as e:
264
- components["postgresql"] = f"unhealthy: {str(e)}"
265
-
266
- # 检查缓存
267
- try:
268
- cache_stats = cache_manager.get_stats()
269
- components["cache"] = f"healthy (hit_rate: {cache_stats['hit_rate']:.2%})"
270
- except Exception as e:
271
- components["cache"] = f"unhealthy: {str(e)}"
272
-
273
- # 确定总体状态
274
- overall_status = "healthy" if all("healthy" in status for status in components.values()) else "degraded"
275
-
276
- return {
277
- "status": overall_status,
278
- "version": "2.0.0",
279
- "uptime_seconds": round(uptime, 2),
280
- "components": components,
281
- "timestamp": datetime.now(timezone.utc).isoformat()
282
- }
283
-
284
-
285
- @app.get("/metrics")
286
- async def get_metrics():
287
- """获取应用指标"""
288
- uptime = time.time() - APP_START_TIME
289
-
290
- # 缓存统计
291
- cache_stats = cache_manager.get_stats()
292
-
293
- # 系统指标
294
- metrics = {
295
- "uptime_seconds": round(uptime, 2),
296
- "cache_stats": cache_stats,
297
- "database_pools": {
298
- "postgresql_pools": len(db_manager._pg_pools),
299
- "redis_pools": len(db_manager._redis_pools),
300
- "sqlalchemy_engines": len(db_manager._sqlalchemy_engines)
301
- }
302
- }
303
-
304
- # 添加系统资源指标(如果psutil可用)
305
- try:
306
- import psutil
307
- metrics["system"] = {
308
- "cpu_percent": psutil.cpu_percent(interval=1),
309
- "memory_percent": psutil.virtual_memory().percent,
310
- "disk_percent": psutil.disk_usage('/').percent,
311
- "process_count": len(psutil.pids())
312
- }
313
- except ImportError:
314
- metrics["system"] = {"note": "psutil not available"}
315
-
316
- return {
317
- "success": True,
318
- "data": metrics,
319
- "timestamp": datetime.now(timezone.utc).isoformat()
320
- }
321
-
322
-
323
- # 注册API路由
324
-
325
- # v1 API路由
326
- app.include_router(v1_router, prefix="/api")
327
-
328
- # 向后兼容的旧路由
329
- app.include_router(namespace_router_old, prefix="/api")
330
- app.include_router(backlog_router_old, prefix="/api")
331
-
332
- # 简化的队列API路由(兼容性)
333
- @app.get("/api/queues/{namespace}")
334
- async def get_queues_legacy(namespace: str):
335
- """获取队列列表(兼容旧版本)"""
336
- try:
337
- from api.v1.queues import list_queues
338
- from dependencies import get_validated_namespace, get_redis_client, get_pg_connection, get_namespace_connection, get_request_metrics
339
-
340
- # 模拟依赖注入
341
- validated_namespace = namespace
342
-
343
- # 这里需要实际的依赖注入逻辑
344
- # 暂时返回简化响应
345
- return {
346
- "success": True,
347
- "data": [] # 返回空列表,实际应该调用新的API
348
- }
349
- except Exception as e:
350
- logger.error(f"获取队列列表失败(兼容接口): {e}")
351
- return {"success": False, "error": str(e)}
352
-
353
-
354
- # 开发工具路由
355
- if os.getenv("DEBUG", "false").lower() == "true":
356
- @app.get("/debug/cache")
357
- async def debug_cache():
358
- """调试缓存状态"""
359
- return {
360
- "stats": cache_manager.get_stats(),
361
- "local_cache_keys": list(cache_manager.local_cache.keys())[:20], # 只显示前20个
362
- "redis_connected": cache_manager.redis_client is not None
363
- }
364
-
365
- @app.post("/debug/cache/clear")
366
- async def debug_clear_cache():
367
- """清空缓存"""
368
- cleared = await cache_manager.clear_pattern("")
369
- return {"cleared_items": cleared}
370
-
371
-
372
- def run_server():
373
- """运行开发服务器"""
374
- import uvicorn
375
-
376
- port = int(os.getenv("PORT", "8002"))
377
- host = os.getenv("HOST", "0.0.0.0")
378
- reload = os.getenv("DEBUG", "false").lower() == "true"
379
-
380
- logger.info(f"启动服务器: http://{host}:{port}")
381
- logger.info(f"API文档: http://{host}:{port}/docs")
382
- logger.info(f"调试模式: {reload}")
383
-
384
- uvicorn.run(
385
- "main_v2:app",
386
- host=host,
387
- port=port,
388
- reload=reload,
389
- log_level="info"
390
- )
391
-
392
-
393
- if __name__ == "__main__":
394
- run_server()
@@ -1,3 +0,0 @@
1
- """
2
- Data models for JetTask WebUI Backend
3
- """