39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import sys
|
|
import traceback
|
|
|
|
import structlog
|
|
from django.core.management.base import BaseCommand
|
|
from django.utils import timezone
|
|
|
|
from vbv_lernwelt.core.models import JobLog
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
# pylint: disable=abstract-method
|
|
class LoggedCommand(BaseCommand):
|
|
def execute(self, *args, **options):
|
|
name = getattr(self, "name", "")
|
|
if not name:
|
|
name = sys.argv[1]
|
|
|
|
logger.info("start LoggedCommand", job_name=name, label="job_log")
|
|
|
|
self.job_log = JobLog.objects.create(job_name=name)
|
|
try:
|
|
super(LoggedCommand, self).execute(*args, **options)
|
|
self.job_log.refresh_from_db()
|
|
self.job_log.ended = timezone.now()
|
|
self.job_log.success = True
|
|
self.job_log.save()
|
|
logger.info(
|
|
"LoggedCommand successfully ended", job_name=name, label="job_log"
|
|
)
|
|
except Exception as e:
|
|
self.job_log.refresh_from_db()
|
|
self.job_log.error_message = str(e)
|
|
self.job_log.stack_trace = traceback.format_exc()
|
|
self.job_log.save()
|
|
logger.error("LoggedCommand failed", job_name=name, label="job_log")
|
|
raise e
|