mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2024-11-25 06:56:38 +00:00
Initial pass at removing old spark code (#80)
Co-authored-by: Steve Faulkner <stfaul@microsoft.com>
This commit is contained in:
parent
5a1dd42395
commit
326bd4f494
@ -147,7 +147,6 @@ src/Explorer/Panes/ExecuteSprocParamsPane.ts
|
||||
src/Explorer/Panes/GraphStylingPane.ts
|
||||
src/Explorer/Panes/LibraryManagePane.ts
|
||||
src/Explorer/Panes/LoadQueryPane.ts
|
||||
src/Explorer/Panes/ManageSparkClusterPane.ts
|
||||
src/Explorer/Panes/NewVertexPane.ts
|
||||
src/Explorer/Panes/PaneComponents.ts
|
||||
src/Explorer/Panes/RenewAdHocAccessPane.ts
|
||||
@ -155,7 +154,6 @@ src/Explorer/Panes/SaveQueryPane.ts
|
||||
src/Explorer/Panes/SettingsPane.test.ts
|
||||
src/Explorer/Panes/SettingsPane.ts
|
||||
src/Explorer/Panes/SetupNotebooksPane.ts
|
||||
src/Explorer/Panes/SetupSparkClusterPane.ts
|
||||
src/Explorer/Panes/StringInputPane.ts
|
||||
src/Explorer/Panes/SwitchDirectoryPane.ts
|
||||
src/Explorer/Panes/Tables/AddTableEntityPane.ts
|
||||
|
@ -148,8 +148,6 @@ export interface Explorer {
|
||||
uploadFilePane: UploadFilePane;
|
||||
stringInputPane: StringInputPane;
|
||||
setupNotebooksPane: SetupNotebooksPane;
|
||||
setupSparkClusterPane: ContextualPane;
|
||||
manageSparkClusterPane: ContextualPane;
|
||||
libraryManagePane: ContextualPane;
|
||||
clusterLibraryPane: ContextualPane;
|
||||
gitHubReposPane: ContextualPane;
|
||||
|
@ -116,14 +116,6 @@ describe("Component Registerer", () => {
|
||||
expect(ko.components.isRegistered("setup-notebooks-pane")).toBe(true);
|
||||
});
|
||||
|
||||
it("should register setup-spark-cluster-pane component", () => {
|
||||
expect(ko.components.isRegistered("setup-spark-cluster-pane")).toBe(true);
|
||||
});
|
||||
|
||||
it("should register manage-spark-cluster-pane component", () => {
|
||||
expect(ko.components.isRegistered("manage-spark-cluster-pane")).toBe(true);
|
||||
});
|
||||
|
||||
it("should register dynamic-list component", () => {
|
||||
expect(ko.components.isRegistered("dynamic-list")).toBe(true);
|
||||
});
|
||||
|
@ -76,8 +76,6 @@ ko.components.register("browse-queries-pane", new PaneComponents.BrowseQueriesPa
|
||||
ko.components.register("upload-file-pane", new PaneComponents.UploadFilePaneComponent());
|
||||
ko.components.register("string-input-pane", new PaneComponents.StringInputPaneComponent());
|
||||
ko.components.register("setup-notebooks-pane", new PaneComponents.SetupNotebooksPaneComponent());
|
||||
ko.components.register("setup-spark-cluster-pane", new PaneComponents.SetupSparkClusterPaneComponent());
|
||||
ko.components.register("manage-spark-cluster-pane", new PaneComponents.ManageSparkClusterPaneComponent());
|
||||
ko.components.register("library-manage-pane", new PaneComponents.LibraryManagePaneComponent());
|
||||
ko.components.register("cluster-library-pane", new PaneComponents.ClusterLibraryPaneComponent());
|
||||
ko.components.register("github-repos-pane", new PaneComponents.GitHubReposPaneComponent());
|
||||
|
@ -55,7 +55,6 @@ import { IGalleryItem } from "../Juno/JunoClient";
|
||||
import { LibraryManagePane } from "./Panes/LibraryManagePane";
|
||||
import { LoadQueryPane } from "./Panes/LoadQueryPane";
|
||||
import * as Logger from "../Common/Logger";
|
||||
import { ManageSparkClusterPane } from "./Panes/ManageSparkClusterPane";
|
||||
import { MessageHandler } from "../Common/MessageHandler";
|
||||
import { NotebookContentItem, NotebookContentItemType } from "./Notebook/NotebookContentItem";
|
||||
import { NotebookUtil } from "./Notebook/NotebookUtil";
|
||||
@ -73,7 +72,6 @@ import { RouteHandler } from "../RouteHandlers/RouteHandler";
|
||||
import { SaveQueryPane } from "./Panes/SaveQueryPane";
|
||||
import { SettingsPane } from "./Panes/SettingsPane";
|
||||
import { SetupNotebooksPane } from "./Panes/SetupNotebooksPane";
|
||||
import { SetupSparkClusterPane } from "./Panes/SetupSparkClusterPane";
|
||||
import { SparkClusterManager } from "../SparkClusterManager/SparkClusterManager";
|
||||
import { SplashScreenComponentAdapter } from "./SplashScreen/SplashScreenComponentApdapter";
|
||||
import { Splitter, SplitterBounds, SplitterDirection } from "../Common/Splitter";
|
||||
@ -192,8 +190,6 @@ export default class Explorer implements ViewModels.Explorer {
|
||||
public uploadFilePane: UploadFilePane;
|
||||
public stringInputPane: StringInputPane;
|
||||
public setupNotebooksPane: SetupNotebooksPane;
|
||||
public setupSparkClusterPane: ViewModels.ContextualPane;
|
||||
public manageSparkClusterPane: ViewModels.ContextualPane;
|
||||
public libraryManagePane: ViewModels.ContextualPane;
|
||||
public clusterLibraryPane: ViewModels.ContextualPane;
|
||||
public gitHubReposPane: ViewModels.ContextualPane;
|
||||
@ -759,22 +755,6 @@ export default class Explorer implements ViewModels.Explorer {
|
||||
container: this
|
||||
});
|
||||
|
||||
this.setupSparkClusterPane = new SetupSparkClusterPane({
|
||||
documentClientUtility: this.documentClientUtility,
|
||||
id: "setupsparkclusterpane",
|
||||
visible: ko.observable<boolean>(false),
|
||||
|
||||
container: this
|
||||
});
|
||||
|
||||
this.manageSparkClusterPane = new ManageSparkClusterPane({
|
||||
documentClientUtility: this.documentClientUtility,
|
||||
id: "managesparkclusterpane",
|
||||
visible: ko.observable<boolean>(false),
|
||||
|
||||
container: this
|
||||
});
|
||||
|
||||
this.libraryManagePane = new LibraryManagePane({
|
||||
documentClientUtility: this.documentClientUtility,
|
||||
id: "libraryManagePane",
|
||||
@ -818,9 +798,7 @@ export default class Explorer implements ViewModels.Explorer {
|
||||
this.browseQueriesPane,
|
||||
this.uploadFilePane,
|
||||
this.stringInputPane,
|
||||
this.setupNotebooksPane,
|
||||
this.setupSparkClusterPane,
|
||||
this.manageSparkClusterPane
|
||||
this.setupNotebooksPane
|
||||
];
|
||||
this.addDatabaseText.subscribe((addDatabaseText: string) => this.addDatabasePane.title(addDatabaseText));
|
||||
this.rebindDocumentClientUtility.bind(this);
|
||||
|
@ -4,14 +4,11 @@ import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryCons
|
||||
import { Areas } from "../../../Common/Constants";
|
||||
import TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
|
||||
|
||||
import ApacheSparkIcon from "../../../../images/notebook/Apache-spark.svg";
|
||||
import AddDatabaseIcon from "../../../../images/AddDatabase.svg";
|
||||
import AddCollectionIcon from "../../../../images/AddCollection.svg";
|
||||
import AddSqlQueryIcon from "../../../../images/AddSqlQuery_16x16.svg";
|
||||
import BrowseQueriesIcon from "../../../../images/BrowseQuery.svg";
|
||||
import * as Constants from "../../../Common/Constants";
|
||||
import DeleteIcon from "../../../../images/delete.svg";
|
||||
import EditIcon from "../../../../images/edit.svg";
|
||||
import OpenInTabIcon from "../../../../images/open-in-tab.svg";
|
||||
import OpenQueryFromDiskIcon from "../../../../images/OpenQueryFromDisk.svg";
|
||||
import CosmosTerminalIcon from "../../../../images/Cosmos-Terminal.svg";
|
||||
@ -25,7 +22,6 @@ import FeedbackIcon from "../../../../images/Feedback-Command.svg";
|
||||
import EnableNotebooksIcon from "../../../../images/notebook/Notebook-enable.svg";
|
||||
import NewNotebookIcon from "../../../../images/notebook/Notebook-new.svg";
|
||||
import ResetWorkspaceIcon from "../../../../images/notebook/Notebook-reset-workspace.svg";
|
||||
import LibraryManageIcon from "../../../../images/notebook/Spark-library-manage.svg";
|
||||
import GitHubIcon from "../../../../images/github.svg";
|
||||
import SynapseIcon from "../../../../images/synapse-link.svg";
|
||||
import { config, Platform } from "../../../Config";
|
||||
@ -88,25 +84,6 @@ export class CommandBarComponentButtonFactory {
|
||||
buttons.push(CommandBarComponentButtonFactory.createNotebookWorkspaceResetButton(container));
|
||||
}
|
||||
|
||||
// TODO: Should be replaced with the create arcadia spark pool button
|
||||
// if (!container.isSparkEnabled() && container.isSparkEnabledForAccount()) {
|
||||
// const createSparkClusterButton = CommandBarComponentButtonFactory.createSparkClusterButton(container);
|
||||
// buttons.push(createSparkClusterButton);
|
||||
// }
|
||||
|
||||
// TODO: Should be replaced with the edit/manage/delete arcadia spark pool button
|
||||
// if (container.isSparkEnabled()) {
|
||||
// const manageSparkClusterButton = CommandBarComponentButtonFactory.createMonitorClusterButton(container);
|
||||
// manageSparkClusterButton.children = [
|
||||
// CommandBarComponentButtonFactory.createMonitorClusterButton(container),
|
||||
// CommandBarComponentButtonFactory.createEditClusterButton(container),
|
||||
// CommandBarComponentButtonFactory.createDeleteClusterButton(container),
|
||||
// CommandBarComponentButtonFactory.createLibraryManageButton(container),
|
||||
// CommandBarComponentButtonFactory.createClusterLibraryButton(container)
|
||||
// ];
|
||||
// buttons.push(manageSparkClusterButton);
|
||||
// }
|
||||
|
||||
if (!container.isDatabaseNodeOrNoneSelected()) {
|
||||
if (container.isNotebookEnabled()) {
|
||||
buttons.push(CommandBarComponentButtonFactory.createDivider());
|
||||
@ -505,58 +482,6 @@ export class CommandBarComponentButtonFactory {
|
||||
};
|
||||
}
|
||||
|
||||
private static createSparkClusterButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Enable Spark";
|
||||
return {
|
||||
iconSrc: ApacheSparkIcon,
|
||||
iconAlt: "Enable spark icon",
|
||||
onCommandClick: () => container.setupSparkClusterPane.open(),
|
||||
commandButtonLabel: label,
|
||||
hasPopup: false,
|
||||
disabled: false,
|
||||
ariaLabel: label
|
||||
};
|
||||
}
|
||||
|
||||
private static createEditClusterButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Edit Cluster";
|
||||
return {
|
||||
iconSrc: EditIcon,
|
||||
iconAlt: "Edit cluster icon",
|
||||
onCommandClick: () => container.manageSparkClusterPane.open(),
|
||||
commandButtonLabel: label,
|
||||
hasPopup: false,
|
||||
disabled: false,
|
||||
ariaLabel: label
|
||||
};
|
||||
}
|
||||
|
||||
private static createDeleteClusterButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Delete Cluster";
|
||||
return {
|
||||
iconSrc: DeleteIcon,
|
||||
iconAlt: "Delete cluster icon",
|
||||
onCommandClick: () => container.deleteCluster(),
|
||||
commandButtonLabel: label,
|
||||
hasPopup: false,
|
||||
disabled: false,
|
||||
ariaLabel: label
|
||||
};
|
||||
}
|
||||
|
||||
private static createMonitorClusterButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Monitor Cluster";
|
||||
return {
|
||||
iconSrc: ApacheSparkIcon,
|
||||
iconAlt: "Monitor cluster icon",
|
||||
onCommandClick: () => container.openSparkMasterTab(),
|
||||
commandButtonLabel: label,
|
||||
hasPopup: false,
|
||||
disabled: false,
|
||||
ariaLabel: label
|
||||
};
|
||||
}
|
||||
|
||||
private static createOpenTerminalButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Open Terminal";
|
||||
return {
|
||||
@ -658,32 +583,6 @@ export class CommandBarComponentButtonFactory {
|
||||
};
|
||||
}
|
||||
|
||||
private static createLibraryManageButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Manage Libraries";
|
||||
return {
|
||||
iconSrc: LibraryManageIcon,
|
||||
iconAlt: label,
|
||||
onCommandClick: () => container.libraryManagePane.open(),
|
||||
commandButtonLabel: label,
|
||||
hasPopup: false,
|
||||
disabled: false,
|
||||
ariaLabel: label
|
||||
};
|
||||
}
|
||||
|
||||
private static createClusterLibraryButton(container: ViewModels.Explorer): ViewModels.NavbarButtonConfig {
|
||||
const label = "Manage Cluster Libraries";
|
||||
return {
|
||||
iconSrc: LibraryManageIcon,
|
||||
iconAlt: label,
|
||||
onCommandClick: () => container.clusterLibraryPane.open(),
|
||||
commandButtonLabel: label,
|
||||
hasPopup: false,
|
||||
disabled: false,
|
||||
ariaLabel: label
|
||||
};
|
||||
}
|
||||
|
||||
private static createStaticCommandBarButtonsForResourceToken(
|
||||
container: ViewModels.Explorer
|
||||
): ViewModels.NavbarButtonConfig[] {
|
||||
|
@ -94,8 +94,6 @@ export class ExplorerStub implements ViewModels.Explorer {
|
||||
public uploadFilePane: UploadFilePane;
|
||||
public stringInputPane: StringInputPane;
|
||||
public setupNotebooksPane: SetupNotebooksPane;
|
||||
public setupSparkClusterPane: ViewModels.ContextualPane;
|
||||
public manageSparkClusterPane: ViewModels.ContextualPane;
|
||||
public isGalleryPublishEnabled: ko.Computed<boolean>;
|
||||
public isGitHubPaneEnabled: ko.Observable<boolean>;
|
||||
public isPublishNotebookPaneEnabled: ko.Observable<boolean>;
|
||||
|
@ -1,37 +0,0 @@
|
||||
<div data-bind="visible: visible, event: { keydown: onPaneKeyDown }">
|
||||
<div class="contextual-pane-out" data-bind="click: cancel, clickBubble: false"></div>
|
||||
<div class="contextual-pane" id="managesparkclusterpane">
|
||||
<!-- Setup spark form -- Start -->
|
||||
<div class="contextual-pane-in">
|
||||
<div class="paneContentContainer">
|
||||
<form class="paneContentContainer" data-bind="submit: submit">
|
||||
<!-- Setup spark header - Start -->
|
||||
<div class="firstdivbg headerline">
|
||||
<span data-bind="text: title"></span>
|
||||
<div
|
||||
class="closeImg"
|
||||
role="button"
|
||||
aria-label="Close pane"
|
||||
tabindex="0"
|
||||
data-bind="click: cancel, event: { keypress: onCloseKeyPress }"
|
||||
>
|
||||
<img src="../../../images/close-black.svg" title="Close" alt="Close" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- Setup spark header - End -->
|
||||
|
||||
<div class="paneMainContent"><div data-bind="react: clusterSettingsComponentAdapter"></div></div>
|
||||
<div class="paneFooter">
|
||||
<div class="leftpanel-okbut"><input type="submit" value="Save" class="btncreatecoll1" /></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Setup spark form - Start -->
|
||||
<!-- Loader - Start -->
|
||||
<div class="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer" data-bind="visible: isExecuting">
|
||||
<img class="dataExplorerLoader" alt="loading indicator image" src="/LoadingIndicator_3Squares.gif" />
|
||||
</div>
|
||||
<!-- Loader - End -->
|
||||
</div>
|
||||
</div>
|
@ -1,153 +0,0 @@
|
||||
import * as ko from "knockout";
|
||||
import * as ViewModels from "../../Contracts/ViewModels";
|
||||
import * as DataModels from "../../Contracts/DataModels";
|
||||
import { Action } from "../../Shared/Telemetry/TelemetryConstants";
|
||||
import { Areas } from "../../Common/Constants";
|
||||
import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent";
|
||||
import { ContextualPaneBase } from "./ContextualPaneBase";
|
||||
import { ClusterSettingsComponentAdapter } from "../Controls/Spark/ClusterSettingsComponentAdapter";
|
||||
import { ClusterSettingsComponentProps } from "../Controls/Spark/ClusterSettingsComponent";
|
||||
import { NotificationConsoleUtils } from "../../Utils/NotificationConsoleUtils";
|
||||
import { Spark } from "../../Common/Constants";
|
||||
import TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
|
||||
|
||||
const MAX_NUM_WORKERS = 10;
|
||||
|
||||
export class ManageSparkClusterPane extends ContextualPaneBase {
|
||||
public readonly maxWorkerCount = Spark.MaxWorkerCount;
|
||||
public workerCount: ko.Observable<number>;
|
||||
public clusterSettingsComponentAdapter: ClusterSettingsComponentAdapter;
|
||||
|
||||
private _settingsComponentAdapterProps: ko.Observable<ClusterSettingsComponentProps>;
|
||||
private _defaultCluster: ko.Observable<DataModels.SparkCluster>;
|
||||
|
||||
constructor(options: ViewModels.PaneOptions) {
|
||||
super(options);
|
||||
this.title("Manage spark cluster");
|
||||
this.workerCount = ko.observable<number>();
|
||||
this._defaultCluster = ko.observable<DataModels.SparkCluster>({
|
||||
id: undefined,
|
||||
name: undefined,
|
||||
type: undefined,
|
||||
properties: {
|
||||
kind: undefined,
|
||||
creationTime: undefined,
|
||||
driverSize: undefined,
|
||||
status: undefined,
|
||||
workerInstanceCount: undefined,
|
||||
workerSize: undefined
|
||||
}
|
||||
});
|
||||
this._settingsComponentAdapterProps = ko.observable<ClusterSettingsComponentProps>({
|
||||
cluster: this._defaultCluster(),
|
||||
onClusterSettingsChanged: this.onClusterSettingsChange
|
||||
});
|
||||
this._defaultCluster.subscribe(cluster => {
|
||||
this._settingsComponentAdapterProps().cluster = cluster;
|
||||
this._settingsComponentAdapterProps.valueHasMutated(); // trigger component re-render
|
||||
});
|
||||
this.clusterSettingsComponentAdapter = new ClusterSettingsComponentAdapter();
|
||||
this.clusterSettingsComponentAdapter.parameters = this._settingsComponentAdapterProps;
|
||||
this.resetData();
|
||||
}
|
||||
|
||||
public async submit() {
|
||||
if (!this.workerCount() || this.workerCount() > MAX_NUM_WORKERS) {
|
||||
this.formErrors("Invalid worker count specified");
|
||||
this.formErrorsDetails(`The number of workers should be between 0 and ${MAX_NUM_WORKERS}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this._defaultCluster()) {
|
||||
this.formErrors("No default cluster found");
|
||||
this.formErrorsDetails("No default cluster found to be associated with this account");
|
||||
return;
|
||||
}
|
||||
|
||||
const startKey = TelemetryProcessor.traceStart(Action.UpdateSparkCluster, {
|
||||
databaseAccountName: this.container && this.container.databaseAccount().name,
|
||||
defaultExperience: this.container && this.container.defaultExperience(),
|
||||
dataExplorerArea: Areas.ContextualPane,
|
||||
paneTitle: this.title()
|
||||
});
|
||||
const workerCount = this.workerCount();
|
||||
const id = NotificationConsoleUtils.logConsoleMessage(
|
||||
ConsoleDataType.InProgress,
|
||||
`Updating default cluster worker count to ${workerCount} nodes`
|
||||
);
|
||||
this.isExecuting(true);
|
||||
try {
|
||||
const databaseAccount = this.container && this.container.databaseAccount();
|
||||
const cluster = this._defaultCluster();
|
||||
cluster.properties.workerInstanceCount = workerCount;
|
||||
const updatedCluster =
|
||||
this.container &&
|
||||
(await this.container.sparkClusterManager.updateClusterAsync(
|
||||
databaseAccount && databaseAccount.id,
|
||||
cluster.name,
|
||||
cluster
|
||||
));
|
||||
this._defaultCluster(updatedCluster);
|
||||
NotificationConsoleUtils.logConsoleMessage(
|
||||
ConsoleDataType.Info,
|
||||
`Successfully updated default cluster worker count to ${workerCount} nodes`
|
||||
);
|
||||
TelemetryProcessor.traceSuccess(
|
||||
Action.UpdateSparkCluster,
|
||||
{
|
||||
databaseAccountName: this.container && this.container.databaseAccount().name,
|
||||
defaultExperience: this.container && this.container.defaultExperience(),
|
||||
dataExplorerArea: Areas.ContextualPane,
|
||||
paneTitle: this.title()
|
||||
},
|
||||
startKey
|
||||
);
|
||||
} catch (error) {
|
||||
NotificationConsoleUtils.logConsoleMessage(
|
||||
ConsoleDataType.Error,
|
||||
`Failed to update default cluster worker count to ${workerCount} nodes: ${JSON.stringify(error)}`
|
||||
);
|
||||
TelemetryProcessor.traceFailure(
|
||||
Action.UpdateSparkCluster,
|
||||
{
|
||||
databaseAccountName: this.container && this.container.databaseAccount().name,
|
||||
defaultExperience: this.container && this.container.defaultExperience(),
|
||||
dataExplorerArea: Areas.ContextualPane,
|
||||
paneTitle: this.title(),
|
||||
error: JSON.stringify(error)
|
||||
},
|
||||
startKey
|
||||
);
|
||||
} finally {
|
||||
this.isExecuting(false);
|
||||
NotificationConsoleUtils.clearInProgressMessageWithId(id);
|
||||
}
|
||||
}
|
||||
|
||||
public onClusterSettingsChange = (cluster: DataModels.SparkCluster) => {
|
||||
this._defaultCluster(cluster);
|
||||
this.workerCount(
|
||||
(cluster &&
|
||||
cluster.properties &&
|
||||
cluster.properties.workerInstanceCount !== undefined &&
|
||||
cluster.properties.workerInstanceCount) ||
|
||||
0
|
||||
);
|
||||
};
|
||||
|
||||
public async open() {
|
||||
const defaultCluster = await this.container.sparkClusterManager.getClusterAsync(
|
||||
this.container.databaseAccount().id,
|
||||
"default"
|
||||
);
|
||||
this._defaultCluster(defaultCluster);
|
||||
this.workerCount(
|
||||
(defaultCluster &&
|
||||
defaultCluster.properties &&
|
||||
defaultCluster.properties.workerInstanceCount !== undefined &&
|
||||
defaultCluster.properties.workerInstanceCount) ||
|
||||
0
|
||||
);
|
||||
super.open();
|
||||
}
|
||||
}
|
@ -19,8 +19,6 @@ import BrowseQueriesPaneTemplate from "./BrowseQueriesPane.html";
|
||||
import UploadFilePaneTemplate from "./UploadFilePane.html";
|
||||
import StringInputPaneTemplate from "./StringInputPane.html";
|
||||
import SetupNotebooksPaneTemplate from "./SetupNotebooksPane.html";
|
||||
import SetupSparkClusterPaneTemplate from "./SetupSparkClusterPane.html";
|
||||
import ManageSparkClusterPaneTemplate from "./ManageSparkClusterPane.html";
|
||||
import LibraryManagePaneTemplate from "./LibraryManagePane.html";
|
||||
import ClusterLibraryPaneTemplate from "./ClusterLibraryPane.html";
|
||||
import GitHubReposPaneTemplate from "./GitHubReposPane.html";
|
||||
@ -220,24 +218,6 @@ export class SetupNotebooksPaneComponent {
|
||||
}
|
||||
}
|
||||
|
||||
export class SetupSparkClusterPaneComponent {
|
||||
constructor() {
|
||||
return {
|
||||
viewModel: PaneComponent,
|
||||
template: SetupSparkClusterPaneTemplate
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class ManageSparkClusterPaneComponent {
|
||||
constructor() {
|
||||
return {
|
||||
viewModel: PaneComponent,
|
||||
template: ManageSparkClusterPaneTemplate
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class LibraryManagePaneComponent {
|
||||
constructor() {
|
||||
return {
|
||||
|
@ -1,52 +0,0 @@
|
||||
<div data-bind="visible: visible, event: { keydown: onPaneKeyDown }">
|
||||
<div class="contextual-pane-out" data-bind="click: cancel, clickBubble: false"></div>
|
||||
<div class="contextual-pane" id="setupsparkclusterpane">
|
||||
<!-- Setup spark form -- Start -->
|
||||
<div class="contextual-pane-in">
|
||||
<form class="paneContentContainer" data-bind="submit: submit">
|
||||
<div class="paneContentContainer">
|
||||
<!-- Setup spark header - Start -->
|
||||
<div class="firstdivbg headerline">
|
||||
<span data-bind="text: title"></span>
|
||||
<div
|
||||
class="closeImg"
|
||||
role="button"
|
||||
aria-label="Close pane"
|
||||
tabindex="0"
|
||||
data-bind="click: cancel, event: { keypress: onCloseKeyPress }"
|
||||
>
|
||||
<img src="../../../images/close-black.svg" title="Close" alt="Close" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- Setup spark header - End -->
|
||||
|
||||
<div class="paneMainContent">
|
||||
<div class="pkPadding">
|
||||
<div data-bind="text: setupSparkClusterText"></div>
|
||||
<div class="seconddivpadding">
|
||||
<div>Worker Count</div>
|
||||
<input
|
||||
class="sparkWorkerCountInput"
|
||||
type="number"
|
||||
min="1"
|
||||
aria-label="worker count input"
|
||||
required
|
||||
data-bind="textInput: workerCount, attr: { max: maxWorkerNodes }"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paneFooter">
|
||||
<div class="leftpanel-okbut"><input type="submit" value="Complete Setup" class="btncreatecoll1" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- Setup spark form - Start -->
|
||||
<!-- Loader - Start -->
|
||||
<div class="dataExplorerLoaderContainer dataExplorerPaneLoaderContainer" data-bind="visible: isExecuting">
|
||||
<img class="dataExplorerLoader" alt="loading indicator image" src="/LoadingIndicator_3Squares.gif" />
|
||||
</div>
|
||||
<!-- Loader - End -->
|
||||
</div>
|
||||
</div>
|
@ -1,99 +0,0 @@
|
||||
import * as ko from "knockout";
|
||||
import * as ViewModels from "../../Contracts/ViewModels";
|
||||
import { Action } from "../../Shared/Telemetry/TelemetryConstants";
|
||||
import { Areas } from "../../Common/Constants";
|
||||
import { ConsoleDataType } from "../Menus/NotificationConsole/NotificationConsoleComponent";
|
||||
import { ContextualPaneBase } from "./ContextualPaneBase";
|
||||
import { NotificationConsoleUtils } from "../../Utils/NotificationConsoleUtils";
|
||||
import { Spark } from "../../Common/Constants";
|
||||
import TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
|
||||
|
||||
export class SetupSparkClusterPane extends ContextualPaneBase {
|
||||
public setupSparkClusterText: string =
|
||||
"Looks like you have not yet created a default spark cluster for this account. To proceed and start using notebooks with spark, we'll need to create a default spark cluster for this account.";
|
||||
public readonly maxWorkerNodes: number = Spark.MaxWorkerCount;
|
||||
public workerCount: ko.Observable<number>;
|
||||
|
||||
constructor(options: ViewModels.PaneOptions) {
|
||||
super(options);
|
||||
this.title("Enable spark");
|
||||
this.workerCount = ko.observable<number>(1);
|
||||
this.resetData();
|
||||
}
|
||||
|
||||
public async submit() {
|
||||
await this.setupSparkCluster();
|
||||
}
|
||||
|
||||
public async setupSparkCluster(): Promise<void> {
|
||||
if (!this.container) {
|
||||
return;
|
||||
}
|
||||
|
||||
const startKey: number = TelemetryProcessor.traceStart(Action.CreateSparkCluster, {
|
||||
databaseAccountName: this.container && this.container.databaseAccount().name,
|
||||
defaultExperience: this.container && this.container.defaultExperience(),
|
||||
dataExplorerArea: Areas.ContextualPane,
|
||||
paneTitle: this.title()
|
||||
});
|
||||
const id = NotificationConsoleUtils.logConsoleMessage(
|
||||
ConsoleDataType.InProgress,
|
||||
"Creating a new default spark cluster"
|
||||
);
|
||||
try {
|
||||
this.isExecuting(true);
|
||||
await this.container.sparkClusterManager.createClusterAsync(
|
||||
this.container.databaseAccount() && this.container.databaseAccount().id,
|
||||
{
|
||||
name: "default",
|
||||
properties: {
|
||||
kind: "Spark",
|
||||
workerInstanceCount: this.workerCount(),
|
||||
driverSize: "Cosmos.Spark.D4s",
|
||||
workerSize: "Cosmos.Spark.D4s",
|
||||
creationTime: undefined,
|
||||
status: undefined
|
||||
}
|
||||
}
|
||||
);
|
||||
this.container.isAccountReady.valueHasMutated(); // refresh internal state
|
||||
this.close();
|
||||
TelemetryProcessor.traceSuccess(
|
||||
Action.CreateSparkCluster,
|
||||
{
|
||||
databaseAccountName: this.container && this.container.databaseAccount().name,
|
||||
defaultExperience: this.container && this.container.defaultExperience(),
|
||||
dataExplorerArea: Areas.ContextualPane,
|
||||
paneTitle: this.title()
|
||||
},
|
||||
startKey
|
||||
);
|
||||
NotificationConsoleUtils.logConsoleMessage(
|
||||
ConsoleDataType.Info,
|
||||
"Successfully created a default spark cluster for the account"
|
||||
);
|
||||
} catch (error) {
|
||||
const errorMessage = typeof error == "string" ? error : JSON.stringify(error);
|
||||
TelemetryProcessor.traceFailure(
|
||||
Action.CreateSparkCluster,
|
||||
{
|
||||
databaseAccountName: this.container && this.container.databaseAccount().name,
|
||||
defaultExperience: this.container && this.container.defaultExperience(),
|
||||
dataExplorerArea: Areas.ContextualPane,
|
||||
paneTitle: this.title(),
|
||||
error: errorMessage
|
||||
},
|
||||
startKey
|
||||
);
|
||||
this.formErrors("Failed to setup a default spark cluster");
|
||||
this.formErrorsDetails(`Failed to setup a default spark cluster: ${errorMessage}`);
|
||||
NotificationConsoleUtils.logConsoleMessage(
|
||||
ConsoleDataType.Error,
|
||||
`Failed to create a default spark cluster: ${errorMessage}`
|
||||
);
|
||||
} finally {
|
||||
this.isExecuting(false);
|
||||
NotificationConsoleUtils.clearInProgressMessageWithId(id);
|
||||
}
|
||||
}
|
||||
}
|
@ -441,8 +441,6 @@
|
||||
<upload-file-pane params="{data: uploadFilePane}"></upload-file-pane>
|
||||
<string-input-pane params="{data: stringInputPane}"></string-input-pane>
|
||||
<setup-notebooks-pane params="{data: setupNotebooksPane}"></setup-notebooks-pane>
|
||||
<setup-spark-cluster-pane params="{data: setupSparkClusterPane}"></setup-spark-cluster-pane>
|
||||
<manage-spark-cluster-pane params="{data: manageSparkClusterPane}"></manage-spark-cluster-pane>
|
||||
<library-manage-pane params="{data: libraryManagePane}"></library-manage-pane>
|
||||
<cluster-library-pane params="{data: clusterLibraryPane}"></cluster-library-pane>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user