Skip to content

Commit

Permalink
Revert "移除配置信息的缓存依赖"
Browse files Browse the repository at this point in the history
This reverts commit 7fd62b2.

# Conflicts:
#	common/config.py
#	common/templates/config.html
  • Loading branch information
nick2wang committed Mar 5, 2022
1 parent 6ec2537 commit bb4d1f3
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 34 deletions.
84 changes: 51 additions & 33 deletions common/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from common.utils.permission import superuser_required
from sql.models import Config
from django.db import transaction
from django.core.cache import cache

logger = logging.getLogger('default')

Expand All @@ -18,20 +19,37 @@ def __init__(self):
self.get_all_config()

def get_all_config(self):
# 优先获取缓存数据
try:
# 获取系统配置信息
all_config = Config.objects.all().values('item', 'value')
sys_config = {}
for items in all_config:
if items['value'] in ('true', 'True'):
items['value'] = True
elif items['value'] in ('false', 'False'):
items['value'] = False
sys_config[items['item']] = items['value']
self.sys_config = sys_config
sys_config = cache.get('sys_config')
except Exception as m:
logger.error(f"获取系统配置信息失败:{m}{traceback.format_exc()}")
self.sys_config = {}
sys_config = None
logger.error(f"读取缓存失败:{m}{traceback.format_exc()}")

# 缓存获取失败从数据库获取并且尝试更新缓存
if sys_config:
self.sys_config = sys_config
else:
try:
# 获取系统配置信息
all_config = Config.objects.all().values('item', 'value')
sys_config = {}
for items in all_config:
if items['value'] in ('true', 'True'):
items['value'] = True
elif items['value'] in ('false', 'False'):
items['value'] = False
sys_config[items['item']] = items['value']
self.sys_config = sys_config
except Exception as m:
logger.error(f"获取系统配置信息失败:{m}{traceback.format_exc()}")
self.sys_config = {}
else:
try:
# 更新缓存
cache.set('sys_config', self.sys_config, timeout=None)
except Exception as m:
logger.error(f"更新缓存失败:{m}{traceback.format_exc()}")

def get(self, key, default_value=None):
value = self.sys_config.get(key, default_value)
Expand All @@ -42,31 +60,30 @@ def get(self, key, default_value=None):

def set(self, key, value):
if value is True:
db_value = 'true'
value = 'true'
elif value is False:
db_value = 'false'
else:
db_value = value
obj, created = Config.objects.update_or_create(item=key, defaults={"value": db_value})
if created:
self.sys_config.update({key: value})
value = 'false'
config_item, created = Config.objects.get_or_create(item=key)
config_item.value = value
config_item.save()
# 删除并更新缓存
try:
cache.delete('sys_config')
except Exception as m:
logger.error(f"删除缓存失败:{m}{traceback.format_exc()}")
finally:
self.get_all_config()

def replace(self, configs):
result = {'status': 0, 'msg': 'ok', 'data': []}

# 清空并替换
try:
self.purge()
with transaction.atomic():
self.purge()
config_items = []
for items in json.loads(configs):
if items['key'].strip() == 'notify_phase_control':
notify_status = {phase: 'true' if phase in items['value'].strip().split(',') else 'false'
for phase in ['Apply', 'Pass', 'Execute', 'Cancel']}
Config.objects.create(item=items['key'].strip(), value=json.dumps(notify_status))
else:
config_items.append(Config(item=items['key'].strip(),
value=str(items['value']).strip()))
Config.objects.bulk_create(config_items)
Config.objects.bulk_create(
[Config(item=items['key'].strip(),
value=str(items['value']).strip()) for items in json.loads(configs)])
except Exception as e:
logger.error(traceback.format_exc())
result['status'] = 1
Expand All @@ -78,11 +95,12 @@ def replace(self, configs):
def purge(self):
"""清除所有配置, 供测试以及replace方法使用"""
try:
with transaction.atomic():
Config.objects.all().delete()
self.sys_config = {}
self.sys_config = {}
cache.delete('sys_config')
except Exception as m:
logger.error(f"删除缓存失败:{m}{traceback.format_exc()}")
with transaction.atomic():
Config.objects.all().delete()


# 修改系统配置
Expand Down
2 changes: 1 addition & 1 deletion sql/templates/binlog2sql.html
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ <h5 class="control-label text-bold">对象过滤:</h5>
<h5 class="control-label text-bold" style="color: red">
<b>前端展示数量由解析范围参数控制如果勾选了保存到文件则会异步获取完整的SQL文件
保存到项目downloads目录起始时间过滤存在性能问题建议使用position进行过滤
在开启消息通知后执行结束会发送通知给操作人</b>
在开启邮件通知后执行结束会通知给操作人</b>
</h5>
<br>
<table id="tb-binlog2sql" data-toggle="table" class="table table-condensed"
Expand Down

0 comments on commit bb4d1f3

Please sign in to comment.