mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-20 09:35:38 -05:00
Sql Assessment fixes (#12169)
* prevent simultaneous actions runs and label fix * sqltools service version update
This commit is contained in:
@@ -36,6 +36,7 @@ export interface IAssessmentComponent {
|
||||
stopProgress(mode: AssessmentType): any;
|
||||
recentResult: SqlAssessmentResultInfo;
|
||||
isActive: boolean;
|
||||
isBusy: boolean;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +62,7 @@ abstract class AsmtServerAction extends Action {
|
||||
|
||||
public async run(context: IAsmtActionInfo): Promise<boolean> {
|
||||
this._telemetryService.sendActionEvent(TelemetryView.SqlAssessment, this.id);
|
||||
if (context && context.component) {
|
||||
if (context && context.component && !context.component.isBusy) {
|
||||
context.component.showProgress(this.asmtType);
|
||||
let serverResults = this.getServerItems(context.ownerUri);
|
||||
let connectionUri: string = this._connectionManagement.getConnectionUriFromId(context.connectionId);
|
||||
@@ -138,7 +139,7 @@ export class AsmtDatabaseSelectItemsAction extends Action {
|
||||
|
||||
public async run(context: IAsmtActionInfo): Promise<boolean> {
|
||||
this._telemetryService.sendActionEvent(TelemetryView.SqlAssessment, this.id);
|
||||
if (context && context.component) {
|
||||
if (context && context.component && !context.component.isBusy) {
|
||||
context.component.showProgress(AssessmentType.AvailableRules);
|
||||
let dbAsmtResults = await this._assessmentService.getAssessmentItems(context.ownerUri, AssessmentTargetType.Database);
|
||||
context.component.showInitialResults(dbAsmtResults, AssessmentType.AvailableRules);
|
||||
@@ -186,7 +187,7 @@ export class AsmtDatabaseInvokeItemsAction extends Action {
|
||||
|
||||
public async run(context: IAsmtActionInfo): Promise<boolean> {
|
||||
this._telemetryService.sendActionEvent(TelemetryView.SqlAssessment, this.id);
|
||||
if (context && context.component) {
|
||||
if (context && context.component && !context.component.isBusy) {
|
||||
context.component.showProgress(AssessmentType.InvokeAssessment);
|
||||
let dbAsmtResults = await this._assessmentService.assessmentInvoke(context.ownerUri, AssessmentTargetType.Database);
|
||||
context.component.showInitialResults(dbAsmtResults, AssessmentType.InvokeAssessment);
|
||||
@@ -241,7 +242,7 @@ export class AsmtSamplesLinkAction extends Action {
|
||||
|
||||
export class AsmtGenerateHTMLReportAction extends Action {
|
||||
public static readonly ID = 'asmtaction.generatehtmlreport';
|
||||
public static readonly LABEL = nls.localize('asmtaction.generatehtmlreport', "Make HTML Report");
|
||||
public static readonly LABEL = nls.localize('asmtaction.generatehtmlreport', "Create HTML Report");
|
||||
public static readonly ICON = 'bookreport';
|
||||
|
||||
constructor(
|
||||
@@ -294,7 +295,7 @@ export class AsmtGenerateHTMLReportAction extends Action {
|
||||
}
|
||||
}
|
||||
|
||||
function generateReportFileName(resultDate): string {
|
||||
function generateReportFileName(resultDate: Date): string {
|
||||
const datetime = `${resultDate.toISOString().replace(/-/g, '').replace('T', '').replace(/:/g, '').split('.')[0]}`;
|
||||
return `SqlAssessmentReport_${datetime}.html`;
|
||||
|
||||
|
||||
@@ -110,7 +110,13 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
||||
id: 'tags',
|
||||
formatter: (row, cell, value, columnDef, dataContext) => this.renderTags(row, cell, value, columnDef, dataContext)
|
||||
},
|
||||
{ name: LocalizedStrings.CHECKID_COLUMN_NAME, field: 'checkId', maxWidth: 140, id: 'checkId' }
|
||||
{
|
||||
name: LocalizedStrings.CHECKID_COLUMN_NAME,
|
||||
field: 'checkId',
|
||||
maxWidth: 140,
|
||||
id: 'checkId',
|
||||
formatter: (_row, _cell, value, _columnDef, _dataContext) => `<span title='${value}'>${value}</span>`
|
||||
}
|
||||
];
|
||||
private dataView: any;
|
||||
private filterPlugin: any;
|
||||
@@ -190,6 +196,10 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
||||
return this.isVisible;
|
||||
}
|
||||
|
||||
public get isBusy(): boolean {
|
||||
return Object.values(this.spinner).find(item => item.style.visibility === 'visible') !== undefined;
|
||||
}
|
||||
|
||||
public layout(): void {
|
||||
let statusBar = this.layoutService.getContainer(Parts.STATUSBAR_PART);
|
||||
if (dom.isInDOM(this.actionBarContainer.nativeElement) && dom.isInDOM(statusBar)) {
|
||||
@@ -499,13 +509,13 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
||||
|
||||
private renderTags(_row, _cell, _value, _columnDef, dataContext) {
|
||||
if (dataContext.tags !== undefined) {
|
||||
return dataContext.tags.join(`, `);
|
||||
return `<span title='${dataContext.tags.join(', ')}'>${dataContext.tags.join(', ')}</span>`;
|
||||
}
|
||||
return dataContext.tags;
|
||||
}
|
||||
|
||||
private renderTarget(_row, _cell, _value, _columnDef, dataContext) {
|
||||
return `<div class='carbon-taskbar'><span class='action-label codicon ${TARGET_ICON_CLASS[dataContext.targetType]}'>${dataContext.targetName}</span></div>`;
|
||||
return `<div class='carbon-taskbar ellps'><span class='action-label codicon ${TARGET_ICON_CLASS[dataContext.targetType]}' title='${dataContext.targetName}'>${dataContext.targetName}</span></div>`;
|
||||
}
|
||||
|
||||
private detailSelectionFormatter(_row: number, _cell: number, _value: any, _columnDef: Slick.Column<Slick.SlickData>, dataContext: Slick.SlickData): string | undefined {
|
||||
|
||||
@@ -130,3 +130,9 @@ asmtview-component .asmtview-grid .slick-cell.error-row {
|
||||
position: relative;
|
||||
top: 50px;
|
||||
}
|
||||
|
||||
#asmtDiv .ellps {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -86,6 +86,7 @@ class AssessmentTestViewComponent implements IAssessmentComponent {
|
||||
dateUpdated: Date.now()
|
||||
};
|
||||
isActive: boolean = true;
|
||||
isBusy: boolean = false;
|
||||
}
|
||||
|
||||
let mockAssessmentService: TypeMoq.Mock<AssessmentService>;
|
||||
|
||||
Reference in New Issue
Block a user