You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
|
|
# Copyright (C) 2018 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import os
|
|
import inspect
|
|
import logging
|
|
from . import models
|
|
from cvat.settings.base import LOGGING
|
|
|
|
|
|
class TaskLoggerStorage:
|
|
def __init__(self):
|
|
self._storage = dict()
|
|
self._formatter = logging.getLogger('task')
|
|
|
|
def __getitem__(self, tid):
|
|
if tid not in self._storage:
|
|
self._storage[tid] = self._create_task_logger(tid)
|
|
return self._storage[tid]
|
|
|
|
def _create_task_logger(self, tid):
|
|
task = self._get_task(tid)
|
|
if task is not None:
|
|
configuration = LOGGING.copy()
|
|
handler_configuration = configuration['handlers']['file']
|
|
handler_configuration['filename'] = task.get_log_path()
|
|
configuration['handlers'] = {
|
|
'file_{}'.format(tid): handler_configuration
|
|
}
|
|
configuration['loggers'] = {
|
|
'task_{}'.format(tid): {
|
|
'handlers': ['file_{}'.format(tid)],
|
|
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
|
|
}
|
|
}
|
|
|
|
logging.config.dictConfig(configuration)
|
|
logger = logging.getLogger('task_{}'.format(tid))
|
|
return logger
|
|
else:
|
|
raise Exception('Key must be task indentificator')
|
|
|
|
def _get_task(self, tid):
|
|
try:
|
|
return models.Task.objects.get(pk=tid)
|
|
except Exception:
|
|
return None
|
|
|
|
|
|
class JobLoggerStorage:
|
|
def __init__(self):
|
|
self._storage = dict()
|
|
|
|
def __getitem__(self, jid):
|
|
if jid not in self._storage:
|
|
self._storage[jid] = self._get_task_logger(jid)
|
|
return self._storage[jid]
|
|
|
|
def _get_task_logger(self, jid):
|
|
job = self._get_job(jid)
|
|
if job is not None:
|
|
return task_logger[job.segment.task.id]
|
|
else:
|
|
raise Exception('Key must be job identificator')
|
|
|
|
def _get_job(self, jid):
|
|
try:
|
|
return models.Job.objects.select_related("segment__task").get(id=jid)
|
|
except Exception:
|
|
return None
|
|
|
|
task_logger = TaskLoggerStorage()
|
|
job_logger = JobLoggerStorage()
|