Compare commits

...

7 Commits

Author SHA1 Message Date
Karl Burtram
3abbc8fd97 Bump SQL Ops Studio to 0.28.6 (#1252) 2018-04-24 13:58:09 -07:00
Abbie Petchtes
4b88b67bed update Server Reports README (#1250) 2018-04-24 13:49:56 -07:00
Aditya Bist
a2734807ca Agent bugs and fixes (#1243)
* show Error for temp placeholder

* changed message to loading error

* changed error message when loading

* localized error msg

* localized error message
2018-04-24 13:34:17 -07:00
Abbie Petchtes
d0d4df313e Initial improvement in sp_whoisactive (#1249)
* improve sp_whoisactive extension

* formatting

* use a grouping prefix for extension commands
2018-04-24 13:09:50 -07:00
Abbie Petchtes
1efd5e6502 change keyboard shortcut for focusOnCurrentQuery (#1241) 2018-04-24 13:09:32 -07:00
Abbie Petchtes
b12cac0ac3 Changed DB Space Usage and DB Buffer Usage to show only top 10 data and update README (#1248) 2018-04-24 13:09:13 -07:00
Aditya Bist
578aa6ccd2 removed test code 2018-04-24 11:04:09 -07:00
15 changed files with 679 additions and 91 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "sqlops", "name": "sqlops",
"version": "0.28.5", "version": "0.28.6",
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee", "distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
"author": { "author": {
"name": "Microsoft Corporation" "name": "Microsoft Corporation"

View File

@@ -1,28 +1,57 @@
// A launch configuration that launches the extension inside a new window
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
// To debug the extension:
// 1. please install the "SQL Operations Studio Debug" extension into VSCode
// 2. Ensure sqlops is added to your path:
// - open SQL Operations Studio
// - run the command "Install 'sqlops' command in PATH"
{ {
// Use IntelliSense to learn about possible attributes. "version": "0.2.0",
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [ "configurations": [
{ {
"type": "node", "name": "Debug in SqlOps install",
"type": "sqlopsExtensionHost",
"request": "launch", "request": "launch",
"name": "Launch Program", "runtimeExecutable": "sqlops",
"program": "${workspaceFolder}\\out\\src\\extension" "args": [
"--extensionDevelopmentPath=${workspaceFolder}"
]
}, },
{ {
"type": "node", "type": "node",
"request": "attach", "request": "attach",
"name": "Attach to Ops Studio", "name": "Attach to Ops Studio",
"protocol": "inspector", "protocol": "inspector",
"port": 5870, "port": 5870,
"restart": true, "restart": true,
"sourceMaps": true, "sourceMaps": true,
"outFiles": [ "outFiles": [
"${workspaceRoot}/out/**/*.js" "${workspaceRoot}/out/**/*.js"
], ],
"preLaunchTask": "", "preLaunchTask": "",
"timeout": 25000 "timeout": 25000
}, },
{
"name": "Debug in enlistment",
"type": "sqlopsExtensionHost",
"request": "launch",
"windows": {
"runtimeExecutable": "${workspaceFolder}/../../scripts/sql.bat"
},
"osx": {
"runtimeExecutable": "${workspaceFolder}/../../scripts/sql.sh"
},
"linux": {
"runtimeExecutable": "${workspaceFolder}/../../scripts/sql.sh"
},
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"timeout": 20000
}
] ]
} }

View File

@@ -22,4 +22,22 @@ See the [Server Reports Extension Project] in the SQL Operations Studio reposito
## Contributions and "thank you" ## Contributions and "thank you"
Special thank to Paul Randal, Aaron Bertrand, and Glenn Berry for providing useful queries. Special thanks to our Microsoft MVPs for providing useful queries.
* Paul Randal:
https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
See [Paul Randal's wait types library] for more information about each wait type in the Wait Counts widget.
[Paul Randal's wait types library]:https://www.sqlskills.com/help/waits
* Glenn Berry: https://gallery.technet.microsoft.com/scriptcenter/All-Databases-Data-log-a36da95d
* Aaron Bertrand: https://www.mssqltips.com/sqlservertip/2393/determine-sql-server-memory-use-by-database-and-object/
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
* flyfishingdba for Add square brackets for ms_foreachdb call (#1023)
## What's new in Server Reports v1.1?
* Fixed DB Space Usage where it threw an error when database names contain special characters
* Changed DB Space Usage and DB Buffer Usage to show only top 10 data

View File

@@ -625,6 +625,7 @@
"anymatch": "2.0.0", "anymatch": "2.0.0",
"async-each": "1.0.1", "async-each": "1.0.1",
"braces": "2.3.1", "braces": "2.3.1",
"fsevents": "1.2.2",
"glob-parent": "3.1.0", "glob-parent": "3.1.0",
"inherits": "2.0.3", "inherits": "2.0.3",
"is-binary-path": "1.0.1", "is-binary-path": "1.0.1",
@@ -1730,6 +1731,535 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
}, },
"fsevents": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.2.tgz",
"integrity": "sha512-iownA+hC4uHFp+7gwP/y5SzaiUo7m2vpa0dhpzw8YuKtiZsz7cIXsFbXpLEeBM6WuCQyw1MH4RRe6XI8GFUctQ==",
"dev": true,
"optional": true,
"requires": {
"nan": "2.10.0",
"node-pre-gyp": "0.9.1"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
},
"aproba": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"delegates": "1.0.0",
"readable-stream": "2.3.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.9",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ms": "2.0.0"
}
},
"deep-extend": {
"version": "0.4.2",
"bundled": true,
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "2.2.4"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aproba": "1.2.0",
"console-control-strings": "1.1.0",
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
"signal-exit": "3.0.2",
"string-width": "1.0.2",
"strip-ansi": "3.0.1",
"wide-align": "1.1.2"
}
},
"glob": {
"version": "7.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.21",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safer-buffer": "2.1.2"
}
},
"ignore-walk": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimatch": "3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
},
"ini": {
"version": "1.3.5",
"bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"number-is-nan": "1.0.1"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
"brace-expansion": "1.1.11"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
"requires": {
"safe-buffer": "5.1.1",
"yallist": "3.0.2"
}
},
"minizlib": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "2.2.4"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
"version": "2.2.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"debug": "2.6.9",
"iconv-lite": "0.4.21",
"sax": "1.2.4"
}
},
"node-pre-gyp": {
"version": "0.9.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "1.0.3",
"mkdirp": "0.5.1",
"needle": "2.2.0",
"nopt": "4.0.1",
"npm-packlist": "1.1.10",
"npmlog": "4.1.2",
"rc": "1.2.6",
"rimraf": "2.6.2",
"semver": "5.5.0",
"tar": "4.4.1"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"abbrev": "1.1.1",
"osenv": "0.1.5"
}
},
"npm-bundled": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.1.10",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ignore-walk": "3.0.1",
"npm-bundled": "1.0.3"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "1.1.4",
"console-control-strings": "1.1.0",
"gauge": "2.7.4",
"set-blocking": "2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"requires": {
"wrappy": "1.0.2"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"os-homedir": "1.0.2",
"os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"deep-extend": "0.4.2",
"ini": "1.3.5",
"minimist": "1.2.0",
"strip-json-comments": "2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "2.0.0",
"safe-buffer": "5.1.1",
"string_decoder": "1.1.1",
"util-deprecate": "1.0.2"
}
},
"rimraf": {
"version": "2.6.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"glob": "7.1.2"
}
},
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"bundled": true,
"dev": true,
"optional": true
},
"semver": {
"version": "5.5.0",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"requires": {
"code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0",
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "5.1.1"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "2.1.1"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "1.0.1",
"fs-minipass": "1.2.5",
"minipass": "2.2.4",
"minizlib": "1.1.0",
"mkdirp": "0.5.1",
"safe-buffer": "5.1.1",
"yallist": "3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "1.0.2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
"dev": true
}
}
},
"fstream": { "fstream": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
@@ -4105,6 +4635,13 @@
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true "dev": true
}, },
"nan": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
"dev": true,
"optional": true
},
"nanomatch": { "nanomatch": {
"version": "1.2.9", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",

View File

@@ -2,7 +2,7 @@
"name": "server-report", "name": "server-report",
"displayName": "Server Reports", "displayName": "Server Reports",
"description": "Server Reports", "description": "Server Reports",
"version": "0.1.0", "version": "0.1.1",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"engines": { "engines": {
@@ -126,15 +126,25 @@
"container": { "container": {
"widgets-container": [ "widgets-container": [
{ {
"name": "DB Space Usage", "name": "Top 10 DB Space Usage",
"gridItemConfig": { "gridItemConfig": {
"sizex": 2, "sizex": 2,
"sizey": 1 "sizey": 2
}, },
"widget": { "widget": {
"extension-dbspace-usage": {} "extension-dbspace-usage": {}
} }
}, },
{
"name": "Top 10 DB Buffer Usage",
"gridItemConfig": {
"sizex": 2,
"sizey": 2
},
"widget": {
"extension-dbbuffer-usage": {}
}
},
{ {
"name": "CPU Utilization", "name": "CPU Utilization",
"gridItemConfig": { "gridItemConfig": {
@@ -164,16 +174,6 @@
"widget": { "widget": {
"extension-wait-counts-by-Paul-Randal": {} "extension-wait-counts-by-Paul-Randal": {}
} }
},
{
"name": "DB Buffer Usage",
"gridItemConfig": {
"sizex": 2,
"sizey": 2
},
"widget": {
"extension-dbbuffer-usage": {}
}
} }
] ]
} }

View File

@@ -89,7 +89,7 @@ FROM (
ON p.object_id = it.object_id ON p.object_id = it.object_id
) AS partitions' ) AS partitions'
----------------------------------- -----------------------------------
select select TOP 10
d.Dbname, d.Dbname,
--(file_size_mb + log_file_size_mb) as DBsize, --(file_size_mb + log_file_size_mb) as DBsize,
--d.file_Size_MB, --d.file_Size_MB,
@@ -100,4 +100,4 @@ select
--l.log_Free_Space_MB, --l.log_Free_Space_MB,
--fs.Freespace as DB_Freespace --fs.Freespace as DB_Freespace
from @dbsize d join @logsize l on d.Dbname=l.Dbname join @dbfreesize fs on d.Dbname=fs.name from @dbsize d join @logsize l on d.Dbname=l.Dbname join @dbfreesize fs on d.Dbname=fs.name
order by Dbname order by d.Space_Used_MB DESC

View File

@@ -16,7 +16,7 @@ FROM sys.dm_os_buffer_descriptors
--WHERE database_id BETWEEN 5 AND 32766 --WHERE database_id BETWEEN 5 AND 32766
GROUP BY database_id GROUP BY database_id
) )
SELECT SELECT TOP 10
[db_name] = CASE [database_id] WHEN 32767 [db_name] = CASE [database_id] WHEN 32767
THEN 'Resource DB' THEN 'Resource DB'
ELSE DB_NAME([database_id]) END, ELSE DB_NAME([database_id]) END,

View File

@@ -1,6 +1,6 @@
{ {
"name": "whoisactive", "name": "whoisactive",
"version": "0.1.0", "version": "0.1.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -2,7 +2,7 @@
"name": "whoisactive", "name": "whoisactive",
"displayName": "whoisactive", "displayName": "whoisactive",
"description": "sp_whoisactive for SQL Operations Studio", "description": "sp_whoisactive for SQL Operations Studio",
"version": "0.1.0", "version": "0.1.1",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"engines": { "engines": {
@@ -24,7 +24,7 @@
"commands": [ "commands": [
{ {
"command": "sp_whoisactive.install", "command": "sp_whoisactive.install",
"title": "Install sp_whoisactive", "title": "Whoisactive: Install sp_whoisactive",
"icon": { "icon": {
"light": "./out/src/media/download.svg", "light": "./out/src/media/download.svg",
"dark": "./out/src/media/download_inverse.svg" "dark": "./out/src/media/download_inverse.svg"
@@ -32,7 +32,7 @@
}, },
{ {
"command": "sp_whoisactive.findBlockLeaders", "command": "sp_whoisactive.findBlockLeaders",
"title": "Find leader of block", "title": "Whoisactive: Find leader of block",
"icon": { "icon": {
"light": "./out/src/media/blocker.svg", "light": "./out/src/media/blocker.svg",
"dark": "./out/src/media/blocker_inverse.svg" "dark": "./out/src/media/blocker_inverse.svg"
@@ -40,11 +40,19 @@
}, },
{ {
"command": "sp_whoisactive.getPlans", "command": "sp_whoisactive.getPlans",
"title": "Get plans", "title": "Whoisactive: Get plans",
"icon": { "icon": {
"light": "./out/src/media/monitor.svg", "light": "./out/src/media/monitor.svg",
"dark": "./out/src/media/monitor_inverse.svg" "dark": "./out/src/media/monitor_inverse.svg"
} }
},
{
"command": "sp_whoisactive.documentation",
"title": "Whoisactive: Documentation",
"icon": {
"light": "./out/src/media/documentation.svg",
"dark": "./out/src/media/documentation_inverse.svg"
}
} }
], ],
"views": {}, "views": {},
@@ -55,30 +63,7 @@
"title": "sp_whoisactive", "title": "sp_whoisactive",
"description": "Extension for checking who is active.", "description": "Extension for checking who is active.",
"container": { "container": {
"nav-section": [ "sp_whoisactive-insights": {}
{
"id": "sp_whoisactive_insights",
"title": "Insights",
"icon": {
"light": "./out/src/media/insights.svg",
"dark": "./out/src/media/insights_inverse.svg"
},
"container": {
"sp_whoisactive-insights": {}
}
},
{
"id": "sp_whoisactive_documentation",
"title": "Documentation",
"icon": {
"light": "./out/src/media/documentation.svg",
"dark": "./out/src/media/documentation_inverse.svg"
},
"container": {
"webview-container": null
}
}
]
} }
} }
], ],
@@ -92,7 +77,8 @@
"dataType": "number", "dataType": "number",
"legendPosition": "none", "legendPosition": "none",
"labelFirstColumn": false, "labelFirstColumn": false,
"columnsAsLabels": true "columnsAsLabels": true,
"showTopNData": 5
} }
}, },
"queryFile": "./out/src/sql/cpuUsage.sql" "queryFile": "./out/src/sql/cpuUsage.sql"
@@ -107,7 +93,8 @@
"dataType": "number", "dataType": "number",
"legendPosition": "none", "legendPosition": "none",
"labelFirstColumn": false, "labelFirstColumn": false,
"columnsAsLabels": true "columnsAsLabels": true,
"showTopNData": 5
} }
}, },
"queryFile": "./out/src/sql/cpuDelta.sql" "queryFile": "./out/src/sql/cpuDelta.sql"
@@ -122,7 +109,8 @@
"dataType": "number", "dataType": "number",
"legendPosition": "none", "legendPosition": "none",
"labelFirstColumn": false, "labelFirstColumn": false,
"columnsAsLabels": true "columnsAsLabels": true,
"showTopNData": 5
} }
}, },
"queryFile": "./out/src/sql/memoryUsage.sql" "queryFile": "./out/src/sql/memoryUsage.sql"
@@ -137,11 +125,21 @@
"dataType": "number", "dataType": "number",
"legendPosition": "none", "legendPosition": "none",
"labelFirstColumn": false, "labelFirstColumn": false,
"columnsAsLabels": true "columnsAsLabels": true,
"showTopNData": 5
} }
}, },
"queryFile": "./out/src/sql/memoryDelta.sql" "queryFile": "./out/src/sql/memoryDelta.sql"
} }
},
{
"id": "sp_whoisactive-blocking_sessions",
"contrib": {
"type": {
"table": null
},
"queryFile": "./out/src/sql/blockingSessions.sql"
}
} }
], ],
"dashboard.containers": [ "dashboard.containers": [
@@ -155,12 +153,13 @@
"tasks-widget": [ "tasks-widget": [
"sp_whoisactive.getPlans", "sp_whoisactive.getPlans",
"sp_whoisactive.findBlockLeaders", "sp_whoisactive.findBlockLeaders",
"sp_whoisactive.documentation",
"sp_whoisactive.install" "sp_whoisactive.install"
] ]
} }
}, },
{ {
"name": "CPU Usage", "name": "Top 5 CPU Usage",
"gridItemConfig": { "gridItemConfig": {
"sizex": 2, "sizex": 2,
"sizey": 1 "sizey": 1
@@ -170,7 +169,7 @@
} }
}, },
{ {
"name": "CPU Delta", "name": "Top 5 CPU Delta",
"gridItemConfig": { "gridItemConfig": {
"sizex": 2, "sizex": 2,
"sizey": 1 "sizey": 1
@@ -180,7 +179,7 @@
} }
}, },
{ {
"name": "Memory Usage", "name": "Top 5 Memory Usage",
"gridItemConfig": { "gridItemConfig": {
"sizex": 2, "sizex": 2,
"sizey": 1 "sizey": 1
@@ -190,7 +189,7 @@
} }
}, },
{ {
"name": "Memory Delta", "name": "Top 5 Memory Delta",
"gridItemConfig": { "gridItemConfig": {
"sizex": 2, "sizex": 2,
"sizey": 1 "sizey": 1
@@ -198,6 +197,16 @@
"widget": { "widget": {
"sp_whoisactive-memory-delta": {} "sp_whoisactive-memory-delta": {}
} }
},
{
"name": "Blocking Sessions",
"gridItemConfig": {
"sizex": 2,
"sizey": 1
},
"widget": {
"sp_whoisactive-blocking_sessions": {}
}
} }
] ]
} }

View File

@@ -29,23 +29,16 @@ export default class MainController extends ControllerBase {
} }
public activate(): Promise<boolean> { public activate(): Promise<boolean> {
sqlops.dashboard.registerWebviewProvider('sp_whoisactive_documentation', webview => { sqlops.tasks.registerTask('sp_whoisactive.install', e => this.openurl('http://whoisactive.com/downloads/'));
let templateValues = {url: 'http://whoisactive.com/docs/'}; sqlops.tasks.registerTask('sp_whoisactive.documentation', e => this.openurl('http://whoisactive.com/docs/'));
Utils.renderTemplateHtml(path.join(__dirname, '..'), 'templateTab.html', templateValues)
.then(html => {
webview.html = html;
});
});
sqlops.tasks.registerTask('sp_whoisactive.install', e => this.onInstall(e));
sqlops.tasks.registerTask('sp_whoisactive.findBlockLeaders', e => this.onExecute(e, 'findBlockLeaders.sql')); sqlops.tasks.registerTask('sp_whoisactive.findBlockLeaders', e => this.onExecute(e, 'findBlockLeaders.sql'));
sqlops.tasks.registerTask('sp_whoisactive.getPlans', e => this.onExecute(e, 'getPlans.sql')); sqlops.tasks.registerTask('sp_whoisactive.getPlans', e => this.onExecute(e, 'getPlans.sql'));
return Promise.resolve(true); return Promise.resolve(true);
} }
private onInstall(connection: sqlops.IConnectionProfile): void { private openurl(link: string): void {
openurl.open('http://whoisactive.com/downloads/'); openurl.open(link);
} }
private onExecute(connection: sqlops.IConnectionProfile, fileName: string): void { private onExecute(connection: sqlops.IConnectionProfile, fileName: string): void {

View File

@@ -0,0 +1,4 @@
SELECT blocking_session_id
FROM sys.dm_os_waiting_tasks
WHERE
blocking_session_id IS NOT NULL

View File

@@ -1,6 +1,7 @@
// Adopted and converted to typescript from https://github.com/6pac/SlickGrid/blob/master/plugins/slick.rowdetailview.js // Adopted and converted to typescript from https://github.com/6pac/SlickGrid/blob/master/plugins/slick.rowdetailview.js
// heavily modified // heavily modified
import { mixin } from 'vs/base/common/objects'; import { mixin } from 'vs/base/common/objects';
import * as nls from 'vs/nls';
export class RowDetailView { export class RowDetailView {
@@ -277,7 +278,7 @@ export class RowDetailView {
item._parent = parent; item._parent = parent;
item._offset = offset; item._offset = offset;
item.jobId = parent.jobId; item.jobId = parent.jobId;
item.name = parent.message ? parent.message : 'Error'; item.name = parent.message ? parent.message : nls.localize('rowDetailView.loadError','Loading Error...');
return item; return item;
} }

View File

@@ -85,9 +85,6 @@ export class JobHistoryComponent extends Disposable implements OnInit {
this._jobCacheObject.serverName = serverName; this._jobCacheObject.serverName = serverName;
this._jobManagementService.addToCache(serverName, this._jobCacheObject); this._jobManagementService.addToCache(serverName, this._jobCacheObject);
} }
$('#accordion').keypress(e => {
let meme = e;
});
} }
ngOnInit() { ngOnInit() {

View File

@@ -207,7 +207,7 @@ export class JobsViewComponent implements AfterContentChecked {
if (job.lastRunOutcome === 0 && !expandedJobs.get(job.jobId)) { if (job.lastRunOutcome === 0 && !expandedJobs.get(job.jobId)) {
this.expandJobRowDetails(i+expandedJobs.size); this.expandJobRowDetails(i+expandedJobs.size);
this.addToStyleHash(i+expandedJobs.size); this.addToStyleHash(i+expandedJobs.size);
this._agentViewComponent.setExpanded(job.jobId, 'temp'); this._agentViewComponent.setExpanded(job.jobId, 'Loading Error...');
} else if (job.lastRunOutcome === 0 && expandedJobs.get(job.jobId)) { } else if (job.lastRunOutcome === 0 && expandedJobs.get(job.jobId)) {
this.expandJobRowDetails(i+expansions); this.expandJobRowDetails(i+expansions);
this.addToStyleHash(i+expansions); this.addToStyleHash(i+expansions);
@@ -298,7 +298,7 @@ export class JobsViewComponent implements AfterContentChecked {
let item = self.dataView.getItemById(job.jobId + '.error'); let item = self.dataView.getItemById(job.jobId + '.error');
let noStepsMessage = nls.localize('jobsView.noSteps', 'No Steps available for this job.'); let noStepsMessage = nls.localize('jobsView.noSteps', 'No Steps available for this job.');
let errorMessage = jobHistory ? jobHistory.message: noStepsMessage; let errorMessage = jobHistory ? jobHistory.message: noStepsMessage;
item['name'] = item['name'] + ': ' + errorMessage; item['name'] = nls.localize('jobsView.error', 'Error: ') + errorMessage;
self._agentViewComponent.setExpanded(job.jobId, errorMessage); self._agentViewComponent.setExpanded(job.jobId, errorMessage);
self.dataView.updateItem(job.jobId + '.error', item); self.dataView.updateItem(job.jobId + '.error', item);

View File

@@ -137,7 +137,7 @@ actionRegistry.registerWorkbenchAction(
FocusOnCurrentQueryKeyboardAction, FocusOnCurrentQueryKeyboardAction,
FocusOnCurrentQueryKeyboardAction.ID, FocusOnCurrentQueryKeyboardAction.ID,
FocusOnCurrentQueryKeyboardAction.LABEL, FocusOnCurrentQueryKeyboardAction.LABEL,
{ primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_Q } { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_O }
), ),
FocusOnCurrentQueryKeyboardAction.LABEL FocusOnCurrentQueryKeyboardAction.LABEL
); );