From f611cf3b5ac8beaa8a0872d50a8bceca3604aedc Mon Sep 17 00:00:00 2001 From: Aditya Bist Date: Wed, 23 Jan 2019 14:25:54 -0800 Subject: [PATCH] Improve Agent performance (#3804) * pause and resume job history retrieval when opening dialogs * review comments * removed boolean for tab change --- .../views/jobHistory.component.ts | 8 ++- .../parts/jobManagement/views/jobHistory.css | 2 +- .../jobManagement/views/jobsView.component.ts | 70 ++++++++----------- 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/sql/parts/jobManagement/views/jobHistory.component.ts b/src/sql/parts/jobManagement/views/jobHistory.component.ts index daa6aa21d6..ff4cb6a079 100644 --- a/src/sql/parts/jobManagement/views/jobHistory.component.ts +++ b/src/sql/parts/jobManagement/views/jobHistory.component.ts @@ -177,7 +177,9 @@ export class JobHistoryComponent extends JobManagementView implements OnInit { } else { self._showPreviousRuns = false; self._showSteps = false; - self._cd.detectChanges(); + if (self._agentViewComponent.showHistory) { + self._cd.detectChanges(); + } } }); } @@ -209,7 +211,9 @@ export class JobHistoryComponent extends JobManagementView implements OnInit { } else { self._showSteps = false; } - self._cd.detectChanges(); + if (self._agentViewComponent.showHistory) { + self._cd.detectChanges(); + } } } diff --git a/src/sql/parts/jobManagement/views/jobHistory.css b/src/sql/parts/jobManagement/views/jobHistory.css index 38a2a011ce..b2540f1f95 100644 --- a/src/sql/parts/jobManagement/views/jobHistory.css +++ b/src/sql/parts/jobManagement/views/jobHistory.css @@ -262,7 +262,7 @@ jobhistory-component { } jobhistory-component > .jobhistory-heading-container { - display: inline-block; + display: flex; } jobhistory-component > .jobhistory-heading-container > .icon.in-progress { diff --git a/src/sql/parts/jobManagement/views/jobsView.component.ts b/src/sql/parts/jobManagement/views/jobsView.component.ts index ad5a99b45d..bbb84f4107 100644 --- a/src/sql/parts/jobManagement/views/jobsView.component.ts +++ b/src/sql/parts/jobManagement/views/jobsView.component.ts @@ -94,8 +94,6 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe private jobSchedules: { [jobId: string]: sqlops.AgentJobScheduleInfo[]; } = Object.create(null); public contextAction = NewJobAction; - private _didTabChange: boolean; - @ViewChild('jobsgrid') _gridEl: ElementRef; constructor( @@ -113,7 +111,6 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe @Inject(ITelemetryService) private _telemetryService: ITelemetryService ) { super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService); - this._didTabChange = false; let jobCacheObjectMap = this._jobManagementService.jobCacheObjectMap; let jobCache = jobCacheObjectMap[this._serverName]; if (jobCache) { @@ -135,7 +132,6 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe } ngOnDestroy() { - this._didTabChange = true; } public layout() { @@ -220,10 +216,8 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe } this._showProgressWheel = false; - if (this.isVisible && !this._didTabChange) { + if (this.isVisible) { this._cd.detectChanges(); - } else if (this._didTabChange) { - return; } }); } @@ -594,40 +588,36 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe private async curateJobHistory(jobs: sqlops.AgentJobInfo[], ownerUri: string) { const self = this; - await Promise.all(jobs.map(async (job) => { - await this._jobManagementService.getJobHistory(ownerUri, job.jobId, job.name).then(async(result) => { - if (result) { - self.jobSteps[job.jobId] = result.steps ? result.steps : []; - self.jobAlerts[job.jobId] = result.alerts ? result.alerts : []; - self.jobSchedules[job.jobId] = result.schedules ? result.schedules : []; - self.jobHistories[job.jobId] = result.histories ? result.histories : []; - self._jobCacheObject.setJobSteps(job.jobId, self.jobSteps[job.jobId]); - self._jobCacheObject.setJobHistory(job.jobId, self.jobHistories[job.jobId]); - self._jobCacheObject.setJobAlerts(job.jobId, self.jobAlerts[job.jobId]); - self._jobCacheObject.setJobSchedules(job.jobId, self.jobSchedules[job.jobId]); - let jobHistories = self._jobCacheObject.getJobHistory(job.jobId); - let previousRuns: sqlops.AgentJobHistoryInfo[]; - if (jobHistories.length >= 5) { - previousRuns = jobHistories.slice(jobHistories.length - 5, jobHistories.length); - } else { - previousRuns = jobHistories; - } - // dont create the charts if the tab changed - if (!self._didTabChange) { - self.createJobChart(job.jobId, previousRuns); - } - if (self._agentViewComponent.expanded.has(job.jobId)) { - let lastJobHistory = jobHistories[jobHistories.length - 1]; - let item = self.dataView.getItemById(job.jobId + '.error'); - let noStepsMessage = nls.localize('jobsView.noSteps', 'No Steps available for this job.'); - let errorMessage = lastJobHistory ? lastJobHistory.message : noStepsMessage; - item['name'] = nls.localize('jobsView.error', 'Error: ') + errorMessage; - self._agentViewComponent.setExpanded(job.jobId, item['name']); - self.dataView.updateItem(job.jobId + '.error', item); - } + for (let job of jobs) { + let result = await this._jobManagementService.getJobHistory(ownerUri, job.jobId, job.name); + if (result) { + self.jobSteps[job.jobId] = result.steps ? result.steps : []; + self.jobAlerts[job.jobId] = result.alerts ? result.alerts : []; + self.jobSchedules[job.jobId] = result.schedules ? result.schedules : []; + self.jobHistories[job.jobId] = result.histories ? result.histories : []; + self._jobCacheObject.setJobSteps(job.jobId, self.jobSteps[job.jobId]); + self._jobCacheObject.setJobHistory(job.jobId, self.jobHistories[job.jobId]); + self._jobCacheObject.setJobAlerts(job.jobId, self.jobAlerts[job.jobId]); + self._jobCacheObject.setJobSchedules(job.jobId, self.jobSchedules[job.jobId]); + let jobHistories = self._jobCacheObject.getJobHistory(job.jobId); + let previousRuns: sqlops.AgentJobHistoryInfo[]; + if (jobHistories.length >= 5) { + previousRuns = jobHistories.slice(jobHistories.length - 5, jobHistories.length); + } else { + previousRuns = jobHistories; } - }); - })); + self.createJobChart(job.jobId, previousRuns); + if (self._agentViewComponent.expanded.has(job.jobId)) { + let lastJobHistory = jobHistories[jobHistories.length - 1]; + let item = self.dataView.getItemById(job.jobId + '.error'); + let noStepsMessage = nls.localize('jobsView.noSteps', 'No Steps available for this job.'); + let errorMessage = lastJobHistory ? lastJobHistory.message : noStepsMessage; + item['name'] = nls.localize('jobsView.error', 'Error: ') + errorMessage; + self._agentViewComponent.setExpanded(job.jobId, item['name']); + self.dataView.updateItem(job.jobId + '.error', item); + } + } + } } private createJobChart(jobId: string, jobHistories: sqlops.AgentJobHistoryInfo[]): void {