This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/data/logs_model/__init__.py
2019-11-12 11:09:47 -05:00

64 lines
1.8 KiB
Python

import logging
from data.logs_model.table_logs_model import TableLogsModel
from data.logs_model.document_logs_model import DocumentLogsModel
from data.logs_model.combined_model import CombinedLogsModel
logger = logging.getLogger(__name__)
def _transition_model(*args, **kwargs):
return CombinedLogsModel(
DocumentLogsModel(*args, **kwargs),
TableLogsModel(*args, **kwargs),
)
_LOG_MODELS = {
'database': TableLogsModel,
'transition_reads_both_writes_es': _transition_model,
'elasticsearch': DocumentLogsModel,
}
_PULL_LOG_KINDS = {'pull_repo', 'repo_verb'}
class LogsModelProxy(object):
def __init__(self):
self._model = None
def initialize(self, model):
self._model = model
logger.info('===============================')
logger.info('Using logs model `%s`', self._model)
logger.info('===============================')
def __getattr__(self, attr):
if not self._model:
raise AttributeError("LogsModelProxy is not initialized")
return getattr(self._model, attr)
logs_model = LogsModelProxy()
def configure(app_config):
logger.debug('Configuring log lodel')
model_name = app_config.get('LOGS_MODEL', 'database')
model_config = app_config.get('LOGS_MODEL_CONFIG', {})
def should_skip_logging(kind_name, namespace_name, is_free_namespace):
if namespace_name and namespace_name in app_config.get('DISABLED_FOR_AUDIT_LOGS', {}):
return True
if kind_name in _PULL_LOG_KINDS:
if namespace_name and namespace_name in app_config.get('DISABLED_FOR_PULL_LOGS', {}):
return True
if app_config.get('FEATURE_DISABLE_PULL_LOGS_FOR_FREE_NAMESPACES'):
if is_free_namespace:
return True
return False
model_config['should_skip_logging'] = should_skip_logging
logs_model.initialize(_LOG_MODELS[model_name](**model_config))