Files
mindfulness/server/app/tasks/ops.py
2026-02-09 15:39:46 +08:00

42 lines
1.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
from datetime import datetime, timezone
import redis
from celery import shared_task
from app.core.config import get_settings
def _env_prefix(app_env: str) -> str:
"""
根据环境生成前缀:
- dev -> dev
- prod -> pro
"""
return "dev" if str(app_env) == "dev" else "pro"
@shared_task(name="tasks.ops.beat_heartbeat")
def beat_heartbeat() -> dict[str, str]:
"""
Beat 心跳任务(用于健康检查)。
作用:
- 由 Celery Beat 每分钟触发一次
- 写入 Redis 心跳 key并设置 TTL
- API 侧读取该 key可判断 beat 是否在运行
"""
settings = get_settings()
prefix = _env_prefix(settings.app_env)
key = f"{prefix}:beat:heartbeat"
now = datetime.now(timezone.utc).isoformat()
r = redis.Redis.from_url(settings.celery_broker_url, decode_responses=True)
# TTL 设短一些:一旦 beat 挂了,很快就能从“过期/缺失”判断出来
r.set(key, now, ex=180)
return {"status": "ok", "key": key, "at": now}