mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-09 01:32:34 -05:00
Added opening latest notebook run to context menu from notebooks pane (#7066)
* added agent notebooks, notebook history view and view materialized notebook button * Got a basic UI running for viewing notebook history * made some changes to make UI look good * Added new notebook dialog * Added new notebook Dialog * Added create notebook dialog * Added edit and delete notebook job * Added some notebook history features * Added new notebook job icons, fixed a minor bug in openmaterializednotebookAPI and added fixed the schedule Picker API. * Fixed Bugs in Notebook Grid expansion * Fixed Notebook table highlighting and grid generation is done using code. * fixed some UI bugs * Added changes to reflect sqltoolservice api * Fixed some localize keys * Made changes in the PR and added ability to open Template Notebooks from notebook history view. * Added pin and renaming to notebook history * made some library calls async * fixed an import bug caused by merging from master * Validation in NotebookJobDialog * Added entry points for scheduling notebooks on file explorer and notebook editor * Handled no active connections and a small bug in collapsing grid * fix a bug in scheduling notebook from explorer and toolbar * setting up agent providers from connection now * changed modals * Reupload edited template * Add dialog info, solved an edit bug and localized UI strings. * Bug fixes in UI, notebook renaming and editing template on fly. * fixed a bug that failed editing notebook jobs from notebook jobs table * Fixed a cyclic dependency, made strings const and some other changes in the PR * Made some cyclic dependency and some fixes from PR * made some changes mentioned in the PR * Changed storage database health text * Changed the sqltoolservice version to the point to the latest build. * Added open Latest notebook notebook run to notebooks view context menu * Fixed a small compilation error * fixed a spelling mistake in function name * made changes mentioned in the PR added open Notebook Functionality to charts * Changed some context menues strings and order * made some changes from the PR and fixed an API call * made some changes mentioned in the PR * Changed sqltoolsservice version to point to the latest build
This commit is contained in:
@@ -14,7 +14,7 @@ import { Table } from 'sql/base/browser/ui/table/table';
|
||||
import { AgentViewComponent } from 'sql/workbench/parts/jobManagement/browser/agentView.component';
|
||||
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowDetailView';
|
||||
import { NotebookCacheObject } from 'sql/platform/jobManagement/common/jobManagementService';
|
||||
import { EditJobAction, NewNotebookJobAction, RunJobAction, EditNotebookJobAction, JobsRefreshAction, IJobActionInfo, DeleteNotebookAction } from 'sql/platform/jobManagement/browser/jobActions';
|
||||
import { EditJobAction, NewNotebookJobAction, RunJobAction, EditNotebookJobAction, JobsRefreshAction, IJobActionInfo, DeleteNotebookAction, OpenLatestRunMaterializedNotebook } from 'sql/platform/jobManagement/browser/jobActions';
|
||||
import { JobManagementUtilities } from 'sql/platform/jobManagement/browser/jobManagementUtilities';
|
||||
import { HeaderFilter } from 'sql/base/browser/ui/table/plugins/headerFilter.plugin';
|
||||
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||
@@ -395,6 +395,22 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
|
||||
this.highlightErrorRows(e1), (e2) => this.hightlightNonErrorRows(e2));
|
||||
});
|
||||
|
||||
jQuery('.bar').click((e) => {
|
||||
let clickEventTarget = e.target;
|
||||
let barId = Number(clickEventTarget.id.replace('bar', ''));
|
||||
let jobId = clickEventTarget.parentElement.offsetParent.id.replace('notebook', '');
|
||||
let notebooks = this._notebookCacheObject.notebooks;
|
||||
let targetNotebook: azdata.AgentNotebookInfo;
|
||||
for (let i = 0; i < notebooks.length; i++) {
|
||||
if (jobId === notebooks[i].jobId) {
|
||||
targetNotebook = notebooks[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.openLastNRun(targetNotebook, barId, 5);
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
// cache the dataview for future use
|
||||
this._notebookCacheObject.dataView = this.dataView;
|
||||
this.filterValueMap['start'] = [[], this.dataView.getItems()];
|
||||
@@ -540,21 +556,21 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
|
||||
if (runChart && runChart.length > 0) {
|
||||
return `<table class="jobprevruns" id="${dataContext.id}">
|
||||
<tr>
|
||||
<td>${runChart[0] ? runChart[0] : '<div class="bar0"></div>'}</td>
|
||||
<td>${runChart[1] ? runChart[1] : '<div class="bar1"></div>'}</td>
|
||||
<td>${runChart[2] ? runChart[2] : '<div class="bar2"></div>'}</td>
|
||||
<td>${runChart[3] ? runChart[3] : '<div class="bar3"></div>'}</td>
|
||||
<td>${runChart[4] ? runChart[4] : '<div class="bar4"></div>'}</td>
|
||||
<td>${runChart[0] ? runChart[0] : '<div class="bar" id="bar0"></div>'}</td>
|
||||
<td>${runChart[1] ? runChart[1] : '<div class="bar" id="bar1"></div>'}</td>
|
||||
<td>${runChart[2] ? runChart[2] : '<div class="bar" id="bar2"></div>'}</td>
|
||||
<td>${runChart[3] ? runChart[3] : '<div class="bar" id="bar3"></div>'}</td>
|
||||
<td>${runChart[4] ? runChart[4] : '<div class="bar" id="bar4"></div>'}</td>
|
||||
</tr>
|
||||
</table>`;
|
||||
} else {
|
||||
return `<table class="jobprevruns" id="${dataContext.id}">
|
||||
<tr>
|
||||
<td><div class="bar0"></div></td>
|
||||
<td><div class="bar1"></div></td>
|
||||
<td><div class="bar2"></div></td>
|
||||
<td><div class="bar3"></div></td>
|
||||
<td><div class="bar4"></div></td>
|
||||
<td><div class="bar" id="bar0"></div></td>
|
||||
<td><div class="bar" id="bar1"></div></td>
|
||||
<td><div class="bar" id="bar2"></div></td>
|
||||
<td><div class="bar" id="bar3"></div></td>
|
||||
<td><div class="bar" id="bar4"></div></td>
|
||||
</tr>
|
||||
</table>`;
|
||||
}
|
||||
@@ -667,7 +683,7 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
|
||||
if (jobHistories[i].materializedNotebookErrorInfo !== null && jobHistories[i].materializedNotebookErrorInfo.length > 0) {
|
||||
bgColor = 'orange';
|
||||
}
|
||||
let runGraph = jQuery(`table.jobprevruns#${jobId} > tbody > tr > td > div.bar${i}`);
|
||||
let runGraph = jQuery(`table.jobprevruns#${jobId} > tbody > tr > td > #bar${i}`);
|
||||
if (runGraph.length > 0) {
|
||||
|
||||
runGraph.css('height', chartHeights[i]);
|
||||
@@ -884,10 +900,11 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
|
||||
const editAction = this._instantiationService.createInstance(EditJobAction);
|
||||
const editNotebookAction = this._instantiationService.createInstance(EditNotebookJobAction);
|
||||
const runJobAction = this._instantiationService.createInstance(RunJobAction);
|
||||
const openLatestRunAction = this._instantiationService.createInstance(OpenLatestRunMaterializedNotebook);
|
||||
return [
|
||||
runJobAction,
|
||||
openLatestRunAction,
|
||||
editNotebookAction,
|
||||
editAction,
|
||||
this._instantiationService.createInstance(DeleteNotebookAction)
|
||||
];
|
||||
}
|
||||
@@ -981,4 +998,31 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
|
||||
let ownerUri: string = this._commonService.connectionManagementService.connectionInfo.ownerUri;
|
||||
await this._commandService.executeCommand('agent.openNotebookDialog', ownerUri);
|
||||
}
|
||||
|
||||
public async openLastNRun(notebook: azdata.AgentNotebookInfo, n: number, maxVisibleElements: number) {
|
||||
let notebookHistories = this._notebookCacheObject.getNotebookHistory(notebook.jobId);
|
||||
if (notebookHistories && n < notebookHistories.length) {
|
||||
notebookHistories = notebookHistories.sort((h1, h2) => {
|
||||
return new Date(h2.runDate).getTime() - new Date(h1.runDate).getTime();
|
||||
});
|
||||
if (notebookHistories.length > maxVisibleElements) {
|
||||
n = notebookHistories.length - (maxVisibleElements - n);
|
||||
}
|
||||
n = notebookHistories.length - 1 - n;
|
||||
let history: azdata.AgentNotebookHistoryInfo = notebookHistories[n];
|
||||
// Did Job Fail? if yes, then notebook to return
|
||||
if (history.runStatus === 0) {
|
||||
return;
|
||||
}
|
||||
let ownerUri: string = this._commonService.connectionManagementService.connectionInfo.ownerUri;
|
||||
let targetDatabase = notebook.targetDatabase;
|
||||
const result = await this._jobManagementService.getMaterialziedNotebook(ownerUri, targetDatabase, history.materializedNotebookId);
|
||||
if (result) {
|
||||
let regex = /:|-/gi;
|
||||
let readableDataTimeString = history.runDate.replace(regex, '').replace(' ', '');
|
||||
let tempNotebookFileName = notebook.name + '_' + readableDataTimeString;
|
||||
await this._commandService.executeCommand('agent.openNotebookEditorFromJsonString', tempNotebookFileName, result.notebookMaterialized);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user