From dd678940dfdc71b2e134434e6c10ee444d753534 Mon Sep 17 00:00:00 2001 From: weideguo <2515717245@qq.com> Date: Tue, 12 Jul 2022 10:55:33 +0800 Subject: [PATCH] =?UTF-8?q?mysql=E8=A1=A8=E7=A9=BA=E9=97=B4=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=89=80=E6=9C=89=E7=9A=84=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/db_diagnostic.py | 9 ++++++--- sql/engines/mysql.py | 12 ++++++++++-- sql/engines/tests.py | 7 +++++++ sql/templates/dbdiagnostic.html | 8 +++++--- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/sql/db_diagnostic.py b/sql/db_diagnostic.py index 152e45db9a..8f57fde337 100644 --- a/sql/db_diagnostic.py +++ b/sql/db_diagnostic.py @@ -126,7 +126,8 @@ def kill_session(request): @permission_required('sql.tablespace_view', raise_exception=True) def tablesapce(request): instance_name = request.POST.get('instance_name') - + offset = int(request.POST.get('offset',0)) + limit = int(request.POST.get('limit',14)) try: instance = user_instances(request.user).get(instance_name=instance_name) except Instance.DoesNotExist: @@ -139,7 +140,9 @@ def tablesapce(request): if AliyunRdsConfig.objects.filter(instance=instance, is_enable=True).exists(): result = aliyun_sapce_status(request) else: - query_result = query_engine.tablesapce() + query_result = query_engine.tablesapce(offset,limit) + r = query_engine.tablesapce_num() + total = r.rows[0][0] else: result = {'status': 1, 'msg': '暂时不支持{}类型数据库的表空间信息查询'.format(instance.db_type), 'data': []} return HttpResponse(json.dumps(result), content_type='application/json') @@ -147,7 +150,7 @@ def tablesapce(request): if query_result: if not query_result.error: table_space = query_result.to_dict() - result = {'status': 0, 'msg': 'ok', 'rows': table_space} + result = {'status': 0, 'msg': 'ok', 'rows': table_space, 'total':total} else: result = {'status': 1, 'msg': query_result.error} # 返回查询结果 diff --git a/sql/engines/mysql.py b/sql/engines/mysql.py index 0236cd833c..91086dd7ea 100644 --- a/sql/engines/mysql.py +++ b/sql/engines/mysql.py @@ -478,7 +478,7 @@ def kill(self, thread_ids): kill_sql = kill_sql + row[0] return self.execute('information_schema', kill_sql) - def tablesapce(self): + def tablesapce(self, offset=0, row_count=14): """获取表空间信息""" sql = ''' SELECT @@ -494,7 +494,15 @@ def tablesapce(self): FROM information_schema.tables WHERE table_schema NOT IN ('information_schema', 'performance_schema', 'mysql', 'test', 'sys') ORDER BY total_size DESC - LIMIT 14;''' + LIMIT {},{};'''.format(offset, row_count) + return self.query('information_schema', sql) + + def tablesapce_num(self): + """获取表空间数量""" + sql = ''' + SELECT count(*) + FROM information_schema.tables + WHERE table_schema NOT IN ('information_schema', 'performance_schema', 'mysql', 'test', 'sys')''' return self.query('information_schema', sql) def trxandlocks(self): diff --git a/sql/engines/tests.py b/sql/engines/tests.py index 1b4534aea2..14da252e3a 100644 --- a/sql/engines/tests.py +++ b/sql/engines/tests.py @@ -569,6 +569,13 @@ def test_tablesapce(self, _query): r = new_engine.tablesapce() self.assertIsInstance(r, ResultSet) + @patch.object(MysqlEngine, 'query') + def test_tablesapce_num(self, _query): + new_engine = MysqlEngine(instance=self.ins1) + _query.return_value = ResultSet() + r = new_engine.tablesapce_num() + self.assertIsInstance(r, ResultSet) + @patch.object(MysqlEngine, 'query') @patch('MySQLdb.connect') def test_trxandlocks(self, _connect, _query): diff --git a/sql/templates/dbdiagnostic.html b/sql/templates/dbdiagnostic.html index d246e3ff83..2e58a301c3 100644 --- a/sql/templates/dbdiagnostic.html +++ b/sql/templates/dbdiagnostic.html @@ -340,10 +340,10 @@