"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProfilingPlugin = void 0; var _public = require("@kbn/core/public"); var _i18n = require("@kbn/i18n"); var _rxjs = require("rxjs"); var _flamegraph_locator = require("./locators/flamegraph_locator"); var _stacktraces_locator = require("./locators/stacktraces_locator"); var _topn_functions_locator = require("./locators/topn_functions_locator"); var _services = require("./services"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } class ProfilingPlugin { setup(coreSetup, pluginsSetup) { // Register an application into the side navigation menu const links = [{ id: 'stacktraces', title: _i18n.i18n.translate('xpack.profiling.navigation.stacktracesLinkLabel', { defaultMessage: 'Stacktraces' }), path: '/stacktraces' }, { id: 'flamegraphs', title: _i18n.i18n.translate('xpack.profiling.navigation.flameGraphsLinkLabel', { defaultMessage: 'Flamegraphs' }), path: '/flamegraphs' }, { id: 'functions', title: _i18n.i18n.translate('xpack.profiling.navigation.functionsLinkLabel', { defaultMessage: 'Functions' }), path: '/functions' }]; const kuerySubject = new _rxjs.BehaviorSubject(''); const section$ = (0, _rxjs.combineLatest)([(0, _rxjs.from)(coreSetup.getStartServices()), kuerySubject]).pipe((0, _rxjs.map)(([[coreStart], kuery]) => { if (coreStart.application.capabilities.profiling.show) { const sections = [{ label: _i18n.i18n.translate('xpack.profiling.navigation.sectionLabel', { defaultMessage: 'Universal Profiling' }), entries: links.map(link => { return { app: 'profiling', label: link.title, path: `${link.path}?kuery=${kuery !== null && kuery !== void 0 ? kuery : ''}`, matchPath: path => { return path.startsWith(link.path); } }; }), sortKey: 700 }]; return sections; } return []; })); pluginsSetup.observabilityShared.navigation.registerSections(section$); coreSetup.application.register({ id: 'profiling', title: 'Universal Profiling', euiIconType: 'logoObservability', appRoute: '/app/profiling', category: _public.DEFAULT_APP_CATEGORIES.observability, deepLinks: links, async mount({ element, history, theme$, setHeaderActionMenu }) { const [coreStart, pluginsStart] = await coreSetup.getStartServices(); const profilingFetchServices = (0, _services.getServices)(); const { renderApp } = await Promise.resolve().then(() => _interopRequireWildcard(require('./app'))); function pushKueryToSubject(location) { var _query$get; const query = new URLSearchParams(location.search); kuerySubject.next((_query$get = query.get('kuery')) !== null && _query$get !== void 0 ? _query$get : ''); } pushKueryToSubject(history.location); history.listen(pushKueryToSubject); const unmount = renderApp({ profilingFetchServices, coreStart, coreSetup, pluginsStart, pluginsSetup, history, theme$, setHeaderActionMenu }, element); return () => { unmount(); kuerySubject.next(''); }; } }); return { locators: { flamegraphLocator: pluginsSetup.share.url.locators.create(new _flamegraph_locator.FlamegraphLocatorDefinition()), topNFunctionsLocator: pluginsSetup.share.url.locators.create(new _topn_functions_locator.TopNFunctionsLocatorDefinition()), stacktracesLocator: pluginsSetup.share.url.locators.create(new _stacktraces_locator.StacktracesLocatorDefinition()) }, hasSetup: async () => { const response = await coreSetup.http.get('/internal/profiling/setup/es_resources'); return response.has_setup; } }; } start(core) { return {}; } stop() {} } exports.ProfilingPlugin = ProfilingPlugin;