Sql Assessment fixes (#12169)

* prevent simultaneous actions runs and label fix
* sqltools service version update
This commit is contained in:
Vladimir Chernov
2020-09-09 17:54:48 +03:00
committed by GitHub
parent 3a0be70783
commit 5ae9495bc6
5 changed files with 27 additions and 9 deletions

View File

@@ -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`;

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -86,6 +86,7 @@ class AssessmentTestViewComponent implements IAssessmentComponent {
dateUpdated: Date.now()
};
isActive: boolean = true;
isBusy: boolean = false;
}
let mockAssessmentService: TypeMoq.Mock<AssessmentService>;