feat: multi-domain failover for provider accounts
Each ProviderAccount can now have multiple base URLs (provider_urls table). On stream failure, BroadcastGroup cycles to the next domain immediately with no wait; backs off only after all domains have been tried once. Background health checker pings every domain every 5 min via player_api.php and updates status/response_ms. Admin UI shows domain list with color-coded status badges and a "Verificar todos" button per provider.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
|
||||
from sqlalchemy.orm import DeclarativeBase
|
||||
from sqlalchemy import text
|
||||
from .config import settings
|
||||
|
||||
engine = create_async_engine(
|
||||
@@ -27,5 +28,15 @@ async def get_db():
|
||||
|
||||
async def init_db():
|
||||
from .models import provider, channel, user, epg, custom_category, log, notification, jellyfin # noqa: ensure all models imported
|
||||
from .models.provider import ProviderUrl # noqa: ensure ProviderUrl is registered
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
# Migrate: create provider_urls entries from existing base_url if not already done
|
||||
await conn.execute(text("""
|
||||
INSERT INTO provider_urls (provider_account_id, url, priority, is_active, status)
|
||||
SELECT id, base_url, 0, true, 'unknown'
|
||||
FROM provider_accounts
|
||||
WHERE id NOT IN (SELECT DISTINCT provider_account_id FROM provider_urls WHERE provider_account_id IS NOT NULL)
|
||||
ON CONFLICT DO NOTHING
|
||||
"""))
|
||||
await conn.commit()
|
||||
|
||||
Reference in New Issue
Block a user