This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
import logging
|
||||
import time
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from ...services.timelapse_worker import run_one_job
|
||||
|
||||
logger = logging.getLogger('camlaps')
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Запуск обработчика очереди таймлапсов.'
|
||||
@@ -18,14 +21,24 @@ class Command(BaseCommand):
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
logger.info('worker_cmd:handle:start')
|
||||
once = options['once']
|
||||
sleep_seconds = options['sleep']
|
||||
|
||||
if once:
|
||||
try:
|
||||
run_one_job()
|
||||
logger.info('worker_cmd:handle:done mode=once')
|
||||
except Exception:
|
||||
logger.exception('worker_cmd:handle:error mode=once')
|
||||
raise
|
||||
return
|
||||
|
||||
while True:
|
||||
try:
|
||||
processed = run_one_job()
|
||||
if not processed:
|
||||
time.sleep(sleep_seconds)
|
||||
except Exception:
|
||||
logger.exception('worker_cmd:handle:error mode=loop')
|
||||
raise
|
||||
@@ -1,3 +1,4 @@
|
||||
import logging
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
@@ -16,6 +17,8 @@ from .services.cameras import (
|
||||
list_active_cameras,
|
||||
)
|
||||
|
||||
logger = logging.getLogger('camlaps')
|
||||
|
||||
|
||||
def index(request):
|
||||
cameras = list_active_cameras()
|
||||
@@ -66,8 +69,11 @@ def job_list(request):
|
||||
|
||||
@require_POST
|
||||
def start_queue(request):
|
||||
logger.info('queue:start_request:start')
|
||||
|
||||
has_planned = TimelapseJob.objects.filter(status=TimelapseJob.Status.PLANNED).exists()
|
||||
if not has_planned:
|
||||
logger.info('queue:start_request:done no_planned_jobs=true')
|
||||
return redirect(f"{reverse('camlaps:job_list')}?started=none")
|
||||
|
||||
cmd = [sys.executable, 'manage.py', 'run_timelapse_worker', '--once']
|
||||
@@ -83,8 +89,10 @@ def start_queue(request):
|
||||
|
||||
try:
|
||||
subprocess.Popen(cmd, **kwargs)
|
||||
logger.info('queue:start_request:done worker_started=true')
|
||||
return redirect(f"{reverse('camlaps:job_list')}?started=worker")
|
||||
except Exception:
|
||||
logger.exception('queue:start_request:error')
|
||||
return redirect(f"{reverse('camlaps:job_list')}?started=error")
|
||||
|
||||
|
||||
|
||||
@@ -143,3 +143,35 @@ USE_TZ = True
|
||||
# https://docs.djangoproject.com/en/6.0/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
LOG_DIR = BASE_DIR / 'logs'
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': False,
|
||||
'formatters': {
|
||||
'standard': {
|
||||
'format': '%(asctime)s | %(levelname)s | %(name)s | %(message)s',
|
||||
},
|
||||
},
|
||||
'handlers': {
|
||||
'console': {
|
||||
'class': 'logging.StreamHandler',
|
||||
'formatter': 'standard',
|
||||
},
|
||||
'camlaps_file': {
|
||||
'class': 'logging.FileHandler',
|
||||
'filename': str(LOG_DIR / 'camlaps.log'),
|
||||
'formatter': 'standard',
|
||||
'encoding': 'utf-8',
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'camlaps': {
|
||||
'handlers': ['console', 'camlaps_file'],
|
||||
'level': 'INFO',
|
||||
'propagate': False,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user