Skip to content

Commit dc5cec3

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

File tree

3 files changed

+37
-6
lines changed

3 files changed

+37
-6
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
from backend.db_meta.models import Cluster
2121
from backend.db_services.dbbase.constants import ResourceType
2222
from backend.db_services.dbbase.resources.serializers import ListClusterEntriesSLZ, ListResourceSLZ
23+
from backend.db_services.dbbase.utils import get_local_charset
2324
from backend.db_services.ipchooser.query.resource import ResourceQueryHelper
25+
from backend.db_services.mysql.sql_import.constants import SQLCharset
2426
from backend.db_services.redis.resources.redis_cluster.query import RedisListRetrieveResource
2527
from backend.dbm_init.constants import CC_APP_ABBR_ATTR
2628
from backend.ticket.builders.common.field import DBTimezoneField
@@ -191,8 +193,10 @@ class Meta:
191193

192194
class WebConsoleSerializer(serializers.Serializer):
193195
class OptionsSerializer(serializers.Serializer):
194-
time_zone = serializers.CharField(help_text=_("时区"), default="utc+8")
195-
character_set = serializers.CharField(help_text=_("字符集"), default="default")
196+
timezone = serializers.ChoiceField(
197+
help_text=_("时区"), choices=SQLCharset.get_choices(), default=SQLCharset.DEFAULT
198+
)
199+
charset = serializers.CharField(help_text=_("字符集"), default=get_local_charset())
196200

197201
cluster_id = serializers.IntegerField(help_text=_("集群ID"))
198202
cmd = serializers.CharField(help_text=_("sql语句"))
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# -*- coding: utf-8 -*-Add commentMore actions
2+
"""
3+
TencentBlueKing is pleased to support the open source community by making 蓝鲸智云-DB管理系统(BlueKing-BK-DBM) available.
4+
Copyright (C) 2017-2023 THL A29 Limited, a Tencent company. All rights reserved.
5+
Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at https://opensource.org/licenses/MIT
7+
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
8+
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
9+
specific language governing permissions and limitations under the License.
10+
"""
11+
from datetime import datetime, timezone
12+
13+
14+
def get_local_charset():
15+
16+
now = datetime.now(timezone.utc).astimezone()
17+
# 提取时区偏移并格式化
18+
offset = now.utcoffset()
19+
total_seconds = offset.total_seconds()
20+
hours = int(total_seconds // 3600)
21+
minutes = int(abs(total_seconds) % 3600 // 60)
22+
23+
# 格式化为"+HH:MM"(确保小时和分钟都是两位数)
24+
formatted_offset = f"{'+' if hours >= 0 else '-'}{abs(hours):02d}:{minutes:02d}"
25+
return formatted_offset

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,11 @@
6161
WebConsoleResponseSerializer,
6262
WebConsoleSerializer,
6363
)
64+
from backend.db_services.dbbase.utils import get_local_charset
6465
from backend.db_services.ipchooser.query.resource import ResourceQueryHelper
6566
from backend.db_services.mongodb.cluster.handlers import ClusterServiceHandler as MongoClusterServiceHandler
6667
from backend.db_services.mysql.remote_service.handlers import RemoteServiceHandler
68+
from backend.db_services.mysql.sql_import.constants import SQLCharset
6769
from backend.db_services.redis.toolbox.handlers import ToolboxHandler
6870
from backend.iam_app.handlers.drf_perm.base import DBManagePermission
6971
from backend.iam_app.handlers.drf_perm.cluster import (
@@ -332,10 +334,10 @@ def webconsole(self, request):
332334

333335
# mysql / tendbcluster
334336
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"
337+
if not data.get("options", {}).get("timezone"):
338+
data["options"]["timezone"] = get_local_charset()
339+
if not data.get("options", {}).get("charset"):
340+
data["options"]["charset"] = SQLCharset.DEFAULT.value
339341
data = RemoteServiceHandler(bk_biz_id=cluster.bk_biz_id).webconsole_rpc(**data)
340342
# redis
341343
elif db_type in ClusterType.redis_cluster_types():

0 commit comments

Comments
 (0)