mirror of https://github.com/kortix-ai/suna.git
feat(health): add health check functionality and update Redis image version
This commit is contained in:
parent
77f583ca5f
commit
0d21ed2cbe
|
@ -73,9 +73,14 @@ services:
|
||||||
options:
|
options:
|
||||||
max-size: "10m"
|
max-size: "10m"
|
||||||
max-file: "3"
|
max-file: "3"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "uv", "run", "worker_health.py"]
|
||||||
|
timeout: 10s
|
||||||
|
interval: 30s
|
||||||
|
start_period: 40s
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7-alpine
|
image: redis:8-alpine
|
||||||
# ports:
|
# ports:
|
||||||
# - "127.0.0.1:6379:6379"
|
# - "127.0.0.1:6379:6379"
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
@ -33,7 +33,6 @@ dramatiq.set_broker(rabbitmq_broker)
|
||||||
|
|
||||||
_initialized = False
|
_initialized = False
|
||||||
db = DBConnection()
|
db = DBConnection()
|
||||||
db = DBConnection()
|
|
||||||
workflow_executor = WorkflowExecutor(db)
|
workflow_executor = WorkflowExecutor(db)
|
||||||
deterministic_executor = DeterministicWorkflowExecutor(db)
|
deterministic_executor = DeterministicWorkflowExecutor(db)
|
||||||
instance_id = "single"
|
instance_id = "single"
|
||||||
|
@ -50,6 +49,11 @@ async def initialize():
|
||||||
_initialized = True
|
_initialized = True
|
||||||
logger.info(f"Initialized agent API with instance ID: {instance_id}")
|
logger.info(f"Initialized agent API with instance ID: {instance_id}")
|
||||||
|
|
||||||
|
@dramatiq.actor
|
||||||
|
async def check_health(key: str):
|
||||||
|
"""Run the agent in the background using Redis for state."""
|
||||||
|
structlog.contextvars.clear_contextvars()
|
||||||
|
await redis.set(key, "healthy", ex=redis.REDIS_KEY_TTL)
|
||||||
|
|
||||||
@dramatiq.actor
|
@dramatiq.actor
|
||||||
async def run_agent_background(
|
async def run_agent_background(
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
import dotenv
|
||||||
|
dotenv.load_dotenv()
|
||||||
|
|
||||||
|
from utils.logger import logger
|
||||||
|
import run_agent_background
|
||||||
|
from services import redis
|
||||||
|
import asyncio
|
||||||
|
from utils.retry import retry
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
await retry(lambda: redis.initialize_async())
|
||||||
|
key = uuid.uuid4().hex
|
||||||
|
run_agent_background.check_health.send(key)
|
||||||
|
timeout = 5 # seconds
|
||||||
|
elapsed = 0
|
||||||
|
while elapsed < timeout:
|
||||||
|
if await redis.get(key) == "healthy":
|
||||||
|
break
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
elapsed += 1
|
||||||
|
|
||||||
|
if elapsed >= timeout:
|
||||||
|
logger.critical("Health check timed out")
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
logger.critical("Health check passed")
|
||||||
|
await redis.delete(key)
|
||||||
|
await redis.close()
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
Loading…
Reference in New Issue