mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Add sample for server reports (#960)
* add sample for server reports * add license and headers for all samples * add new icons for sp_whoisactive * address comments and use sqlops node module
This commit is contained in:
8
samples/serverReports/.gitignore
vendored
Normal file
8
samples/serverReports/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
out
|
||||
node_modules
|
||||
.vscode-test/
|
||||
*.vsix
|
||||
.DS_Store
|
||||
.idea
|
||||
test-reports/**
|
||||
28
samples/serverReports/.vscode/launch.json
vendored
Normal file
28
samples/serverReports/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
// 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
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Launch Program",
|
||||
"program": "${workspaceFolder}\\out\\src\\extension"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"name": "Attach to Ops Studio",
|
||||
"protocol": "inspector",
|
||||
"port": 5870,
|
||||
"restart": true,
|
||||
"sourceMaps": true,
|
||||
"outFiles": [
|
||||
"${workspaceRoot}/out/**/*.js"
|
||||
],
|
||||
"preLaunchTask": "",
|
||||
"timeout": 25000
|
||||
},
|
||||
]
|
||||
}
|
||||
29
samples/serverReports/.vscodeignore
Normal file
29
samples/serverReports/.vscodeignore
Normal file
@@ -0,0 +1,29 @@
|
||||
# Unwanted compiled files
|
||||
out/test/**
|
||||
out/**/*.map
|
||||
*.vsix
|
||||
|
||||
# Build/Source files
|
||||
src/**
|
||||
tasks/**
|
||||
test/**
|
||||
typings/**
|
||||
packages/**
|
||||
samples/**
|
||||
.gitignore
|
||||
tsconfig.json
|
||||
|
||||
# IDE Settings
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.idea/**
|
||||
.sqlops/**
|
||||
|
||||
# Reference files
|
||||
**/*.ts
|
||||
**/*.map
|
||||
.gitignore
|
||||
tsconfig.json
|
||||
*.exe
|
||||
*.dat
|
||||
gulpfile.js
|
||||
1
samples/serverReports/CHANGELOG.md
Normal file
1
samples/serverReports/CHANGELOG.md
Normal file
@@ -0,0 +1 @@
|
||||
# Change Log
|
||||
24
samples/serverReports/LICENSE.txt
Normal file
24
samples/serverReports/LICENSE.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
MICROSOFT SOFTWARE LICENSE TERMS
|
||||
|
||||
MICROSOFT SQL OPERATIONS STUDIO
|
||||
|
||||
Microsoft Corporation ("Microsoft") grants you a nonexclusive, perpetual,
|
||||
royalty-free right to use, copy, and modify the software code provided by us
|
||||
("Software Code"). You may not sublicense the Software Code or any use of it
|
||||
(except to your affiliates and to vendors to perform work on your behalf)
|
||||
through distribution, network access, service agreement, lease, rental, or
|
||||
otherwise. Unless applicable law gives you more rights, Microsoft reserves all
|
||||
other rights not expressly granted herein, whether by implication, estoppel or
|
||||
otherwise.
|
||||
|
||||
THE SOFTWARE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||
AND NONINFRINGEMENT. IN NO EVENT SHALL MICROSOFT OR ITS LICENSORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
|
||||
SAMPLE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
4
samples/serverReports/README.md
Normal file
4
samples/serverReports/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# server reports for SQL Operations Studio
|
||||
|
||||
Welcome to **server reports** for SQL Operations Studio! Server reports give useful insights about the server.
|
||||
|
||||
14
samples/serverReports/gulpfile.js
Normal file
14
samples/serverReports/gulpfile.js
Normal file
@@ -0,0 +1,14 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
"use strict";
|
||||
|
||||
// NOTE: These are es6 gulpfiles
|
||||
|
||||
// Basic build tasks
|
||||
require('./tasks/buildtasks');
|
||||
|
||||
// VSIX generation tasks
|
||||
require('./tasks/packagetasks');
|
||||
7408
samples/serverReports/package-lock.json
generated
Normal file
7408
samples/serverReports/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
214
samples/serverReports/package.json
Normal file
214
samples/serverReports/package.json
Normal file
@@ -0,0 +1,214 @@
|
||||
{
|
||||
"name": "server-report",
|
||||
"displayName": "Server Reports",
|
||||
"description": "Server Reports",
|
||||
"version": "0.1.0",
|
||||
"publisher": "Microsoft",
|
||||
"engines": {
|
||||
"vscode": "^1.19.0",
|
||||
"sqlops": "*"
|
||||
},
|
||||
"license": "SEE LICENSE IN LICENSE.txt",
|
||||
"repository": "https://github.com/Microsoft/sqlopsstudio",
|
||||
"categories": [
|
||||
"Other"
|
||||
],
|
||||
"activationEvents": [
|
||||
"*"
|
||||
],
|
||||
"main": "./out/src/extension",
|
||||
"contributes": {
|
||||
"configuration": [],
|
||||
"commands": [],
|
||||
"views": {},
|
||||
"menus": {},
|
||||
"dashboard.tabs": [
|
||||
{
|
||||
"id": "Server-Reports",
|
||||
"title": "Server Reports",
|
||||
"description": "This extension shows useful reports for a server.",
|
||||
"container": {
|
||||
"server-insights1": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"dashboard.insights": [
|
||||
{
|
||||
"id": "extension-dbspace-usage",
|
||||
"contrib": {
|
||||
"type": {
|
||||
"horizontalBar": {
|
||||
"dataDirection": "vertical",
|
||||
"dataType": "number",
|
||||
"legendPosition": "top",
|
||||
"labelFirstColumn": false,
|
||||
"columnsAsLabels": true
|
||||
}
|
||||
},
|
||||
"queryFile": "./out/src/sql/all_db_space_used.sql"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "extension-cpu-utilization",
|
||||
"contrib": {
|
||||
"type": {
|
||||
"timeSeries": {
|
||||
"dataDirection": "horizontal",
|
||||
"dataType": "point",
|
||||
"legendPosition": "top",
|
||||
"labelFirstColumn": false,
|
||||
"columnsAsLabels": false
|
||||
}
|
||||
},
|
||||
"queryFile": "./out/src/sql/cpumetric.sql"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "extension-backup-growth-trend",
|
||||
"details": "Abbie wants it",
|
||||
"contrib": {
|
||||
"type": {
|
||||
"timeSeries": {
|
||||
"dataDirection": "horizontal",
|
||||
"dataType": "point",
|
||||
"legendPosition": "none",
|
||||
"labelFirstColumn": false,
|
||||
"columnsAsLabels": false
|
||||
}
|
||||
},
|
||||
"queryFile": "./out/src/sql/backup_size_trend.sql"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "extension-wait-counts-by-Paul-Randal",
|
||||
"contrib": {
|
||||
"type": {
|
||||
"horizontalBar": {
|
||||
"dataDirection": "vertical",
|
||||
"dataType": "number",
|
||||
"legendPosition": "none",
|
||||
"labelFirstColumn": false,
|
||||
"columnsAsLabels": true
|
||||
}
|
||||
},
|
||||
"queryFile": "./out/src/sql/waits_paul_randal.sql",
|
||||
"details": {
|
||||
"queryFile": "./out/src/sql/waits_detail_paul_randal.sql",
|
||||
"label": {
|
||||
"column": "WaitType",
|
||||
"state": []
|
||||
},
|
||||
"value": "Percentage"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "extension-dbbuffer-usage",
|
||||
"contrib": {
|
||||
"type": {
|
||||
"horizontalBar": {
|
||||
"dataDirection": "vertical",
|
||||
"dataType": "number",
|
||||
"legendPosition": "top",
|
||||
"labelFirstColumn": false,
|
||||
"columnsAsLabels": true
|
||||
}
|
||||
},
|
||||
"queryFile": "./out/src/sql/memorybydb.sql"
|
||||
}
|
||||
}
|
||||
],
|
||||
"dashboard.containers": [
|
||||
{
|
||||
"id": "server-insights1",
|
||||
"container": {
|
||||
"widgets-container": [
|
||||
{
|
||||
"name": "DB Space Usage",
|
||||
"gridItemConfig": {
|
||||
"sizex": 2,
|
||||
"sizey": 1
|
||||
},
|
||||
"widget": {
|
||||
"extension-dbspace-usage": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CPU Utilization",
|
||||
"gridItemConfig": {
|
||||
"sizex": 2,
|
||||
"sizey": 1
|
||||
},
|
||||
"widget": {
|
||||
"extension-cpu-utilization": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Backup Growth Trend",
|
||||
"gridItemConfig": {
|
||||
"sizex": 2,
|
||||
"sizey": 1
|
||||
},
|
||||
"widget": {
|
||||
"extension-backup-growth-trend": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wait Counts by Paul Randal",
|
||||
"gridItemConfig": {
|
||||
"sizex": 2,
|
||||
"sizey": 2
|
||||
},
|
||||
"widget": {
|
||||
"extension-wait-counts-by-Paul-Randal": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "DB Buffer Usage",
|
||||
"gridItemConfig": {
|
||||
"sizex": 2,
|
||||
"sizey": 2
|
||||
},
|
||||
"widget": {
|
||||
"extension-dbbuffer-usage": {}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"snippets": []
|
||||
},
|
||||
"scripts": {
|
||||
"prepare": "node ./node_modules/sqlops/bin/install",
|
||||
"build": "gulp build",
|
||||
"compile": "gulp compile",
|
||||
"watch": "gulp watch",
|
||||
"postinstall": "node ./node_modules/vscode/bin/install"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": "^5.0.0",
|
||||
"handlebars": "^4.0.11",
|
||||
"vscode-nls": "2.0.2",
|
||||
"sqlops": "github:anthonydresser/vscode-extension-vscode"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/handlebars": "^4.0.11",
|
||||
"@types/mocha": "^2.2.42",
|
||||
"@types/node": "^7.0.43",
|
||||
"child-process-promise": "^2.2.1",
|
||||
"del": "^3.0.0",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-color": "0.0.1",
|
||||
"gulp-sourcemaps": "^2.6.4",
|
||||
"gulp-tslint": "^6.0.2",
|
||||
"gulp-typescript": "^3.2.4",
|
||||
"should": "^13.2.1",
|
||||
"temp-write": "^3.4.0",
|
||||
"tslint": "^3.14.0",
|
||||
"typemoq": "^2.1.0",
|
||||
"typescript": "^2.6.1",
|
||||
"vscode": "^1.1.6",
|
||||
"vsce": "1.36.2"
|
||||
}
|
||||
}
|
||||
9
samples/serverReports/src/constants.ts
Normal file
9
samples/serverReports/src/constants.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
// CONFIG VALUES ///////////////////////////////////////////////////////////
|
||||
export const extensionConfigSectionName = 'server-reports';
|
||||
export const configLogDebugInfo = 'logDebugInfo';
|
||||
25
samples/serverReports/src/controllers/controllerBase.ts
Normal file
25
samples/serverReports/src/controllers/controllerBase.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
export default abstract class ControllerBase implements vscode.Disposable {
|
||||
protected _context: vscode.ExtensionContext;
|
||||
|
||||
public constructor(context: vscode.ExtensionContext) {
|
||||
this._context = context;
|
||||
}
|
||||
|
||||
abstract activate(): Promise<boolean>;
|
||||
|
||||
abstract deactivate(): void;
|
||||
|
||||
public dispose(): void {
|
||||
this.deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
30
samples/serverReports/src/controllers/mainController.ts
Normal file
30
samples/serverReports/src/controllers/mainController.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as Utils from '../utils';
|
||||
import ControllerBase from './controllerBase';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
/**
|
||||
* The main controller class that initializes the extension
|
||||
*/
|
||||
export default class MainController extends ControllerBase {
|
||||
// PUBLIC METHODS //////////////////////////////////////////////////////
|
||||
/**
|
||||
* Deactivates the extension
|
||||
*/
|
||||
public deactivate(): void {
|
||||
Utils.logDebug('Main controller deactivated');
|
||||
}
|
||||
|
||||
public activate(): Promise<boolean> {
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
}
|
||||
|
||||
39
samples/serverReports/src/extension.ts
Normal file
39
samples/serverReports/src/extension.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
import ControllerBase from './controllers/controllerBase';
|
||||
import MainController from './controllers/mainController';
|
||||
|
||||
let controllers: ControllerBase[] = [];
|
||||
|
||||
export function activate(context: vscode.ExtensionContext): Promise<boolean> {
|
||||
let activations: Promise<boolean>[] = [];
|
||||
|
||||
// Start the main controller
|
||||
let mainController = new MainController(context);
|
||||
controllers.push(mainController);
|
||||
context.subscriptions.push(mainController);
|
||||
activations.push(mainController.activate());
|
||||
|
||||
return Promise.all(activations)
|
||||
.then((results: boolean[]) => {
|
||||
for (let result of results) {
|
||||
if (!result) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
export function deactivate(): void {
|
||||
for (let controller of controllers) {
|
||||
controller.deactivate();
|
||||
}
|
||||
}
|
||||
7
samples/serverReports/src/localizedConstants.ts
Normal file
7
samples/serverReports/src/localizedConstants.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
// TODO: localize!
|
||||
103
samples/serverReports/src/sql/all_db_space_used.sql
Normal file
103
samples/serverReports/src/sql/all_db_space_used.sql
Normal file
@@ -0,0 +1,103 @@
|
||||
--Source: https://gallery.technet.microsoft.com/scriptcenter/All-Databases-Data-log-a36da95d
|
||||
-- Use for a demo/sample purpose only. This query is not built-in to any product.
|
||||
|
||||
------------------------------Data file size----------------------------
|
||||
declare @dbsize table
|
||||
(Dbname varchar(30),
|
||||
file_Size_MB decimal(20,2)default (0),
|
||||
Space_Used_MB decimal(20,2)default (0),
|
||||
Free_Space_MB decimal(20,2) default (0))
|
||||
insert into @dbsize
|
||||
(Dbname,file_Size_MB,Space_Used_MB,Free_Space_MB)
|
||||
exec sp_msforeachdb
|
||||
'use [?];
|
||||
select DB_NAME() AS DbName,
|
||||
sum(size)/128.0 AS File_Size_MB,
|
||||
sum(CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT))/128.0 as Space_Used_MB,
|
||||
SUM( size)/128.0 - sum(CAST(FILEPROPERTY(name,''SpaceUsed'') AS INT))/128.0 AS Free_Space_MB
|
||||
from sys.database_files where type=0 group by type'
|
||||
-------------------log size--------------------------------------
|
||||
declare @logsize table
|
||||
(Dbname varchar(30),
|
||||
Log_File_Size_MB decimal(20,2)default (0),
|
||||
log_Space_Used_MB decimal(20,2)default (0),
|
||||
log_Free_Space_MB decimal(20,2)default (0))
|
||||
insert into @logsize
|
||||
(Dbname,Log_File_Size_MB,log_Space_Used_MB,log_Free_Space_MB)
|
||||
exec sp_msforeachdb
|
||||
'use [?];
|
||||
select DB_NAME() AS DbName,
|
||||
sum(size)/128.0 AS Log_File_Size_MB,
|
||||
sum(CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT))/128.0 as log_Space_Used_MB,
|
||||
SUM( size)/128.0 - sum(CAST(FILEPROPERTY(name,''SpaceUsed'') AS INT))/128.0 AS log_Free_Space_MB
|
||||
from sys.database_files where type=1 group by type'
|
||||
--------------------------------database free size
|
||||
declare @dbfreesize table
|
||||
(name varchar(50),
|
||||
database_size varchar(50),
|
||||
Freespace varchar(50)default (0.00))
|
||||
insert into @dbfreesize
|
||||
(name,database_size,Freespace)
|
||||
exec sp_msforeachdb
|
||||
'use ?;SELECT database_name = db_name()
|
||||
,database_size = ltrim(str((convert(DECIMAL(15, 2), dbsize) + convert(DECIMAL(15, 2), logsize)) * 8192 / 1048576, 15, 2) + ''MB'')
|
||||
,''unallocated space'' = ltrim(str((
|
||||
CASE
|
||||
WHEN dbsize >= reservedpages
|
||||
THEN (convert(DECIMAL(15, 2), dbsize) - convert(DECIMAL(15, 2), reservedpages)) * 8192 / 1048576
|
||||
ELSE 0
|
||||
END
|
||||
), 15, 2) + '' MB'')
|
||||
FROM (
|
||||
SELECT dbsize = sum(convert(BIGINT, CASE
|
||||
WHEN type = 0
|
||||
THEN size
|
||||
ELSE 0
|
||||
END))
|
||||
,logsize = sum(convert(BIGINT, CASE
|
||||
WHEN type <> 0
|
||||
THEN size
|
||||
ELSE 0
|
||||
END))
|
||||
FROM sys.database_files
|
||||
) AS files
|
||||
,(
|
||||
SELECT reservedpages = sum(a.total_pages)
|
||||
,usedpages = sum(a.used_pages)
|
||||
,pages = sum(CASE
|
||||
WHEN it.internal_type IN (
|
||||
202
|
||||
,204
|
||||
,211
|
||||
,212
|
||||
,213
|
||||
,214
|
||||
,215
|
||||
,216
|
||||
)
|
||||
THEN 0
|
||||
WHEN a.type <> 1
|
||||
THEN a.used_pages
|
||||
WHEN p.index_id < 2
|
||||
THEN a.data_pages
|
||||
ELSE 0
|
||||
END)
|
||||
FROM sys.partitions p
|
||||
INNER JOIN sys.allocation_units a
|
||||
ON p.partition_id = a.container_id
|
||||
LEFT JOIN sys.internal_tables it
|
||||
ON p.object_id = it.object_id
|
||||
) AS partitions'
|
||||
-----------------------------------
|
||||
select
|
||||
d.Dbname,
|
||||
--(file_size_mb + log_file_size_mb) as DBsize,
|
||||
--d.file_Size_MB,
|
||||
d.Space_Used_MB,
|
||||
--d.Free_Space_MB,
|
||||
--l.Log_File_Size_MB,
|
||||
l.log_Space_Used_MB--,
|
||||
--l.log_Free_Space_MB,
|
||||
--fs.Freespace as DB_Freespace
|
||||
from @dbsize d join @logsize l on d.Dbname=l.Dbname join @dbfreesize fs on d.Dbname=fs.name
|
||||
order by Dbname
|
||||
33
samples/serverReports/src/sql/backup_detail.sql
Normal file
33
samples/serverReports/src/sql/backup_detail.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
declare @condition tinyint;
|
||||
SET @condition = 24;
|
||||
|
||||
select
|
||||
d.database_id as [Database ID],
|
||||
d.name as [Database],
|
||||
d.recovery_model_desc as [Recovery model],
|
||||
d.state_desc as [Database state],
|
||||
case
|
||||
when b.type = N'D' then N'Database'
|
||||
when b.type = N'I' then N'Differential Database'
|
||||
when b.type = N'L' then N'Log'
|
||||
when b.type = N'F' then N'File or Filegroup'
|
||||
when b.type = N'G' then N'Differental File'
|
||||
when b.type = N'P' then N'Partial'
|
||||
when b.type = N'Q' then N'Differential Partial'
|
||||
else NULL
|
||||
end
|
||||
as [Backup type],
|
||||
b.backup_start_date as [Backup start date],
|
||||
b.backup_finish_date as [Backup finish date],
|
||||
case
|
||||
when m.last_backup_time is null then 0 --N'No backup found'
|
||||
when datediff(hh, m.last_backup_time, getdate()) > @condition then 1 -- N'Older than 24hrs'
|
||||
else 2 --N'Within 24hrs'
|
||||
end as [Backup_Health]
|
||||
from sys.databases as d
|
||||
left join msdb..backupset as b on d.name = b.database_name
|
||||
left join (select bs.database_name, max(bs.backup_start_date) as last_backup_time
|
||||
from msdb..backupset as bs
|
||||
group by bs.database_name ) as m on d.name = m.database_name and b.backup_start_date = m.last_backup_time
|
||||
where b.backup_start_date is null or b.backup_start_date = m.last_backup_time
|
||||
order by d.database_id asc
|
||||
15
samples/serverReports/src/sql/backup_insight.sql
Normal file
15
samples/serverReports/src/sql/backup_insight.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
declare @condition tinyint;
|
||||
SET @condition = 24;
|
||||
with
|
||||
backupInsight_cte (database_id, last_backup, health_check)
|
||||
as
|
||||
(
|
||||
select d.database_id, max(b.backup_start_date) AS last_backup, case when (datediff( hh , max(b.backup_start_date) , getdate()) < @condition) then 1 else 0 end as health_check
|
||||
from sys.databases as d left join msdb..backupset as b on d.name = b.database_name
|
||||
group by d.database_id
|
||||
)
|
||||
select
|
||||
sum(health_check) [Within 24hrs],
|
||||
sum(case when health_check = 0 AND last_backup IS NOT NULL then 1 else 0 end) [Older than 24hrs],
|
||||
sum(case when health_check = 0 AND last_backup IS NULL then 1 else 0 end) [No backup found]
|
||||
from backupInsight_cte
|
||||
10
samples/serverReports/src/sql/backup_size_trend.sql
Normal file
10
samples/serverReports/src/sql/backup_size_trend.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
SELECT
|
||||
[database_name] AS "database",
|
||||
format(backup_start_date, 'yyyy-MM-dd') as date,
|
||||
--DATEPART(month,[backup_start_date]) AS "Month",
|
||||
AVG([backup_size]/1024/1024) AS "size MB"
|
||||
--AVG([compressed_backup_size]/1024/1024) AS "Compressed Backup Size MB",
|
||||
--AVG([backup_size]/[compressed_backup_size]) AS "Compression Ratio"
|
||||
FROM msdb.dbo.backupset
|
||||
where [type] = 'D'
|
||||
GROUP BY [database_name], format(backup_start_date, 'yyyy-MM-dd') --DATEPART(mm,[backup_start_date]);
|
||||
25
samples/serverReports/src/sql/cpumetric.sql
Normal file
25
samples/serverReports/src/sql/cpumetric.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- source: https://sqlserverperformance.wordpress.com/2009/07/30/how-to-get-sql-server-cpu-utilization-from-a-query/
|
||||
-- Use for a demo/sample purpose only. This query is not built-in to any product.
|
||||
|
||||
DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks)FROM sys.dm_os_sys_info);
|
||||
|
||||
SELECT Top(30) 'CPU%' as [label],
|
||||
DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [Event Time],
|
||||
SQLProcessUtilization AS [SQL Server Process CPU Utilization]
|
||||
-- SystemIdle AS [System Idle Process],
|
||||
-- 100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization],
|
||||
FROM (
|
||||
SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
|
||||
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int')
|
||||
AS [SystemIdle],
|
||||
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]',
|
||||
'int')
|
||||
AS [SQLProcessUtilization], [timestamp]
|
||||
FROM (
|
||||
SELECT [timestamp], convert(xml, record) AS [record]
|
||||
FROM sys.dm_os_ring_buffers
|
||||
WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
|
||||
AND record LIKE '%<SystemHealth>%') AS x
|
||||
) AS y
|
||||
--ORDER BY record_id DESC;
|
||||
ORDER BY [Event Time] DESC;
|
||||
12
samples/serverReports/src/sql/db_size.sql
Normal file
12
samples/serverReports/src/sql/db_size.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
with fs
|
||||
as
|
||||
(
|
||||
select database_id, type, size * 8.0 / 1024 size
|
||||
from sys.master_files
|
||||
)
|
||||
select
|
||||
name,
|
||||
(select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeMB,
|
||||
(select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeMB
|
||||
from sys.databases db
|
||||
where database_id > 4
|
||||
30
samples/serverReports/src/sql/memorybydb.sql
Normal file
30
samples/serverReports/src/sql/memorybydb.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
-- source:https://www.mssqltips.com/sqlservertip/2393/determine-sql-server-memory-use-by-database-and-object/
|
||||
-- Use for a demo/sample purpose only. This query is not built-in to any product.
|
||||
|
||||
DECLARE @total_buffer INT;
|
||||
|
||||
SELECT @total_buffer = cntr_value
|
||||
FROM sys.dm_os_performance_counters
|
||||
WHERE RTRIM([object_name]) LIKE '%Buffer Manager'
|
||||
AND counter_name = 'Database Pages';
|
||||
|
||||
;WITH src AS
|
||||
(
|
||||
SELECT
|
||||
database_id, db_buffer_pages = COUNT_BIG(*)
|
||||
FROM sys.dm_os_buffer_descriptors
|
||||
--WHERE database_id BETWEEN 5 AND 32766
|
||||
GROUP BY database_id
|
||||
)
|
||||
SELECT
|
||||
[db_name] = CASE [database_id] WHEN 32767
|
||||
THEN 'Resource DB'
|
||||
ELSE DB_NAME([database_id]) END,
|
||||
--db_buffer_pages,
|
||||
--db_buffer_MB = db_buffer_pages / 128,
|
||||
db_buffer_percent = CONVERT(DECIMAL(6,3),
|
||||
db_buffer_pages * 100.0 / @total_buffer)
|
||||
FROM src
|
||||
--ORDER BY db_buffer_MB DESC;
|
||||
order by db_buffer_percent DESC;
|
||||
|
||||
76
samples/serverReports/src/sql/waits_detail_paul_randal.sql
Normal file
76
samples/serverReports/src/sql/waits_detail_paul_randal.sql
Normal file
@@ -0,0 +1,76 @@
|
||||
-- SOURCE: https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
|
||||
-- Use for a demo/sample purpose only. This query is not built-in to any product.
|
||||
|
||||
WITH [Waits] AS
|
||||
(SELECT
|
||||
[wait_type],
|
||||
[wait_time_ms] / 1000.0 AS [WaitS],
|
||||
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
|
||||
[signal_wait_time_ms] / 1000.0 AS [SignalS],
|
||||
[waiting_tasks_count] AS [WaitCount],
|
||||
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
|
||||
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
|
||||
FROM sys.dm_os_wait_stats
|
||||
WHERE [wait_type] NOT IN (
|
||||
N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR',
|
||||
N'BROKER_TASK_STOP', N'BROKER_TO_FLUSH',
|
||||
N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',
|
||||
N'CHKPT', N'CLR_AUTO_EVENT',
|
||||
N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',
|
||||
|
||||
-- Maybe uncomment these four if you have mirroring issues
|
||||
N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE',
|
||||
N'DBMIRROR_WORKER_QUEUE', N'DBMIRRORING_CMD',
|
||||
|
||||
N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',
|
||||
N'EXECSYNC', N'FSAGENT',
|
||||
N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
|
||||
|
||||
-- Maybe uncomment these six if you have AG issues
|
||||
N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
|
||||
N'HADR_LOGCAPTURE_WAIT', N'HADR_NOTIFICATION_DEQUEUE',
|
||||
N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',
|
||||
|
||||
N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP',
|
||||
N'LOGMGR_QUEUE', N'MEMORY_ALLOCATION_EXT',
|
||||
N'ONDEMAND_TASK_QUEUE',
|
||||
N'PREEMPTIVE_XE_GETTARGETSTATE',
|
||||
N'PWAIT_ALL_COMPONENTS_INITIALIZED',
|
||||
N'PWAIT_DIRECTLOGCONSUMER_GETNEXT',
|
||||
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP', N'QDS_ASYNC_QUEUE',
|
||||
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
|
||||
N'QDS_SHUTDOWN_QUEUE', N'REDO_THREAD_PENDING_WORK',
|
||||
N'REQUEST_FOR_DEADLOCK_SEARCH', N'RESOURCE_QUEUE',
|
||||
N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH',
|
||||
N'SLEEP_DBSTARTUP', N'SLEEP_DCOMSTARTUP',
|
||||
N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',
|
||||
N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP',
|
||||
N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',
|
||||
N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT',
|
||||
N'SP_SERVER_DIAGNOSTICS_SLEEP', N'SQLTRACE_BUFFER_FLUSH',
|
||||
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
|
||||
N'SQLTRACE_WAIT_ENTRIES', N'WAIT_FOR_RESULTS',
|
||||
N'WAITFOR', N'WAITFOR_TASKSHUTDOWN',
|
||||
N'WAIT_XTP_RECOVERY',
|
||||
N'WAIT_XTP_HOST_WAIT', N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
|
||||
N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',
|
||||
N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT')
|
||||
AND [waiting_tasks_count] > 0
|
||||
)
|
||||
SELECT
|
||||
MAX ([W1].[wait_type]) AS [WaitType],
|
||||
CAST (MAX ([W1].[WaitS]) AS DECIMAL (16,2)) AS [Wait_S],
|
||||
CAST (MAX ([W1].[ResourceS]) AS DECIMAL (16,2)) AS [Resource_S],
|
||||
CAST (MAX ([W1].[SignalS]) AS DECIMAL (16,2)) AS [Signal_S],
|
||||
MAX ([W1].[WaitCount]) AS [WaitCount],
|
||||
CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage],
|
||||
CAST ((MAX ([W1].[WaitS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgWait_S],
|
||||
CAST ((MAX ([W1].[ResourceS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgRes_S],
|
||||
CAST ((MAX ([W1].[SignalS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgSig_S],
|
||||
CAST ('https://www.sqlskills.com/help/waits/' + MAX ([W1].[wait_type]) as XML) AS [Help/Info URL]
|
||||
FROM [Waits] AS [W1]
|
||||
INNER JOIN [Waits] AS [W2]
|
||||
ON [W2].[RowNum] <= [W1].[RowNum]
|
||||
GROUP BY [W1].[RowNum]
|
||||
HAVING SUM ([W2].[Percentage]) - MAX( [W1].[Percentage] ) < 95; -- percentage threshold
|
||||
GO
|
||||
76
samples/serverReports/src/sql/waits_paul_randal.sql
Normal file
76
samples/serverReports/src/sql/waits_paul_randal.sql
Normal file
@@ -0,0 +1,76 @@
|
||||
-- SOURCE: https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
|
||||
-- Use for a demo/sample purpose only. This query is not built-in to any product.
|
||||
|
||||
WITH [Waits] AS
|
||||
(SELECT
|
||||
[wait_type],
|
||||
[wait_time_ms] / 1000.0 AS [WaitS],
|
||||
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
|
||||
[signal_wait_time_ms] / 1000.0 AS [SignalS],
|
||||
[waiting_tasks_count] AS [WaitCount],
|
||||
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
|
||||
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
|
||||
FROM sys.dm_os_wait_stats
|
||||
WHERE [wait_type] NOT IN (
|
||||
N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR',
|
||||
N'BROKER_TASK_STOP', N'BROKER_TO_FLUSH',
|
||||
N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',
|
||||
N'CHKPT', N'CLR_AUTO_EVENT',
|
||||
N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',
|
||||
|
||||
-- Maybe uncomment these four if you have mirroring issues
|
||||
N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE',
|
||||
N'DBMIRROR_WORKER_QUEUE', N'DBMIRRORING_CMD',
|
||||
|
||||
N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',
|
||||
N'EXECSYNC', N'FSAGENT',
|
||||
N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
|
||||
|
||||
-- Maybe uncomment these six if you have AG issues
|
||||
N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
|
||||
N'HADR_LOGCAPTURE_WAIT', N'HADR_NOTIFICATION_DEQUEUE',
|
||||
N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',
|
||||
|
||||
N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP',
|
||||
N'LOGMGR_QUEUE', N'MEMORY_ALLOCATION_EXT',
|
||||
N'ONDEMAND_TASK_QUEUE',
|
||||
N'PREEMPTIVE_XE_GETTARGETSTATE',
|
||||
N'PWAIT_ALL_COMPONENTS_INITIALIZED',
|
||||
N'PWAIT_DIRECTLOGCONSUMER_GETNEXT',
|
||||
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP', N'QDS_ASYNC_QUEUE',
|
||||
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
|
||||
N'QDS_SHUTDOWN_QUEUE', N'REDO_THREAD_PENDING_WORK',
|
||||
N'REQUEST_FOR_DEADLOCK_SEARCH', N'RESOURCE_QUEUE',
|
||||
N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH',
|
||||
N'SLEEP_DBSTARTUP', N'SLEEP_DCOMSTARTUP',
|
||||
N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',
|
||||
N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP',
|
||||
N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',
|
||||
N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT',
|
||||
N'SP_SERVER_DIAGNOSTICS_SLEEP', N'SQLTRACE_BUFFER_FLUSH',
|
||||
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
|
||||
N'SQLTRACE_WAIT_ENTRIES', N'WAIT_FOR_RESULTS',
|
||||
N'WAITFOR', N'WAITFOR_TASKSHUTDOWN',
|
||||
N'WAIT_XTP_RECOVERY',
|
||||
N'WAIT_XTP_HOST_WAIT', N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
|
||||
N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',
|
||||
N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT')
|
||||
AND [waiting_tasks_count] > 0
|
||||
)
|
||||
SELECT
|
||||
MAX ([W1].[wait_type]) AS [WaitType],
|
||||
--CAST (MAX ([W1].[WaitS]) AS DECIMAL (16,2)) AS [Wait_S],
|
||||
--CAST (MAX ([W1].[ResourceS]) AS DECIMAL (16,2)) AS [Resource_S],
|
||||
--CAST (MAX ([W1].[SignalS]) AS DECIMAL (16,2)) AS [Signal_S],
|
||||
--MAX ([W1].[WaitCount]) AS [WaitCount]--,
|
||||
CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage]
|
||||
--CAST ((MAX ([W1].[WaitS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgWait_S],
|
||||
--CAST ((MAX ([W1].[ResourceS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgRes_S],
|
||||
--CAST ((MAX ([W1].[SignalS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgSig_S],
|
||||
--CAST ('https://www.sqlskills.com/help/waits/' + MAX ([W1].[wait_type]) as XML) AS [Help/Info URL]
|
||||
FROM [Waits] AS [W1]
|
||||
INNER JOIN [Waits] AS [W2]
|
||||
ON [W2].[RowNum] <= [W1].[RowNum]
|
||||
GROUP BY [W1].[RowNum]
|
||||
HAVING SUM ([W2].[Percentage]) - MAX( [W1].[Percentage] ) < 95; -- percentage threshold
|
||||
GO
|
||||
25
samples/serverReports/src/utils.ts
Normal file
25
samples/serverReports/src/utils.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
import * as Constants from './constants';
|
||||
|
||||
/**
|
||||
* Helper to log messages to the developer console if enabled
|
||||
* @param msg Message to log to the console
|
||||
*/
|
||||
export function logDebug(msg: any): void {
|
||||
let config = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName);
|
||||
let logDebugInfo = config[Constants.configLogDebugInfo];
|
||||
if (logDebugInfo === true) {
|
||||
let currentTime = new Date().toLocaleTimeString();
|
||||
let outputMsg = '[' + currentTime + ']: ' + msg ? msg.toString() : '';
|
||||
console.log(outputMsg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
118
samples/serverReports/tasks/buildtasks.js
Normal file
118
samples/serverReports/tasks/buildtasks.js
Normal file
@@ -0,0 +1,118 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
"use strict";
|
||||
|
||||
let del = require('del');
|
||||
let gulp = require('gulp');
|
||||
let srcmap = require('gulp-sourcemaps');
|
||||
let tslint = require('gulp-tslint');
|
||||
let ts = require('gulp-typescript');
|
||||
let cproc = require('child_process');
|
||||
let os = require('os');
|
||||
|
||||
let config = require('./config');
|
||||
let tsProject = ts.createProject('tsconfig.json');
|
||||
|
||||
|
||||
// GULP TASKS //////////////////////////////////////////////////////////////
|
||||
gulp.task('clean', function(done) {
|
||||
return del('out', done);
|
||||
});
|
||||
|
||||
gulp.task('lint', () => {
|
||||
return gulp.src([
|
||||
config.paths.project.root + '/src/**/*.ts',
|
||||
config.paths.project.root + '/test/**/*.ts'
|
||||
])
|
||||
.pipe((tslint({
|
||||
formatter: "verbose"
|
||||
})))
|
||||
.pipe(tslint.report());
|
||||
});
|
||||
|
||||
gulp.task('compile:src', function(done) {
|
||||
gulp.src([
|
||||
config.paths.project.root + '/src/**/*.sql',
|
||||
config.paths.project.root + '/src/**/*.svg',
|
||||
config.paths.project.root + '/src/**/*.html'
|
||||
]).pipe(gulp.dest('out/src/'));
|
||||
|
||||
let srcFiles = [
|
||||
config.paths.project.root + '/src/**/*.ts',
|
||||
config.paths.project.root + '/src/**/*.js',
|
||||
config.paths.project.root + '/typings/**/*.ts'
|
||||
];
|
||||
|
||||
return gulp.src(srcFiles)
|
||||
.pipe(srcmap.init())
|
||||
.pipe(tsProject())
|
||||
.on('error', function() {
|
||||
if(process.env.BUILDMACHINE) {
|
||||
done('Failed to compile extension source, see above.');
|
||||
process.exit(1);
|
||||
}
|
||||
})
|
||||
// TODO: Reinstate localization code
|
||||
// .pipe(nls.rewriteLocalizeCalls())
|
||||
// .pipe(nls.createAdditionalLanguageFiles(nls.coreLanguages, config.paths.project.root + '/localization/i18n', undefined, false))
|
||||
.pipe(srcmap.write('.', { sourceRoot: function(file) { return file.cwd + '/src'; }}))
|
||||
.pipe(gulp.dest('out/src/'));
|
||||
});
|
||||
|
||||
gulp.task('compile:test', function(done) {
|
||||
let srcFiles = [
|
||||
config.paths.project.root + '/test/**/*.ts',
|
||||
config.paths.project.root + '/typings/**/*.ts'
|
||||
];
|
||||
|
||||
return gulp.src(srcFiles)
|
||||
.pipe(srcmap.init())
|
||||
.pipe(tsProject())
|
||||
.on('error', function() {
|
||||
if(process.env.BUILDMACHINE) {
|
||||
done('Failed to compile test source, see above.');
|
||||
process.exit(1);
|
||||
}
|
||||
})
|
||||
.pipe(srcmap.write('.', {sourceRoot: function(file) { return file.cwd + '/test'; }}))
|
||||
.pipe(gulp.dest('out/test/'));
|
||||
});
|
||||
|
||||
// COMPOSED GULP TASKS /////////////////////////////////////////////////////
|
||||
gulp.task("compile", gulp.series("compile:src", "compile:test"));
|
||||
|
||||
gulp.task("build", gulp.series("clean", "lint", "compile"));
|
||||
|
||||
gulp.task("watch", function() {
|
||||
gulp.watch([config.paths.project.root + '/src/**/*',
|
||||
config.paths.project.root + '/test/**/*.ts'],
|
||||
gulp.series('build'))
|
||||
});
|
||||
|
||||
gulp.task('test', (done) => {
|
||||
let workspace = process.env['WORKSPACE'];
|
||||
if (!workspace) {
|
||||
workspace = process.cwd();
|
||||
}
|
||||
process.env.JUNIT_REPORT_PATH = workspace + '/test-reports/ext_xunit.xml';
|
||||
|
||||
let sqlopsPath = 'sqlops';
|
||||
if (process.env['SQLOPS_DEV']) {
|
||||
let suffix = os.platform === 'win32' ? 'bat' : 'sh';
|
||||
sqlopsPath = `${process.env['SQLOPS_DEV']}/scripts/sql-cli.${suffix}`;
|
||||
}
|
||||
console.log(`Using SQLOPS Path of ${sqlopsPath}`);
|
||||
|
||||
cproc.exec(`${sqlopsPath} --extensionDevelopmentPath="${workspace}" --extensionTestsPath="${workspace}/out/test" --verbose`, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error(`exec error: ${error}`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`stdout: ${stdout}`);
|
||||
console.log(`stderr: ${stderr}`);
|
||||
done();
|
||||
});
|
||||
});
|
||||
24
samples/serverReports/tasks/config.js
Normal file
24
samples/serverReports/tasks/config.js
Normal file
@@ -0,0 +1,24 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
var path = require('path');
|
||||
|
||||
var projectRoot = path.resolve(path.dirname(__dirname));
|
||||
var srcRoot = path.resolve(projectRoot, 'src');
|
||||
var localization = path.resolve(projectRoot, 'localization');
|
||||
|
||||
var config = {
|
||||
paths: {
|
||||
project: {
|
||||
root: projectRoot,
|
||||
localization: localization
|
||||
},
|
||||
extension: {
|
||||
root: srcRoot
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
36
samples/serverReports/tasks/packagetasks.js
Normal file
36
samples/serverReports/tasks/packagetasks.js
Normal file
@@ -0,0 +1,36 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
let gulp = require('gulp');
|
||||
let exec = require('child-process-promise').exec;
|
||||
let color = require('gulp-color');
|
||||
|
||||
// CONSTANTS ///////////////////////////////////////////////////////////////
|
||||
let packageVals = require('../package');
|
||||
|
||||
// HELPER FUNCTIONS ////////////////////////////////////////////////////////
|
||||
|
||||
let buildPackage = function(packageName) {
|
||||
// Make sure there are
|
||||
if (!packageVals.repository) {
|
||||
return Promise.reject("Repository field is not defined in package.json");
|
||||
}
|
||||
|
||||
// Initialize the package command with program and command
|
||||
let vsceArgs = [];
|
||||
vsceArgs.push('./node_modules/vsce/out/vsce');
|
||||
vsceArgs.push('package'); // package command
|
||||
|
||||
// Add the package name
|
||||
vsceArgs.push('-o');
|
||||
vsceArgs.push(packageName);
|
||||
|
||||
// Put it all together and execute the command
|
||||
let command = vsceArgs.join(' ');
|
||||
console.log(command);
|
||||
return exec(command);
|
||||
};
|
||||
16
samples/serverReports/tsconfig.json
Normal file
16
samples/serverReports/tsconfig.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"outDir": "out",
|
||||
"lib": [
|
||||
"es6"
|
||||
],
|
||||
"sourceMap": true,
|
||||
"rootDir": "."
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
".vscode-test"
|
||||
]
|
||||
}
|
||||
123
samples/serverReports/tslint.json
Normal file
123
samples/serverReports/tslint.json
Normal file
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"rules": {
|
||||
"align": [
|
||||
true,
|
||||
"parameters",
|
||||
"statements"
|
||||
],
|
||||
"ban": false,
|
||||
"class-name": true,
|
||||
"comment-format": [
|
||||
true,
|
||||
"check-space"
|
||||
],
|
||||
"curly": true,
|
||||
"eofline": true,
|
||||
"forin": true,
|
||||
"indent": [
|
||||
true,
|
||||
"spaces"
|
||||
],
|
||||
"interface-name": true,
|
||||
"jsdoc-format": true,
|
||||
"label-position": true,
|
||||
"label-undefined": true,
|
||||
"max-line-length": [
|
||||
true,
|
||||
160
|
||||
],
|
||||
"member-access": false,
|
||||
"member-ordering": false,
|
||||
"no-any": false,
|
||||
"no-arg": true,
|
||||
"no-bitwise": true,
|
||||
"no-conditional-assignment": true,
|
||||
"no-consecutive-blank-lines": false,
|
||||
"no-console": [
|
||||
true,
|
||||
"debug",
|
||||
"info",
|
||||
"time",
|
||||
"timeEnd",
|
||||
"trace"
|
||||
],
|
||||
"no-construct": true,
|
||||
"no-constructor-vars": false,
|
||||
"no-debugger": true,
|
||||
"no-duplicate-key": true,
|
||||
"no-duplicate-variable": true,
|
||||
"no-empty": true,
|
||||
"no-eval": true,
|
||||
"no-inferrable-types": false,
|
||||
"no-internal-module": true,
|
||||
"no-null-keyword": true,
|
||||
"no-require-imports": false,
|
||||
"no-shadowed-variable": true,
|
||||
"no-string-literal": false,
|
||||
"no-switch-case-fall-through": false,
|
||||
"no-trailing-whitespace": true,
|
||||
"no-unreachable": true,
|
||||
"no-unused-expression": false,
|
||||
"no-unused-variable": true,
|
||||
"no-use-before-declare": true,
|
||||
"no-var-keyword": true,
|
||||
"no-var-requires": false,
|
||||
"object-literal-sort-keys": false,
|
||||
"one-line": [
|
||||
true,
|
||||
"check-open-brace",
|
||||
"check-catch",
|
||||
"check-else",
|
||||
"check-finally",
|
||||
"check-whitespace"
|
||||
],
|
||||
"quotemark": [
|
||||
true,
|
||||
"single",
|
||||
"avoid-escape"
|
||||
],
|
||||
"radix": true,
|
||||
"semicolon": true,
|
||||
"switch-default": true,
|
||||
"trailing-comma": [
|
||||
true,
|
||||
{
|
||||
"multiline": "never",
|
||||
"singleline": "never"
|
||||
}
|
||||
],
|
||||
"triple-equals": [
|
||||
true,
|
||||
"allow-null-check"
|
||||
],
|
||||
"typedef": [
|
||||
true,
|
||||
"call-signature",
|
||||
"property-declaration"
|
||||
],
|
||||
"typedef-whitespace": [
|
||||
true,
|
||||
{
|
||||
"call-signature": "nospace",
|
||||
"index-signature": "nospace",
|
||||
"parameter": "nospace",
|
||||
"property-declaration": "nospace",
|
||||
"variable-declaration": "nospace"
|
||||
}
|
||||
],
|
||||
"use-strict": false,
|
||||
"variable-name": [
|
||||
true,
|
||||
"allow-leading-underscore",
|
||||
"ban-keywords"
|
||||
],
|
||||
"whitespace": [
|
||||
true,
|
||||
"check-branch",
|
||||
"check-decl",
|
||||
"check-operator",
|
||||
"check-separator",
|
||||
"check-type"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user