Skip to content

Commit 00fef4b

Browse files
committed
checking for updates against current spblitz
1 parent fa27f31 commit 00fef4b

5 files changed

Lines changed: 92 additions & 1 deletion

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ out
22
node_modules
33
.vscode-test/
44
*.vsix
5+
secrets.txt
6+
apiconfig.json

package.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"url": "https://github.com/dzsquared/sqlops-firstresponderkit.git"
1717
},
1818
"activationEvents": [
19+
"onCommand:extension.sp_blitzversion",
1920
"onCommand:extension.sp_blitz",
2021
"onCommand:extension.run_sp_blitz",
2122
"onCommand:extension.sp_blitzwho",
@@ -30,6 +31,10 @@
3031
"main": "./out/extension",
3132
"contributes": {
3233
"commands": [
34+
{
35+
"command": "extension.sp_blitzversion",
36+
"title": "First Responder Kit: Check sp_blitz Version"
37+
},
3338
{
3439
"command": "extension.sp_blitz",
3540
"title": "First Responder Kit: Import sp_blitz"
@@ -75,6 +80,16 @@
7580
],
7681
"menus": {
7782
"objectExplorer/item/context": [
83+
{
84+
"command": "extension.sp_blitzversion",
85+
"when": "connectionProvider == MSSQL && nodeType && nodeType == Database",
86+
"group": "FRK"
87+
},
88+
{
89+
"command": "extension.sp_blitzversion",
90+
"when": "connectionProvider == MSSQL && nodeType && nodeType == Connection",
91+
"group": "FRK"
92+
},
7893
{
7994
"command": "extension.run_sp_blitzindex",
8095
"when": "connectionProvider == MSSQL && nodeType && nodeType == Database",

src/apiconfig.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface apiconfig
2+
{
3+
token: string;
4+
}

src/extension.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,20 @@ import * as request from 'request-promise-native';
44
import * as sqlops from 'sqlops';
55
import { error } from 'util';
66
import {placeScript} from './placescript';
7-
import {BlitzIndex} from './blitzindex';
7+
import {updatecheck} from './updateCheck';
8+
// import {BlitzIndex} from './blitzindex';
89

910
export function activate(context: vscode.ExtensionContext) {
1011
const baseUrl = "https://raw.githubusercontent.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/master/";
1112

13+
14+
// checking spblitz versioning
15+
var getblitzversion = async (context: sqlops.ObjectExplorerContext) => {
16+
new updatecheck().checkForUpdates(context);
17+
};
18+
var disposable_spblitzversion = vscode.commands.registerCommand('extension.sp_blitzversion', getblitzversion);
19+
context.subscriptions.push(disposable_spblitzversion);
20+
1221
//importing the full spblitz script
1322
var getblitz = async () => {
1423
let fileName = "sp_Blitz.sql";
@@ -155,6 +164,7 @@ export function activate(context: vscode.ExtensionContext) {
155164
var disposable_runspblitzindex = vscode.commands.registerCommand('extension.run_sp_blitzindex', runspblitzindex);
156165
context.subscriptions.push(disposable_runspblitzindex);
157166

167+
158168
//creating the quickrun script for blitzcache
159169
var runspblitzcache = async () => {
160170
let fileName = "exec_sp_blitzcache.sql";

src/updateCheck.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
'use strict';
2+
3+
import * as sqlops from 'sqlops';
4+
import * as vscode from 'vscode';
5+
import * as request from 'request-promise-native';
6+
import * as apiConfig from './apiconfig';
7+
let apiconfig: apiConfig.apiconfig = require('../apiconfig.json');
8+
9+
export class updatecheck {
10+
public async checkForUpdates(context: sqlops.ObjectExplorerContext) {
11+
let baseUrl = "https://api.github.com/repos/BrentOzarULTD/SQL-Server-First-Responder-Kit/releases/latest";
12+
// /repos/:owner/:repo/releases/latest
13+
let apitoken = 'token ' + apiconfig.token;
14+
let queryProvider = sqlops.dataprotocol.getProvider<sqlops.QueryProvider>(context.connectionProfile.providerName, sqlops.DataProviderType.QueryProvider);
15+
vscode.window.showInformationMessage("Checking First Responder Kit for Updates");
16+
try {
17+
let connection = await sqlops.connection.getCurrentConnection();
18+
let query = `declare @versionno datetime
19+
exec sp_blitz @help = 1, @versiondate = @versionno output
20+
select convert(varchar(10),@versionno,112) as versionno`;
21+
let connectionUri = await sqlops.connection.getUriForConnection(connection.connectionId);
22+
if (connection) {
23+
let results = await queryProvider.runQueryAndReturn(connectionUri, query);
24+
//vscode.window.showInformationMessage(results.rowCount.toString());
25+
let cell = results.rows[0][0];
26+
let currentVersion = cell.displayValue;
27+
28+
//get live most recent version
29+
var options = {
30+
uri: baseUrl,
31+
headers: {
32+
'Authorization': apitoken,
33+
'User-Agent': 'Request-Promise'
34+
},
35+
json: true,
36+
simple: false
37+
};
38+
var scriptText = await request.get(options);
39+
//vscode.window.showInformationMessage("newest version: " + scriptText.tag_name);
40+
41+
let recentVersion = scriptText.tag_name;
42+
//compare against db version
43+
if (recentVersion > currentVersion) {
44+
vscode.window.showInformationMessage("New Version of First Responder Kit available.", {modal:false}, "Get It", "Tell Me More");
45+
46+
//tell me more : https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/releases/tag/<tag>
47+
48+
//get it : download all command
49+
50+
} else {
51+
vscode.window.showInformationMessage("You're up to date!", {modal:false}, "Close")
52+
}
53+
54+
//confirm if user wants to update scripts
55+
}
56+
} catch (e) {
57+
vscode.window.showErrorMessage(e);
58+
}
59+
}
60+
}

0 commit comments

Comments
 (0)