Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from backend import env
from backend.components.bklog.client import BKLogApi
from backend.utils.string import pascal_to_snake
from backend.utils.tenant import TenantHandler
from backend.utils.time import datetime2str


Expand All @@ -37,6 +38,7 @@ def _get_log_from_bklog(bk_biz_id, collector, start_time, end_time, query_string
"start": 0,
"size": 6000,
"sort_list": [["dtEventTimeStamp", "asc"], ["gseIndex", "asc"], ["iterationIndex", "asc"]],
"tenant_id": TenantHandler.get_tenant_id_by_biz(bk_biz_id),
},
use_admin=True,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from backend import env
from backend.components.bklog.client import BKLogApi
from backend.utils.string import pascal_to_snake
from backend.utils.tenant import TenantHandler
from backend.utils.time import datetime2str

logger = logging.getLogger("root")
Expand All @@ -43,6 +44,7 @@ def _get_log_from_bklog(
"start": 0,
"size": 6000,
"sort_list": [["dtEventTimeStamp", "asc"], ["gseIndex", "asc"], ["iterationIndex", "asc"]],
"tenant_id": TenantHandler.get_tenant_id_by_biz(env.DBA_APP_BK_BIZ_ID),
},
use_admin=True,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.25 on 2025-10-11 10:20

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("db_periodic_task", "0013_auto_20250917_2108"),
]

operations = [
migrations.AddField(
model_name="mysqlbackuprecovertask",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
]
83 changes: 83 additions & 0 deletions dbm-ui/backend/db_report/migrations/0020_auto_20251011_1758.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Generated by Django 3.2.25 on 2025-10-11 09:58

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("db_report", "0019_auto_20250925_1446"),
]

operations = [
migrations.AddField(
model_name="checksumcheckreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="dbmonheartbeatreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="failoverdrillreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="metacheckreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="mongodbbackupcheckreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="mysqlbackupcheckreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="redisbackupcheckreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlservercheckappsettingreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlservercheckjobsyncreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlserverchecklinkserverreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlserverchecksysjobstatureport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlservercheckusersyncreport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlserverfullbackupinforeport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
migrations.AddField(
model_name="sqlserverlogbackupinforeport",
name="tenant_id",
field=models.CharField(default="default", help_text="租户ID", max_length=128),
),
]
18 changes: 18 additions & 0 deletions dbm-ui/backend/db_report/report_basemodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@
from django.utils.translation import ugettext_lazy as _

from backend.bk_web.models import AuditedModel
from backend.utils.tenant import TenantHandler


class BaseReportManager(models.Manager):
def create(self, **kwargs):
# 获取租户id
bk_biz_id = kwargs.get("bk_biz_id")
kwargs["tenant_id"] = TenantHandler.get_tenant_id_by_biz(bk_biz_id)
return super().create(**kwargs)

def bulk_create(self, objs, **kwargs):
for obj in objs:
if not obj.tenant_id:
obj.tenant_id = TenantHandler.get_tenant_id_by_biz(obj.bk_biz_id)
return super().bulk_create(objs, **kwargs)


class BaseReportABS(AuditedModel):
Expand All @@ -22,6 +37,9 @@ class BaseReportABS(AuditedModel):
state = models.CharField(default="", max_length=64, help_text=_("巡检结果状态"))
failed_days = models.IntegerField(default=0, help_text=_("失败持续天数"))
msg = models.TextField(default="", help_text=_("备注信息"))
tenant_id = models.CharField(help_text=_("租户ID"), max_length=128, default="default")

objects = BaseReportManager()

class Meta:
abstract = True
3 changes: 3 additions & 0 deletions dbm-ui/backend/db_report/report_baseview.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ def summary_state_count(self):
state_map.update({info["state"]: info["count"] for info in state_count_info})
return state_map

def get_queryset(self):
return self.filter_by_tenant_id(super().get_queryset())

def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
response.data["name"] = self.report_name or ReportType.get_choice_label(self.report_type)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
specific language governing permissions and limitations under the License.
"""
from django.core.management.base import BaseCommand
from django.utils.translation import gettext_lazy as _

from backend.utils.tenant import TenantHandler

Expand All @@ -18,7 +19,7 @@ class Command(BaseCommand):

def add_arguments(self, parser):
# 添加必填参数
parser.add_argument("tenant_id", type=str, help="租户id")
parser.add_argument("tenant_id", type=str, help=_("租户id"))

def handle(self, *args, **options):
tenant_id = options["tenant_id"]
Expand Down
5 changes: 5 additions & 0 deletions dbm-ui/backend/flow/utils/sqlserver/sqlserver_bk_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from backend.db_meta.enums import ClusterType
from backend.db_services.version.constants import SqlserverVersion
from backend.flow.consts import ConfigTypeEnum
from backend.utils.tenant import TenantHandler


def get_module_infos(bk_biz_id: int, db_module_id: int, cluster_type: ClusterType) -> dict:
Expand All @@ -31,6 +32,7 @@ def get_module_infos(bk_biz_id: int, db_module_id: int, cluster_type: ClusterTyp
"conf_type": "deploy",
"namespace": cluster_type,
"format": FormatType.MAP,
"tenant_id": TenantHandler.get_tenant_id_by_biz(bk_biz_id),
}
)["content"]
return data
Expand Down Expand Up @@ -59,6 +61,7 @@ def get_sqlserver_config(
"namespace": cluster_type,
"format": FormatType.MAP_LEVEL,
"method": ReqType.GENERATE_AND_PUBLISH,
"tenant_id": TenantHandler.get_tenant_id_by_biz(bk_biz_id),
}
)
return data["content"]
Expand All @@ -82,6 +85,7 @@ def get_sqlserver_backup_config(bk_biz_id: int, cluster_domain: str, db_module_i
"conf_type": "backup",
"namespace": "sqlservercomm",
"format": FormatType.MAP,
"tenant_id": TenantHandler.get_tenant_id_by_biz(bk_biz_id),
}
)["content"]
return data
Expand All @@ -106,6 +110,7 @@ def get_sqlserver_alarm_config(bk_biz_id: int, cluster_domain: str, db_module_id
"conf_type": "alarm",
"namespace": "sqlservercomm",
"format": FormatType.MAP,
"tenant_id": TenantHandler.get_tenant_id_by_biz(bk_biz_id),
}
)["content"]
init_sql = data.pop("init_sql")
Expand Down
18 changes: 16 additions & 2 deletions dbm-ui/backend/flow/utils/sqlserver/sqlserver_db_function.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
)
from backend.flow.utils.mysql.db_table_filter import DbTableFilter
from backend.flow.utils.mysql.get_mysql_sys_user import generate_mysql_tmp_user
from backend.utils.tenant import TenantHandler

logger = logging.getLogger("flow")

Expand Down Expand Up @@ -681,6 +682,10 @@ def insert_sqlserver_config(
else:
sync_mode = ""
drop_sql = "use Monitor truncate table [Monitor].[dbo].[APP_SETTING]"

# 获取租户id
tenant_id = TenantHandler.get_tenant_id_by_biz(cluster.bk_biz_id)

for storage in storages:
if is_get_old_backup_config:
# 按照需求获取旧的备份配置
Expand All @@ -690,6 +695,7 @@ def insert_sqlserver_config(
"addresses": [storage.ip_port],
"cmds": [f"select * from [{SQLSERVER_CUSTOM_SYS_DB}].[dbo].[BACKUP_SETTING_OLD]"],
"force": False,
"tenant_id": tenant_id,
}
)
if ret[0]["error_msg"]:
Expand Down Expand Up @@ -856,7 +862,11 @@ def fix_app_setting_data(cluster: Cluster, instance: StorageInstance, sync_mode:
[MASTER_IP] = '{master.machine.ip}',
[MASTER_PORT]= {master.port}
"""
ret = base_sqlserver_drs(bk_cloud_id=cluster.bk_cloud_id, instances=[instance.ip_port], sqls=[sql])
ret = base_sqlserver_drs(
bk_cloud_id=cluster.bk_cloud_id,
instances=[instance.ip_port],
sqls=[sql],
)
if ret[0]["error_msg"]:
return False, f"fix app_setting failed: {ret[0]['error_msg']}"

Expand All @@ -871,7 +881,11 @@ def check_sys_job_status(cluster: Cluster, instance: StorageInstance):
"select name, enabled from msdb.dbo.sysjobs where name like 'TC_%' and name "
"not in('TC_SNAPSHOT_DAY','TC_SNAPSHOT_ONE','TC_REPORT_LOAD')"
)
ret = base_sqlserver_drs(bk_cloud_id=cluster.bk_cloud_id, instances=[instance.ip_port], sqls=[sql])
ret = base_sqlserver_drs(
bk_cloud_id=cluster.bk_cloud_id,
instances=[instance.ip_port],
sqls=[sql],
)
msg = ""
if ret[0]["error_msg"]:
msg = f"[{instance.ip_port}] select sys job failed: {ret[0]['error_msg']}"
Expand Down
14 changes: 14 additions & 0 deletions dbm-ui/backend/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@
from backend.configuration.constants import DBType
from backend.db_meta.api.cluster.tendbha.handler import TenDBHAClusterHandler
from backend.db_meta.models import AppCache, BKCity, DBModule, LogicalCity, Spec
from backend.db_meta.models.app import TenantCache
from backend.db_package.constants import PackageType
from backend.db_package.models import Package
from backend.tests.mock_data import constant
from backend.tests.mock_data.components.cc import CCInitMock
from backend.tests.mock_data.constant import INIT_SPEC_DATA, INIT_TENDBHA_CREATE_API_DATA
from backend.ticket.handler import TicketHandler


def mock_bk_user(username):
Expand Down Expand Up @@ -145,3 +147,15 @@ def init_mysql_cluster():


mark_global_skip = pytest.mark.skipif(os.environ.get("GLOBAL_SKIP") == "true", reason="disable in landun WIP")


# 初始化租户的流程配置
def pytest_configure(config):
tenant_list = TenantCache.objects.all()
if not tenant_list:
return
for tenant in tenant_list:
try:
TicketHandler.ticket_flow_config_init(tenant_id=tenant.tenant_id)
except Exception as e:
print(f"Error initializing tenant {tenant.tenant_id}: {e}")
Loading