Dispatcharr/apps/proxy/management/commands/proxy.py
2025-03-03 18:40:30 -06:00

67 lines
No EOL
2.4 KiB
Python

from django.core.management.base import BaseCommand
from django.apps import apps
import logging
logger = logging.getLogger(__name__)
class Command(BaseCommand):
help = 'Manage proxy servers'
def add_arguments(self, parser):
parser.add_argument(
'action',
choices=['start', 'stop', 'restart'],
help='Action to perform'
)
parser.add_argument(
'--type',
choices=['hls', 'ts', 'all'],
default='all',
help='Type of proxy to manage'
)
parser.add_argument(
'--channel',
help='Channel ID to manage'
)
parser.add_argument(
'--url',
help='Stream URL (required for start)'
)
def handle(self, *args, **options):
proxy_app = apps.get_app_config('proxy')
action = options['action']
proxy_type = options['type']
channel = options.get('channel')
url = options.get('url')
try:
if action == 'start':
if not url:
raise ValueError("URL is required for start action")
if proxy_type in ('hls', 'all'):
proxy_app.hls_proxy.initialize_channel(url, channel or 'default')
if proxy_type in ('ts', 'all'):
proxy_app.ts_proxy.initialize_channel(url, channel or 'default')
self.stdout.write(self.style.SUCCESS('Started proxy servers'))
elif action == 'stop':
if proxy_type in ('hls', 'all'):
if channel:
proxy_app.hls_proxy.stop_channel(channel)
else:
proxy_app.hls_proxy.shutdown()
if proxy_type in ('ts', 'all'):
if channel:
proxy_app.ts_proxy.stop_channel(channel)
else:
proxy_app.ts_proxy.shutdown()
self.stdout.write(self.style.SUCCESS('Stopped proxy servers'))
elif action == 'restart':
self.handle(*args, **dict(options, action='stop'))
self.handle(*args, **dict(options, action='start'))
self.stdout.write(self.style.SUCCESS('Restarted proxy servers'))
except Exception as e:
self.stderr.write(self.style.ERROR(f'Error: {e}'))