/** * Entrypoint module for the SparkMonitor frontend extension. * * @module module */ import { INotebookTracker, NotebookTracker } from '@jupyterlab/notebook'; import { IMainMenu, MainMenu } from '@jupyterlab/mainmenu'; import { Menu } from '@lumino/widgets'; import SparkMonitor from './jupyterlab-sparkmonitor'; import { JupyterFrontEnd } from '@jupyterlab/application'; import { store } from '../store'; import { NotebookStore } from '../store/notebook'; /** Entrypoint: Called when the extension is loaded by jupyter. */ const extension = { id: 'jupyterlab_sparkmonitor', autoStart: true, requires: [INotebookTracker, IMainMenu], activate(app: JupyterFrontEnd, notebooks: NotebookTracker, mainMenu: MainMenu) { let monitor: SparkMonitor; console.log('JupyterLab SparkMonitor is activated!'); notebooks.widgetAdded.connect(async (sender, nbPanel) => { let notebookStore = store.notebooks[nbPanel.id]; if (!notebookStore) { notebookStore = new NotebookStore(nbPanel.id); store.notebooks[nbPanel.id] = notebookStore; } // JupyterLab 1.0 backwards compatibility let kernel; let info; if ((nbPanel as any).session) { await (nbPanel as any).session.ready; kernel = (nbPanel as any).session.kernel; await kernel.ready; info = kernel.info; } else { // JupyterLab 2.0 const { sessionContext } = nbPanel; await sessionContext.ready; kernel = sessionContext.session?.kernel; info = await kernel?.info; } if (info.language_info.name === 'python') { monitor = new SparkMonitor(nbPanel, notebookStore); console.log('Notebook kernel ready'); monitor.startComm(); } }); const commandID = 'toggle-monitor'; let toggled = false; app.commands.addCommand(commandID, { label: 'Hide Spark Monitoring', isEnabled: () => true, isVisible: () => true, isToggled: () => toggled, execute: () => { console.log(`Executed ${commandID}`); toggled = !toggled; monitor?.toggleAll(); }, }); const menu = new Menu({ commands: app.commands }); menu.title.label = 'Spark'; menu.addItem({ command: commandID, args: {}, }); mainMenu.addMenu(menu, { rank: 40 }); }, }; export default extension;