better lifecycle visibility implementation.
This commit is contained in:
@@ -7,6 +7,7 @@ from sqlalchemy.orm import selectinload
|
||||
|
||||
from app.models.subscription import Subscription
|
||||
from app.models.source import Source
|
||||
from app.models.download import Download, DownloadStatus
|
||||
from app.tasks.downloads import download_source
|
||||
from app.api.settings import get_setting_value
|
||||
|
||||
@@ -303,16 +304,46 @@ async def trigger_subscription_check(subscription_id: int):
|
||||
|
||||
enabled_sources = [s for s in subscription.sources if s.enabled]
|
||||
|
||||
# Queue Celery tasks for each enabled source
|
||||
task_ids = []
|
||||
for source in enabled_sources:
|
||||
task = download_source.delay(source.id)
|
||||
task_ids.append(task.id)
|
||||
# Get source IDs that already have a queued or running download
|
||||
active_result = await session.execute(
|
||||
select(Download.source_id).where(
|
||||
Download.source_id.in_([s.id for s in enabled_sources]),
|
||||
Download.status.in_([DownloadStatus.QUEUED, DownloadStatus.RUNNING])
|
||||
)
|
||||
)
|
||||
active_source_ids = set(active_result.scalars().all())
|
||||
|
||||
current_app.logger.info(f"Triggered check for subscription: {subscription.name} ({len(enabled_sources)} sources)")
|
||||
# Create download records and queue Celery tasks for each eligible source
|
||||
task_ids = []
|
||||
download_ids = []
|
||||
skipped = 0
|
||||
for source in enabled_sources:
|
||||
if source.id in active_source_ids:
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
download = Download(
|
||||
source_id=source.id,
|
||||
url=source.url,
|
||||
status=DownloadStatus.QUEUED,
|
||||
)
|
||||
session.add(download)
|
||||
await session.commit()
|
||||
await session.refresh(download)
|
||||
|
||||
task = download_source.delay(source.id, download_id=download.id)
|
||||
task_ids.append(task.id)
|
||||
download_ids.append(download.id)
|
||||
|
||||
current_app.logger.info(
|
||||
f"Triggered check for subscription: {subscription.name} "
|
||||
f"({len(download_ids)} queued, {skipped} already active)"
|
||||
)
|
||||
return jsonify({
|
||||
"message": "Checks queued",
|
||||
"subscription_id": subscription_id,
|
||||
"source_count": len(enabled_sources),
|
||||
"source_count": len(download_ids),
|
||||
"skipped_active": skipped,
|
||||
"task_ids": task_ids,
|
||||
"download_ids": download_ids,
|
||||
}), 202
|
||||
|
||||
Reference in New Issue
Block a user