Skip to content

Commit fd483dc

Browse files
feat(backend): mysql/tendb的webconsole添加时区和字符集查询 #11233
1 parent 5cf0979 commit fd483dc

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

dbm-ui/backend/db_services/dbbase/cluster/handlers.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,17 @@ def _get_instance_objs(self, instances: List[DBInstance]):
366366
return instance_objs
367367

368368
@staticmethod
369-
def console_rpc(instances: list, cmd: str, db_query: bool, rpc_function: Callable, is_check: bool = True):
369+
def console_rpc(
370+
instances: list, cmd: str, db_query: bool, rpc_function: Callable, is_check: bool = True, **options
371+
):
370372
"""
371373
通用的RPC命令执行器,只支持select语句
372374
@param instances: 实例信息
373375
@param cmd: 执行命令
374376
@param db_query: 是否只允许查询系统库 -- DB自助查询
375377
@param rpc_function: 用于执行RPC请求的函数
378+
@param is_check: 校验select语句
379+
@param options: 操作合集项
376380
"""
377381
# 校验select语句
378382
if is_check:
@@ -387,11 +391,15 @@ def console_rpc(instances: list, cmd: str, db_query: bool, rpc_function: Callabl
387391
instance_rpc_results: List = []
388392

389393
if ClusterServiceHandler.__check_special_sql(cmd):
390-
instance_rpc_results = ClusterServiceHandler.__dbconsole_special_query(bk_cloud__instances_map, cmd)
394+
instance_rpc_results = ClusterServiceHandler.__dbconsole_special_query(
395+
bk_cloud__instances_map, cmd, **options
396+
)
391397
else:
392398
for bk_cloud_id, addresses in bk_cloud__instances_map.items():
393399
# 使用传入的rpc_function进行rpc调用
394-
rpc_results = rpc_function({"bk_cloud_id": bk_cloud_id, "addresses": addresses, "cmds": [cmd]})
400+
params = {"bk_cloud_id": bk_cloud_id, "addresses": addresses, "cmds": [cmd]}
401+
params.update(options)
402+
rpc_results = rpc_function(params)
395403

396404
cmd_results = [
397405
{
@@ -406,7 +414,7 @@ def console_rpc(instances: list, cmd: str, db_query: bool, rpc_function: Callabl
406414
return instance_rpc_results
407415

408416
@classmethod
409-
def __dbconsole_special_query(cls, bk_cloud__instances_map, cmd):
417+
def __dbconsole_special_query(cls, bk_cloud__instances_map, cmd, **options):
410418
"""
411419
用于dbaconsole的特殊查询,目前复用webconsole,因此不支持单次多条查询
412420
webconsole账户也不支持查询主从同步信息
@@ -439,7 +447,9 @@ def __dbconsole_special_query(cls, bk_cloud__instances_map, cmd):
439447

440448
instance_rpc_results: List = []
441449
for bk_cloud_id, addresses in bk_cloud__instances_map.items():
442-
rpc_results = DRSApi.rpc({"bk_cloud_id": bk_cloud_id, "addresses": addresses, "cmds": cmds})
450+
params = {"bk_cloud_id": bk_cloud_id, "addresses": addresses, "cmds": cmds}
451+
params.update(options)
452+
rpc_results = DRSApi.rpc(params)
443453
cmd_results = [
444454
{
445455
"instance": res["address"],

dbm-ui/backend/db_services/dbbase/serializers.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,18 @@ class Meta:
190190

191191

192192
class WebConsoleSerializer(serializers.Serializer):
193+
class OptionsSerializer(serializers.Serializer):
194+
time_zone = serializers.CharField(help_text=_("时区"), default="utc+8")
195+
character_set = serializers.CharField(help_text=_("字符集"), default="default")
196+
193197
cluster_id = serializers.IntegerField(help_text=_("集群ID"))
194198
cmd = serializers.CharField(help_text=_("sql语句"))
195199
# redis 额外参数
196200
db_num = serializers.IntegerField(help_text=_("数据库编号(redis 额外参数)"), required=False)
197201
raw = serializers.BooleanField(help_text=_("源编码(redis 额外参数)"), required=False)
198202
# mongodb 额外参数
199203
session_time = DBTimezoneField(help_text=_("会话创建时间(mongodb 额外参数)"), required=False)
204+
options = OptionsSerializer(help_text=_("额外操作项合集"), required=False, default={})
200205

201206

202207
class DBConsoleSerializer(serializers.Serializer):

dbm-ui/backend/db_services/dbbase/views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,10 @@ def webconsole(self, request):
332332

333333
# mysql / tendbcluster
334334
if db_type in [DBType.MySQL, DBType.TenDBCluster]:
335+
if not data.get("options", {}).get("time_zone"):
336+
data["options"]["time_zone"] = "+8:00"
337+
if not data.get("options", {}).get("character_set"):
338+
data["options"]["character_set"] = "default"
335339
data = RemoteServiceHandler(bk_biz_id=cluster.bk_biz_id).webconsole_rpc(**data)
336340
# redis
337341
elif db_type in ClusterType.redis_cluster_types():

dbm-ui/backend/db_services/mysql/remote_service/handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ def webconsole_rpc(self, cluster_id: int, cmd: str, **kwargs):
284284
try:
285285
instances = [{"bk_cloud_id": cluster.bk_cloud_id, "instance": remote_address}]
286286
rpc_results = ClusterServiceHandler.console_rpc(
287-
instances, cmd, db_query=False, rpc_function=DRSApi.webconsole_rpc
287+
instances, cmd, db_query=False, rpc_function=DRSApi.webconsole_rpc, **kwargs
288288
)
289289
return {"query": rpc_results[0]["table_data"], "error_msg": rpc_results[0]["error_msg"]}
290290
except SQLParseBaseException as e:

0 commit comments

Comments
 (0)