main:采用异步 Redis 客户端优化指标管理模块
变更内容: - 将 `redis` 客户端替换为 `redis.asyncio` 实现。 - 系统中同步方法调整为异步方法,提升事件循环效率。 - 在 `MetricsManager` 中添加异步初始化及关闭逻辑,避免阻塞问题。 - 更新便捷函数以支持异步上下文,并添加同步模式的兼容方法。 - 调整 Worker、JobManager、API 路由等模块,适配异步指标操作。 - 扩展单元测试,覆盖新增的异步方法及 Redis 操作逻辑。 - 简化 Dockerfile,取消开发依赖安装命令。
This commit is contained in:
@@ -168,7 +168,7 @@ return 0
|
||||
await self._redis_client.hset(key, mapping=job_data)
|
||||
|
||||
# 记录指标
|
||||
incr("jobs_created_total", {"algorithm": algorithm})
|
||||
await incr("jobs_created_total", {"algorithm": algorithm})
|
||||
|
||||
logger.info(f"任务已创建: job_id={job_id}, algorithm={algorithm}")
|
||||
return job_id
|
||||
@@ -320,8 +320,10 @@ return 0
|
||||
await self._redis_client.expire(key, settings.job_result_ttl)
|
||||
|
||||
# 记录指标
|
||||
incr("jobs_completed_total", {"algorithm": algorithm_name, "status": status})
|
||||
observe("job_execution_duration_seconds", {"algorithm": algorithm_name}, elapsed_time)
|
||||
await incr("jobs_completed_total", {"algorithm": algorithm_name, "status": status})
|
||||
await observe(
|
||||
"job_execution_duration_seconds", {"algorithm": algorithm_name}, elapsed_time
|
||||
)
|
||||
|
||||
logger.info(
|
||||
f"任务执行完成: job_id={job_id}, status={status}, elapsed={elapsed_time:.3f}s"
|
||||
@@ -372,7 +374,7 @@ return 0
|
||||
)
|
||||
|
||||
if response.status_code < 400:
|
||||
incr("webhook_deliveries_total", {"status": "success"})
|
||||
await incr("webhook_deliveries_total", {"status": "success"})
|
||||
logger.info(
|
||||
f"Webhook 发送成功: job_id={job_id}, url={webhook_url}, "
|
||||
f"status_code={response.status_code}"
|
||||
@@ -395,7 +397,7 @@ return 0
|
||||
await asyncio.sleep(delay)
|
||||
|
||||
# 所有重试都失败
|
||||
incr("webhook_deliveries_total", {"status": "failed"})
|
||||
await incr("webhook_deliveries_total", {"status": "failed"})
|
||||
logger.error(f"Webhook 发送最终失败: job_id={job_id}, url={webhook_url}")
|
||||
|
||||
def is_available(self) -> bool:
|
||||
@@ -814,10 +816,10 @@ return 0
|
||||
# 更新指标
|
||||
from .metrics_unified import set as metrics_set
|
||||
|
||||
metrics_set("job_queue_length", {"queue": "pending"}, queue_length)
|
||||
metrics_set("job_queue_length", {"queue": "processing"}, processing_length)
|
||||
metrics_set("job_queue_length", {"queue": "dlq"}, dlq_length)
|
||||
metrics_set("job_oldest_waiting_seconds", None, oldest_waiting_seconds)
|
||||
await metrics_set("job_queue_length", {"queue": "pending"}, queue_length)
|
||||
await metrics_set("job_queue_length", {"queue": "processing"}, processing_length)
|
||||
await metrics_set("job_queue_length", {"queue": "dlq"}, dlq_length)
|
||||
await metrics_set("job_oldest_waiting_seconds", None, oldest_waiting_seconds)
|
||||
|
||||
return {
|
||||
"queue_length": queue_length,
|
||||
|
||||
Reference in New Issue
Block a user