mirror of https://github.com/jumpserver/jumpserver
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from django.conf import settings
|
|
from django.core.cache import cache
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from common.utils import get_logger
|
|
from .base import BaseOperateStorage
|
|
from .es import OperateLogStore as ESOperateLogStore
|
|
from .db import OperateLogStore as DBOperateLogStore
|
|
|
|
|
|
logger = get_logger(__file__)
|
|
|
|
_global_op_log_storage: None | ESOperateLogStore | DBOperateLogStore = None
|
|
op_log_type_mapping = {
|
|
'server': DBOperateLogStore, 'es': ESOperateLogStore
|
|
}
|
|
|
|
|
|
def _send_es_unavailable_alarm_msg():
|
|
from terminal.notifications import StorageConnectivityMessage
|
|
from terminal.const import CommandStorageType
|
|
|
|
key = 'OPERATE_LOG_ES_UNAVAILABLE_KEY'
|
|
if cache.get(key):
|
|
return
|
|
|
|
cache.set(key, 1, 60)
|
|
errors = [{
|
|
'msg': _("Connect failed"), 'name': f"{_('Operate log')}",
|
|
'type': CommandStorageType.es.label
|
|
}]
|
|
StorageConnectivityMessage(errors).publish_async()
|
|
|
|
|
|
def refresh_log_storage():
|
|
global _global_op_log_storage
|
|
_global_op_log_storage = None
|
|
|
|
if settings.OPERATE_LOG_ELASTICSEARCH_CONFIG.get('HOSTS'):
|
|
try:
|
|
config = settings.OPERATE_LOG_ELASTICSEARCH_CONFIG
|
|
log_storage = op_log_type_mapping['es'](config)
|
|
_global_op_log_storage = log_storage
|
|
except Exception as e:
|
|
_send_es_unavailable_alarm_msg()
|
|
logger.warning('Invalid logs storage type: es, error: %s' % str(e))
|
|
|
|
if not _global_op_log_storage:
|
|
_global_op_log_storage = op_log_type_mapping['server']()
|
|
|
|
|
|
def get_operate_log_storage():
|
|
if _global_op_log_storage is None:
|
|
refresh_log_storage()
|
|
|
|
log_storage = _global_op_log_storage
|
|
if not log_storage.ping(timeout=3):
|
|
if log_storage.get_type() == 'es':
|
|
_send_es_unavailable_alarm_msg()
|
|
logger.warning('Switch default operate log storage.')
|
|
log_storage = op_log_type_mapping['server']()
|
|
return log_storage
|