mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 05:16:00 +00:00
feat: mssql server summary
This commit is contained in:
@@ -9,6 +9,7 @@ const lock = new AsyncLock();
|
|||||||
const { tediousConnect, tediousQueryCore, tediousReadQuery, tediousStream } = require('./tediousDriver');
|
const { tediousConnect, tediousQueryCore, tediousReadQuery, tediousStream } = require('./tediousDriver');
|
||||||
const { nativeConnect, nativeQueryCore, nativeReadQuery, nativeStream } = require('./nativeDriver');
|
const { nativeConnect, nativeQueryCore, nativeReadQuery, nativeStream } = require('./nativeDriver');
|
||||||
const { getLogger } = global.DBGATE_PACKAGES['dbgate-tools'];
|
const { getLogger } = global.DBGATE_PACKAGES['dbgate-tools'];
|
||||||
|
const sql = require('./sql');
|
||||||
|
|
||||||
const logger = getLogger('mssqlDriver');
|
const logger = getLogger('mssqlDriver');
|
||||||
|
|
||||||
@@ -148,9 +149,49 @@ const driver = {
|
|||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
async listDatabases(dbhan) {
|
async listDatabases(dbhan) {
|
||||||
const { rows } = await this.query(dbhan, 'SELECT name FROM sys.databases order by name');
|
const { rows } = await this.query(dbhan, sql.listDatabases);
|
||||||
return rows;
|
return rows;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async listProcesses(dbhan) {
|
||||||
|
const { rows } = await this.query(dbhan, sql.listProcesses);
|
||||||
|
return rows;
|
||||||
|
},
|
||||||
|
|
||||||
|
async listVariables(dbhan) {
|
||||||
|
const { rows } = await this.query(dbhan, sql.listVariables);
|
||||||
|
return rows;
|
||||||
|
},
|
||||||
|
|
||||||
|
async killProcess(dbhan, processId) {
|
||||||
|
await this.query(dbhan, `KILL ${processId}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
async serverSummary(dbhan) {
|
||||||
|
const [variables, processes, databases] = await Promise.all([
|
||||||
|
this.listVariables(dbhan),
|
||||||
|
this.listProcesses(dbhan),
|
||||||
|
this.listDatabases(dbhan),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return {
|
||||||
|
variables: variables,
|
||||||
|
processes: processes,
|
||||||
|
databases: {
|
||||||
|
rows: databases,
|
||||||
|
columns: [
|
||||||
|
{ header: 'Database', fieldName: 'name', type: 'data' },
|
||||||
|
{ header: 'Status', fieldName: 'status', type: 'data' },
|
||||||
|
{ header: 'Recovery Model', fieldName: 'recoveryModel', type: 'data' },
|
||||||
|
{ header: 'Compatibility Level', fieldName: 'compatibilityLevel', type: 'data' },
|
||||||
|
{ header: 'Read Only', fieldName: 'isReadOnly', type: 'data' },
|
||||||
|
{ header: 'Data Size', fieldName: 'sizeOnDisk', type: 'fileSize' },
|
||||||
|
{ header: 'Log Size', fieldName: 'logSizeOnDisk', type: 'fileSize' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
getRedirectAuthUrl(connection, options) {
|
getRedirectAuthUrl(connection, options) {
|
||||||
if (connection.authType != 'msentra') return null;
|
if (connection.authType != 'msentra') return null;
|
||||||
return authProxy.authProxyGetRedirectUrl({
|
return authProxy.authProxyGetRedirectUrl({
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ const viewColumns = require('./viewColumns');
|
|||||||
const indexes = require('./indexes');
|
const indexes = require('./indexes');
|
||||||
const indexcols = require('./indexcols');
|
const indexcols = require('./indexcols');
|
||||||
const triggers = require('./triggers');
|
const triggers = require('./triggers');
|
||||||
|
const listVariables = require('./listVariables');
|
||||||
|
const listDatabases = require('./listDatabases');
|
||||||
|
const listProcesses = require('./listProcesses');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
columns,
|
columns,
|
||||||
@@ -30,4 +33,7 @@ module.exports = {
|
|||||||
indexcols,
|
indexcols,
|
||||||
tableSizes,
|
tableSizes,
|
||||||
triggers,
|
triggers,
|
||||||
|
listVariables,
|
||||||
|
listDatabases,
|
||||||
|
listProcesses,
|
||||||
};
|
};
|
||||||
|
|||||||
17
plugins/dbgate-plugin-mssql/src/backend/sql/listDatabases.js
Normal file
17
plugins/dbgate-plugin-mssql/src/backend/sql/listDatabases.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
module.exports = `
|
||||||
|
SELECT
|
||||||
|
d.name,
|
||||||
|
d.database_id,
|
||||||
|
d.state_desc as status,
|
||||||
|
d.recovery_model_desc as recoveryModel,
|
||||||
|
d.collation_name as collation,
|
||||||
|
d.compatibility_level as compatibilityLevel,
|
||||||
|
d.is_read_only as isReadOnly,
|
||||||
|
CAST(SUM(CASE WHEN mf.type = 0 THEN mf.size * 8192.0 ELSE 0 END) AS BIGINT) AS sizeOnDisk,
|
||||||
|
CAST(SUM(CASE WHEN mf.type = 1 THEN mf.size * 8192.0 ELSE 0 END) AS BIGINT) AS logSizeOnDisk
|
||||||
|
FROM sys.databases d
|
||||||
|
LEFT JOIN sys.master_files mf ON d.database_id = mf.database_id
|
||||||
|
GROUP BY d.name, d.database_id, d.state_desc, d.recovery_model_desc, d.collation_name,
|
||||||
|
d.compatibility_level, d.is_read_only
|
||||||
|
ORDER BY d.name
|
||||||
|
`;
|
||||||
11
plugins/dbgate-plugin-mssql/src/backend/sql/listProcesses.js
Normal file
11
plugins/dbgate-plugin-mssql/src/backend/sql/listProcesses.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
module.exports = `
|
||||||
|
SELECT
|
||||||
|
session_id as processId,
|
||||||
|
ISNULL(host_name, 'Unknown') + ':' + ISNULL(CAST(host_process_id AS VARCHAR(10)), '?') as client,
|
||||||
|
ISNULL(DB_NAME(database_id), 'master') as namespace,
|
||||||
|
ISNULL(DATEDIFF(SECOND, last_request_start_time, GETDATE()), 0) as runningTime,
|
||||||
|
status as state
|
||||||
|
FROM sys.dm_exec_sessions
|
||||||
|
WHERE is_user_process = 1
|
||||||
|
ORDER BY session_id
|
||||||
|
`;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module.exports = `
|
||||||
|
SELECT name as variable, value FROM sys.configurations ORDER BY name
|
||||||
|
`;
|
||||||
@@ -116,6 +116,7 @@ const dialect = {
|
|||||||
/** @type {import('dbgate-types').EngineDriver} */
|
/** @type {import('dbgate-types').EngineDriver} */
|
||||||
const driver = {
|
const driver = {
|
||||||
...driverBase,
|
...driverBase,
|
||||||
|
supportsServerSummary: true,
|
||||||
dumperClass: MsSqlDumper,
|
dumperClass: MsSqlDumper,
|
||||||
dialect,
|
dialect,
|
||||||
readOnlySessions: false,
|
readOnlySessions: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user