Add voice analytics filters and metrics
This commit is contained in:
@@ -10,6 +10,7 @@ from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.db.models import Story, StoryUniverse
|
||||
from app.services.achievement_extractor import extract_achievements
|
||||
from app.tasks.utils import run_with_disposed_engine
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -17,7 +18,7 @@ logger = get_logger(__name__)
|
||||
@celery_app.task
|
||||
def extract_story_achievements(story_id: int, universe_id: str) -> None:
|
||||
"""Extract achievements and update universe."""
|
||||
asyncio.run(_extract_story_achievements(story_id, universe_id))
|
||||
asyncio.run(run_with_disposed_engine(_extract_story_achievements(story_id, universe_id)))
|
||||
|
||||
|
||||
async def _extract_story_achievements(story_id: int, universe_id: str) -> None:
|
||||
|
||||
@@ -6,6 +6,7 @@ from app.core.celery_app import celery_app
|
||||
from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.services.story_service import prune_story_audio_cache
|
||||
from app.tasks.utils import run_with_disposed_engine
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -21,7 +22,7 @@ def prune_story_audio_cache_task():
|
||||
return await prune_story_audio_cache(session)
|
||||
|
||||
try:
|
||||
result = asyncio.run(_run())
|
||||
result = asyncio.run(run_with_disposed_engine(_run()))
|
||||
logger.info("prune_story_audio_cache_task_completed", **result)
|
||||
return result
|
||||
except Exception as exc:
|
||||
|
||||
@@ -6,6 +6,7 @@ from app.core.celery_app import celery_app
|
||||
from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.services.generation_jobs import mark_stale_generation_jobs
|
||||
from app.tasks.utils import run_with_disposed_engine
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -22,7 +23,7 @@ def prune_stale_generation_jobs_task():
|
||||
return await mark_stale_generation_jobs(session)
|
||||
|
||||
try:
|
||||
result = asyncio.run(_run())
|
||||
result = asyncio.run(run_with_disposed_engine(_run()))
|
||||
logger.info("prune_stale_generation_jobs_task_completed", **result)
|
||||
return result
|
||||
except Exception as exc:
|
||||
|
||||
@@ -6,6 +6,7 @@ from app.core.celery_app import celery_app
|
||||
from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.services.story_service import run_generation_job_service
|
||||
from app.tasks.utils import run_with_disposed_engine
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -22,7 +23,7 @@ def run_generation_workflow_task(job_id: str):
|
||||
return await run_generation_job_service(job_id, session)
|
||||
|
||||
try:
|
||||
result = asyncio.run(_run())
|
||||
result = asyncio.run(run_with_disposed_engine(_run()))
|
||||
logger.info(
|
||||
"generation_workflow_task_completed",
|
||||
job_id=job_id,
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
import asyncio
|
||||
|
||||
from app.core.celery_app import celery_app
|
||||
from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.services.memory_service import prune_expired_memories
|
||||
from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.services.memory_service import prune_expired_memories
|
||||
from app.tasks.utils import run_with_disposed_engine
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -21,7 +22,7 @@ def prune_memories_task():
|
||||
|
||||
try:
|
||||
# Create a new event loop for this task execution
|
||||
count = asyncio.run(_run())
|
||||
count = asyncio.run(run_with_disposed_engine(_run()))
|
||||
logger.info("prune_memories_task_completed", deleted_count=count)
|
||||
return f"Deleted {count} expired memories"
|
||||
except Exception as exc:
|
||||
|
||||
@@ -10,6 +10,7 @@ from app.core.celery_app import celery_app
|
||||
from app.core.logging import get_logger
|
||||
from app.db.database import _get_session_factory
|
||||
from app.db.models import PushConfig, PushEvent
|
||||
from app.tasks.utils import run_with_disposed_engine
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -22,7 +23,7 @@ TRIGGER_WINDOW_MINUTES = 30
|
||||
@celery_app.task
|
||||
def check_push_notifications() -> None:
|
||||
"""Check push configs and create push events."""
|
||||
asyncio.run(_check_push_notifications())
|
||||
asyncio.run(run_with_disposed_engine(_check_push_notifications()))
|
||||
|
||||
|
||||
def _is_quiet_hours(current: time) -> bool:
|
||||
|
||||
17
backend/app/tasks/utils.py
Normal file
17
backend/app/tasks/utils.py
Normal file
@@ -0,0 +1,17 @@
|
||||
"""Shared helpers for Celery tasks."""
|
||||
|
||||
from collections.abc import Awaitable
|
||||
from typing import TypeVar
|
||||
|
||||
from app.db.database import dispose_engine
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
async def run_with_disposed_engine(awaitable: Awaitable[T]) -> T:
|
||||
"""Run async task work and drop DB pools before the event loop closes."""
|
||||
|
||||
try:
|
||||
return await awaitable
|
||||
finally:
|
||||
await dispose_engine()
|
||||
Reference in New Issue
Block a user