forked from apache/beam
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.ts
More file actions
182 lines (166 loc) · 5.82 KB
/
index.ts
File metadata and controls
182 lines (166 loc) · 5.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
// Licensed under the Apache License, Version 2.0 (the 'License'); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import {
JupyterFrontEnd,
JupyterFrontEndPlugin
} from '@jupyterlab/application';
import { ICommandPalette } from '@jupyterlab/apputils';
import { ILauncher } from '@jupyterlab/launcher';
import { IMainMenu } from '@jupyterlab/mainmenu';
import { IRenderMimeRegistry } from '@jupyterlab/rendermime';
import { Menu } from '@lumino/widgets';
import { ClustersWidget } from './clusters/ClustersWidget';
import { SessionContext } from '@jupyterlab/apputils';
import { SidePanel } from './SidePanel';
// prettier-ignore
import {
InteractiveInspectorWidget
} from './inspector/InteractiveInspectorWidget';
import { YamlWidget } from './yaml/YamlWidget';
namespace CommandIDs {
export const open_inspector =
'apache-beam-jupyterlab-sidepanel:open_inspector';
export const open_clusters_panel =
'apache-beam-jupyterlab-sidepanel:open_clusters_panel';
export const open_yaml_editor =
'apache-beam-jupyterlab-sidepanel:open_yaml_editor';
}
/**
* Initialization data for the apache-beam-jupyterlab-sidepanel extension.
*
* There are two user interfaces that use the JupyterLab sidepanel. There is
* the Interactive Inspector, and the Cluster Management side panel.
*
* To open the main user interface of the side panel, a user can:
* 1. Select either the `Open Inspector` or `Manage Clusters` item from
* the `Interactive Beam` category on the launcher page of JupyterLab.
* 2. Same selection from the `Commands` palette on the left side of the
* workspace.
* 3. Same selection from the top menu bar of the workspace.
*/
const extension: JupyterFrontEndPlugin<void> = {
id: 'apache-beam-jupyterlab-sidepanel',
autoStart: true,
optional: [ILauncher],
requires: [ICommandPalette, IMainMenu, IRenderMimeRegistry],
activate: activate
};
function activate(
app: JupyterFrontEnd,
palette: ICommandPalette,
mainMenu: IMainMenu,
rendermime: IRenderMimeRegistry,
launcher: ILauncher | null
): void {
const category = 'Interactive Beam';
const inspectorCommandLabel = 'Open Inspector';
const clustersCommandLabel = 'Manage Clusters';
const yamlCommandLabel = 'Edit YAML Pipeline';
const { commands, shell, serviceManager } = app;
async function createInspectorPanel(): Promise<SidePanel> {
const sessionContext = new SessionContext({
sessionManager: serviceManager.sessions,
specsManager: serviceManager.kernelspecs,
name: 'Interactive Beam Inspector Session'
});
const inspector = new InteractiveInspectorWidget(sessionContext);
const panel = new SidePanel(
serviceManager,
rendermime,
sessionContext,
'Interactive Beam Inspector',
inspector
);
activatePanel(panel);
return panel;
}
async function createClustersPanel(): Promise<SidePanel> {
const sessionContext = new SessionContext({
sessionManager: serviceManager.sessions,
specsManager: serviceManager.kernelspecs,
name: 'Interactive Beam Clusters Session'
});
const clusters = new ClustersWidget(sessionContext);
const panel = new SidePanel(
serviceManager,
rendermime,
sessionContext,
'Interactive Beam Cluster Manager',
clusters
);
activatePanel(panel);
return panel;
}
async function createYamlPanel(): Promise<SidePanel> {
const sessionContext = new SessionContext({
sessionManager: serviceManager.sessions,
specsManager: serviceManager.kernelspecs,
name: 'Interactive Beam YAML Session'
});
const yamlEditor = new YamlWidget(sessionContext);
const panel = new SidePanel(
serviceManager,
rendermime,
sessionContext,
'Interactive Beam YAML Editor',
yamlEditor
);
activatePanel(panel);
return panel;
}
function activatePanel(panel: SidePanel): void {
shell.add(panel, 'main');
shell.activateById(panel.id);
}
// The open_inspector command is used by all 3 below entry points.
commands.addCommand(CommandIDs.open_inspector, {
label: inspectorCommandLabel,
execute: createInspectorPanel
});
// The open_clusters_panel command is also used by the below entry points.
commands.addCommand(CommandIDs.open_clusters_panel, {
label: clustersCommandLabel,
execute: createClustersPanel
});
// The open_yaml_editor command is also used by the below entry points.
commands.addCommand(CommandIDs.open_yaml_editor, {
label: yamlCommandLabel,
execute: createYamlPanel
});
// Entry point in launcher.
if (launcher) {
launcher.add({
command: CommandIDs.open_inspector,
category: category
});
launcher.add({
command: CommandIDs.open_clusters_panel,
category: category
});
launcher.add({
command: CommandIDs.open_yaml_editor,
category: category
});
}
// Entry point in top menu.
const menu = new Menu({ commands });
menu.title.label = 'Interactive Beam';
mainMenu.addMenu(menu);
menu.addItem({ command: CommandIDs.open_inspector });
menu.addItem({ command: CommandIDs.open_clusters_panel });
menu.addItem({ command: CommandIDs.open_yaml_editor });
// Entry point in commands palette.
palette.addItem({ command: CommandIDs.open_inspector, category });
palette.addItem({ command: CommandIDs.open_clusters_panel, category });
palette.addItem({ command: CommandIDs.open_yaml_editor, category });
}
export default extension;