@grafana/scenes 6.40.0--canary.1265.18325783397.0 → 6.40.0--canary.1272.18407272616.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/esm/behaviors/LongFrameDetector.js +11 -11
  3. package/dist/esm/behaviors/LongFrameDetector.js.map +1 -1
  4. package/dist/esm/behaviors/SceneRenderProfiler.js +132 -88
  5. package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
  6. package/dist/esm/behaviors/index.js +0 -3
  7. package/dist/esm/behaviors/index.js.map +1 -1
  8. package/dist/esm/components/SceneRefreshPicker.js +1 -1
  9. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  10. package/dist/esm/components/VizPanel/VizPanel.js +1 -36
  11. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  12. package/dist/esm/components/VizPanel/VizPanelRenderer.js +2 -20
  13. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  14. package/dist/esm/core/SceneTimeRange.js +1 -1
  15. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  16. package/dist/esm/index.js +5 -4
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/querying/SceneDataTransformer.js +0 -64
  19. package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
  20. package/dist/esm/querying/SceneQueryRunner.js +6 -11
  21. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  22. package/dist/esm/querying/layers/SceneDataLayerControls.js +13 -1
  23. package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
  24. package/dist/esm/querying/registerQueryWithController.js +2 -39
  25. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  26. package/dist/esm/utils/writeSceneLog.js +10 -1
  27. package/dist/esm/utils/writeSceneLog.js.map +1 -1
  28. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +10 -10
  29. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
  30. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +6 -6
  31. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
  32. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +57 -55
  33. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  34. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +5 -5
  35. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
  36. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +4 -4
  37. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
  38. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +5 -3
  39. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  40. package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js +65 -0
  41. package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js.map +1 -0
  42. package/dist/esm/variables/components/VariableValueSelect.js +1 -1
  43. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  44. package/dist/esm/variables/groupby/GroupByVariable.js +1 -1
  45. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  46. package/dist/esm/variables/variants/CustomVariable.js +9 -4
  47. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  48. package/dist/esm/variables/variants/MultiValueVariable.js +1 -1
  49. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  50. package/dist/esm/variables/variants/ScopesVariable.js +1 -1
  51. package/dist/esm/variables/variants/ScopesVariable.js.map +1 -1
  52. package/dist/esm/variables/variants/SwitchVariable.js +108 -0
  53. package/dist/esm/variables/variants/SwitchVariable.js.map +1 -0
  54. package/dist/esm/variables/variants/guards.js +4 -1
  55. package/dist/esm/variables/variants/guards.js.map +1 -1
  56. package/dist/index.d.ts +227 -367
  57. package/dist/index.js +5252 -5682
  58. package/dist/index.js.map +1 -1
  59. package/package.json +2 -2
  60. package/dist/esm/behaviors/PanelProfilingManager.js +0 -65
  61. package/dist/esm/behaviors/PanelProfilingManager.js.map +0 -1
  62. package/dist/esm/behaviors/ScenePerformanceTracker.js +0 -78
  63. package/dist/esm/behaviors/ScenePerformanceTracker.js.map +0 -1
  64. package/dist/esm/behaviors/VizPanelRenderProfiler.js +0 -328
  65. package/dist/esm/behaviors/VizPanelRenderProfiler.js.map +0 -1
  66. package/dist/esm/behaviors/interactionConstants.js +0 -14
  67. package/dist/esm/behaviors/interactionConstants.js.map +0 -1
  68. package/dist/esm/utils/findPanelProfiler.js +0 -18
  69. package/dist/esm/utils/findPanelProfiler.js.map +0 -1
  70. package/dist/esm/utils/writePerformanceLog.js +0 -12
  71. package/dist/esm/utils/writePerformanceLog.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/scenes",
3
- "version": "6.40.0--canary.1265.18325783397.0",
3
+ "version": "6.40.0--canary.1272.18407272616.0",
4
4
  "description": "Grafana framework for building dynamic dashboards",
5
5
  "author": "Grafana Labs",
6
6
  "license": "Apache-2.0",
@@ -125,5 +125,5 @@
125
125
  "prettier --write"
126
126
  ]
127
127
  },
128
- "gitHead": "c182ba75346d8a23743dec5ad11969968301fe8d"
128
+ "gitHead": "9d23ee61a3f4fc1071dd6f827dcd78b258dbaa0f"
129
129
  }
@@ -1,65 +0,0 @@
1
- import { VizPanel } from '../components/VizPanel/VizPanel.js';
2
- import { VizPanelRenderProfiler } from './VizPanelRenderProfiler.js';
3
- import { sceneGraph } from '../core/sceneGraph/index.js';
4
-
5
- class PanelProfilingManager {
6
- constructor(_config) {
7
- this._config = _config;
8
- this._subscriptions = [];
9
- }
10
- /**
11
- * Attach panel profiling to a scene object
12
- */
13
- attachToScene(sceneObject) {
14
- this._sceneObject = sceneObject;
15
- const subscription = sceneObject.subscribeToState((newState, prevState) => {
16
- if (this._config.watchStateKey) {
17
- if (newState[this._config.watchStateKey] !== prevState[this._config.watchStateKey]) {
18
- this._attachProfilersToPanels();
19
- }
20
- } else {
21
- this._attachProfilersToPanels();
22
- }
23
- });
24
- this._subscriptions.push(subscription);
25
- this._attachProfilersToPanels();
26
- }
27
- /**
28
- * Attach VizPanelRenderProfiler to a specific panel if it doesn't already have one
29
- * @param panel - The VizPanel to attach profiling to
30
- */
31
- attachProfilerToPanel(panel) {
32
- var _a;
33
- const existingProfiler = (_a = panel.state.$behaviors) == null ? void 0 : _a.find((b) => b instanceof VizPanelRenderProfiler);
34
- if (existingProfiler) {
35
- return;
36
- }
37
- const profiler = new VizPanelRenderProfiler();
38
- panel.setState({
39
- $behaviors: [...panel.state.$behaviors || [], profiler]
40
- });
41
- }
42
- /**
43
- * Attach VizPanelRenderProfiler to all VizPanels that don't already have one
44
- */
45
- _attachProfilersToPanels() {
46
- if (!this._sceneObject) {
47
- return;
48
- }
49
- const panels = sceneGraph.findAllObjects(this._sceneObject, (obj) => obj instanceof VizPanel);
50
- panels.forEach((panel) => {
51
- this.attachProfilerToPanel(panel);
52
- });
53
- }
54
- /**
55
- * Clean up subscriptions and references
56
- */
57
- cleanup() {
58
- this._subscriptions.forEach((sub) => sub.unsubscribe());
59
- this._subscriptions = [];
60
- this._sceneObject = void 0;
61
- }
62
- }
63
-
64
- export { PanelProfilingManager };
65
- //# sourceMappingURL=PanelProfilingManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PanelProfilingManager.js","sources":["../../../src/behaviors/PanelProfilingManager.ts"],"sourcesContent":["import { Unsubscribable } from 'rxjs';\nimport { VizPanel } from '../components/VizPanel/VizPanel';\nimport { VizPanelRenderProfiler } from './VizPanelRenderProfiler';\nimport { SceneObject } from '../core/types';\nimport { sceneGraph } from '../core/sceneGraph';\n\nexport interface PanelProfilingConfig {\n watchStateKey?: string; // State property to watch for structural changes (e.g., 'body', 'children')\n}\n\n/**\n * Manages VizPanelRenderProfiler instances for all panels in a scene object.\n * Extracted from DashboardPanelProfilingBehavior to allow composition with SceneRenderProfiler.\n */\nexport class PanelProfilingManager {\n private _sceneObject?: SceneObject;\n private _subscriptions: Unsubscribable[] = [];\n\n public constructor(private _config: PanelProfilingConfig) {}\n\n /**\n * Attach panel profiling to a scene object\n */\n public attachToScene(sceneObject: SceneObject) {\n this._sceneObject = sceneObject;\n\n // Subscribe to scene state changes to add profilers to new panels\n const subscription = sceneObject.subscribeToState((newState: any, prevState: any) => {\n // If watchStateKey is specified, only react to changes in that specific property\n if (this._config.watchStateKey) {\n if (newState[this._config.watchStateKey] !== prevState[this._config.watchStateKey]) {\n this._attachProfilersToPanels();\n }\n } else {\n // Fallback: react to any state change\n this._attachProfilersToPanels();\n }\n });\n\n this._subscriptions.push(subscription);\n\n // Attach profilers to existing panels\n this._attachProfilersToPanels();\n }\n\n /**\n * Attach VizPanelRenderProfiler to a specific panel if it doesn't already have one\n * @param panel - The VizPanel to attach profiling to\n */\n public attachProfilerToPanel(panel: VizPanel): void {\n // Check if profiler already exists\n const existingProfiler = panel.state.$behaviors?.find((b) => b instanceof VizPanelRenderProfiler);\n\n if (existingProfiler) {\n return; // Already has a profiler\n }\n\n // Add profiler behavior\n const profiler = new VizPanelRenderProfiler();\n\n panel.setState({\n $behaviors: [...(panel.state.$behaviors || []), profiler],\n });\n }\n\n /**\n * Attach VizPanelRenderProfiler to all VizPanels that don't already have one\n */\n private _attachProfilersToPanels() {\n if (!this._sceneObject) {\n return;\n }\n\n // Use scene graph to find all VizPanels in the scene\n const panels = sceneGraph.findAllObjects(this._sceneObject, (obj) => obj instanceof VizPanel) as VizPanel[];\n\n panels.forEach((panel) => {\n this.attachProfilerToPanel(panel);\n });\n }\n\n /**\n * Clean up subscriptions and references\n */\n public cleanup() {\n this._subscriptions.forEach((sub) => sub.unsubscribe());\n this._subscriptions = [];\n this._sceneObject = undefined;\n }\n}\n"],"names":[],"mappings":";;;;AAcO,MAAM,qBAAsB,CAAA;AAAA,EAI1B,YAAoB,OAA+B,EAAA;AAA/B,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAF3B,IAAA,IAAA,CAAQ,iBAAmC,EAAC;AAAA;AAEe;AAAA;AAAA;AAAA,EAKpD,cAAc,WAA0B,EAAA;AAC7C,IAAA,IAAA,CAAK,YAAe,GAAA,WAAA;AAGpB,IAAA,MAAM,YAAe,GAAA,WAAA,CAAY,gBAAiB,CAAA,CAAC,UAAe,SAAmB,KAAA;AAEnF,MAAI,IAAA,IAAA,CAAK,QAAQ,aAAe,EAAA;AAC9B,QAAI,IAAA,QAAA,CAAS,KAAK,OAAQ,CAAA,aAAa,MAAM,SAAU,CAAA,IAAA,CAAK,OAAQ,CAAA,aAAa,CAAG,EAAA;AAClF,UAAA,IAAA,CAAK,wBAAyB,EAAA;AAAA;AAChC,OACK,MAAA;AAEL,QAAA,IAAA,CAAK,wBAAyB,EAAA;AAAA;AAChC,KACD,CAAA;AAED,IAAK,IAAA,CAAA,cAAA,CAAe,KAAK,YAAY,CAAA;AAGrC,IAAA,IAAA,CAAK,wBAAyB,EAAA;AAAA;AAChC;AAAA;AAAA;AAAA;AAAA,EAMO,sBAAsB,KAAuB,EAAA;AAjDtD,IAAA,IAAA,EAAA;AAmDI,IAAM,MAAA,gBAAA,GAAA,CAAmB,WAAM,KAAM,CAAA,UAAA,KAAZ,mBAAwB,IAAK,CAAA,CAAC,MAAM,CAAa,YAAA,sBAAA,CAAA;AAE1E,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAA;AAAA;AAIF,IAAM,MAAA,QAAA,GAAW,IAAI,sBAAuB,EAAA;AAE5C,IAAA,KAAA,CAAM,QAAS,CAAA;AAAA,MACb,UAAA,EAAY,CAAC,GAAI,KAAA,CAAM,MAAM,UAAc,IAAA,IAAK,QAAQ;AAAA,KACzD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKQ,wBAA2B,GAAA;AACjC,IAAI,IAAA,CAAC,KAAK,YAAc,EAAA;AACtB,MAAA;AAAA;AAIF,IAAM,MAAA,MAAA,GAAS,WAAW,cAAe,CAAA,IAAA,CAAK,cAAc,CAAC,GAAA,KAAQ,eAAe,QAAQ,CAAA;AAE5F,IAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACxB,MAAA,IAAA,CAAK,sBAAsB,KAAK,CAAA;AAAA,KACjC,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKO,OAAU,GAAA;AACf,IAAA,IAAA,CAAK,eAAe,OAAQ,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,aAAa,CAAA;AACtD,IAAA,IAAA,CAAK,iBAAiB,EAAC;AACvB,IAAA,IAAA,CAAK,YAAe,GAAA,MAAA;AAAA;AAExB;;;;"}
@@ -1,78 +0,0 @@
1
- let operationCounter = 0;
2
- function generateOperationId(prefix = "op") {
3
- return `${prefix}-${Date.now()}-${++operationCounter}`;
4
- }
5
- const _ScenePerformanceTracker = class _ScenePerformanceTracker {
6
- constructor() {
7
- this.observers = [];
8
- }
9
- static getInstance() {
10
- if (!_ScenePerformanceTracker.instance) {
11
- _ScenePerformanceTracker.instance = new _ScenePerformanceTracker();
12
- }
13
- return _ScenePerformanceTracker.instance;
14
- }
15
- /**
16
- * Register a performance observer
17
- */
18
- addObserver(observer) {
19
- this.observers.push(observer);
20
- return () => {
21
- const index = this.observers.indexOf(observer);
22
- if (index > -1) {
23
- this.observers.splice(index, 1);
24
- }
25
- };
26
- }
27
- /**
28
- * Remove all observers (for testing)
29
- */
30
- clearObservers() {
31
- this.observers = [];
32
- }
33
- /**
34
- * Get current observer count (for debugging)
35
- */
36
- getObserverCount() {
37
- return this.observers.length;
38
- }
39
- notifyObservers(methodName, data, errorContext) {
40
- this.observers.forEach((observer) => {
41
- try {
42
- const method = observer[methodName];
43
- method == null ? void 0 : method(data);
44
- } catch (error) {
45
- console.warn(`Error in ${errorContext} observer:`, error);
46
- }
47
- });
48
- }
49
- notifyDashboardInteractionStart(data) {
50
- this.notifyObservers("onDashboardInteractionStart", data, "dashboard interaction start");
51
- }
52
- notifyDashboardInteractionMilestone(data) {
53
- this.notifyObservers("onDashboardInteractionMilestone", data, "dashboard interaction milestone");
54
- }
55
- notifyDashboardInteractionComplete(data) {
56
- this.notifyObservers("onDashboardInteractionComplete", data, "dashboard interaction complete");
57
- }
58
- notifyPanelOperationStart(data) {
59
- this.notifyObservers("onPanelOperationStart", data, "panel operation start");
60
- }
61
- notifyPanelOperationComplete(data) {
62
- this.notifyObservers("onPanelOperationComplete", data, "panel operation complete");
63
- }
64
- notifyQueryStart(data) {
65
- this.notifyObservers("onQueryStart", data, "query start");
66
- }
67
- notifyQueryComplete(data) {
68
- this.notifyObservers("onQueryComplete", data, "query complete");
69
- }
70
- };
71
- _ScenePerformanceTracker.instance = null;
72
- let ScenePerformanceTracker = _ScenePerformanceTracker;
73
- function getScenePerformanceTracker() {
74
- return ScenePerformanceTracker.getInstance();
75
- }
76
-
77
- export { ScenePerformanceTracker, generateOperationId, getScenePerformanceTracker };
78
- //# sourceMappingURL=ScenePerformanceTracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScenePerformanceTracker.js","sources":["../../../src/behaviors/ScenePerformanceTracker.ts"],"sourcesContent":["/**\n * Centralized performance tracking system using observer pattern.\n * External systems (like Grafana) implement ScenePerformanceObserver to receive performance events.\n */\n\n/** Generate unique operation IDs for correlating start/complete events */\nlet operationCounter = 0;\nexport function generateOperationId(prefix = 'op'): string {\n return `${prefix}-${Date.now()}-${++operationCounter}`;\n}\n\n/** Base interface for all performance events */\nexport interface BasePerformanceEvent {\n operationId: string; // Unique identifier for correlating start/complete events\n timestamp: number;\n duration?: number;\n error?: string;\n}\n\nexport interface DashboardInteractionStartData extends BasePerformanceEvent {\n interactionType: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface DashboardInteractionMilestoneData extends BasePerformanceEvent {\n interactionType: string;\n milestone: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface DashboardInteractionCompleteData extends BasePerformanceEvent {\n interactionType: string;\n networkDuration?: number;\n longFramesCount: number;\n longFramesTotalTime: number;\n metadata?: Record<string, unknown>;\n}\n\n/** Metadata interface for transform operations */\nexport interface TransformMetadata {\n transformationId: string;\n transformationCount: number;\n seriesTransformationCount: number;\n annotationTransformationCount: number;\n success?: boolean;\n error?: string;\n // dataFrameCount: number;\n // totalDataPoints: number;\n // outputSeriesCount?: number;\n // outputAnnotationsCount?: number;\n}\n\n/** Metadata interface for query operations */\nexport interface QueryMetadata {\n queryId: string;\n queryType: string;\n}\n\n/** Metadata interface for render operations */\nexport interface RenderMetadata {\n // Empty for now - can be extended later if needed\n}\n\n/** Metadata interface for plugin load operations */\nexport interface PluginLoadMetadata {\n pluginId: string;\n fromCache?: boolean;\n pluginLoadTime?: number;\n}\n\n/** Metadata interface for field config operations */\nexport interface FieldConfigMetadata {\n // dataPointsCount?: number;\n // seriesCount?: number;\n // fieldCount?: number;\n // overrideCount?: number;\n // mappingCount?: number;\n}\n\n/** Base interface for panel performance events */\ninterface BasePanelPerformanceData extends BasePerformanceEvent {\n panelId: string;\n panelKey: string;\n pluginId: string;\n pluginVersion?: string;\n panelTitle?: string;\n}\n\n/** Transform operation performance data */\nexport interface PanelTransformPerformanceData extends BasePanelPerformanceData {\n operation: 'transform';\n metadata: TransformMetadata;\n}\n\n/** Query operation performance data */\nexport interface PanelQueryPerformanceData extends BasePanelPerformanceData {\n operation: 'query';\n metadata: QueryMetadata;\n}\n\n/** Render operation performance data */\nexport interface PanelRenderPerformanceData extends BasePanelPerformanceData {\n operation: 'render';\n metadata: RenderMetadata;\n}\n\n/** Plugin load operation performance data */\nexport interface PanelPluginLoadPerformanceData extends BasePanelPerformanceData {\n operation: 'plugin-load';\n metadata: PluginLoadMetadata;\n}\n\n/** Field config operation performance data */\nexport interface PanelFieldConfigPerformanceData extends BasePanelPerformanceData {\n operation: 'fieldConfig';\n metadata: FieldConfigMetadata;\n}\n\n/** Discriminated union of all panel performance data types */\nexport type PanelPerformanceData =\n | PanelTransformPerformanceData\n | PanelQueryPerformanceData\n | PanelRenderPerformanceData\n | PanelPluginLoadPerformanceData\n | PanelFieldConfigPerformanceData;\n\n/** Non-panel query performance data for dashboard queries (annotations, variables, etc.) */\nexport interface QueryPerformanceData extends BasePerformanceEvent {\n queryId: string;\n queryType: string;\n origin: string; // e.g., \"AnnotationsDataLayer\", \"QueryVariable\", \"VizPanel/loadPlugin\"\n}\n\n/**\n * Observer interface for performance monitoring\n * External systems implement this to receive performance notifications\n */\nexport interface ScenePerformanceObserver {\n // Dashboard-level events\n onDashboardInteractionStart?(data: DashboardInteractionStartData): void;\n onDashboardInteractionMilestone?(data: DashboardInteractionMilestoneData): void;\n onDashboardInteractionComplete?(data: DashboardInteractionCompleteData): void;\n\n // Panel-level events\n onPanelOperationStart?(data: PanelPerformanceData): void;\n onPanelOperationComplete?(data: PanelPerformanceData): void;\n\n // Query-level events\n onQueryStart?(data: QueryPerformanceData): void;\n onQueryComplete?(data: QueryPerformanceData): void;\n}\n\n/**\n * Centralized performance tracker\n * Manages observers and provides methods for scene objects to report performance events\n */\nexport class ScenePerformanceTracker {\n private static instance: ScenePerformanceTracker | null = null;\n private observers: ScenePerformanceObserver[] = [];\n\n public static getInstance(): ScenePerformanceTracker {\n if (!ScenePerformanceTracker.instance) {\n ScenePerformanceTracker.instance = new ScenePerformanceTracker();\n }\n return ScenePerformanceTracker.instance;\n }\n\n /**\n * Register a performance observer\n */\n public addObserver(observer: ScenePerformanceObserver): () => void {\n this.observers.push(observer);\n\n // Return unsubscribe function\n return () => {\n const index = this.observers.indexOf(observer);\n if (index > -1) {\n this.observers.splice(index, 1);\n }\n };\n }\n\n /**\n * Remove all observers (for testing)\n */\n public clearObservers(): void {\n this.observers = [];\n }\n\n /**\n * Get current observer count (for debugging)\n */\n public getObserverCount(): number {\n return this.observers.length;\n }\n\n private notifyObservers<T>(methodName: keyof ScenePerformanceObserver, data: T, errorContext: string): void {\n this.observers.forEach((observer) => {\n try {\n const method = observer[methodName] as ((data: T) => void) | undefined;\n method?.(data);\n } catch (error) {\n console.warn(`Error in ${errorContext} observer:`, error);\n }\n });\n }\n\n public notifyDashboardInteractionStart(data: DashboardInteractionStartData): void {\n this.notifyObservers('onDashboardInteractionStart', data, 'dashboard interaction start');\n }\n\n public notifyDashboardInteractionMilestone(data: DashboardInteractionMilestoneData): void {\n this.notifyObservers('onDashboardInteractionMilestone', data, 'dashboard interaction milestone');\n }\n\n public notifyDashboardInteractionComplete(data: DashboardInteractionCompleteData): void {\n this.notifyObservers('onDashboardInteractionComplete', data, 'dashboard interaction complete');\n }\n\n public notifyPanelOperationStart(data: PanelPerformanceData): void {\n this.notifyObservers('onPanelOperationStart', data, 'panel operation start');\n }\n\n public notifyPanelOperationComplete(data: PanelPerformanceData): void {\n this.notifyObservers('onPanelOperationComplete', data, 'panel operation complete');\n }\n\n public notifyQueryStart(data: QueryPerformanceData): void {\n this.notifyObservers('onQueryStart', data, 'query start');\n }\n\n public notifyQueryComplete(data: QueryPerformanceData): void {\n this.notifyObservers('onQueryComplete', data, 'query complete');\n }\n}\n\n/**\n * Get the global performance tracker instance\n */\nexport function getScenePerformanceTracker(): ScenePerformanceTracker {\n return ScenePerformanceTracker.getInstance();\n}\n"],"names":[],"mappings":"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"}
@@ -1,328 +0,0 @@
1
- import { SceneObjectBase } from '../core/SceneObjectBase.js';
2
- import { VizPanel } from '../components/VizPanel/VizPanel.js';
3
- import { writeSceneLog } from '../utils/writeSceneLog.js';
4
- import { sceneGraph } from '../core/sceneGraph/index.js';
5
- import { generateOperationId, getScenePerformanceTracker } from './ScenePerformanceTracker.js';
6
-
7
- class VizPanelRenderProfiler extends SceneObjectBase {
8
- constructor(state = {}) {
9
- super({
10
- ...state
11
- });
12
- this._isTracking = false;
13
- this._activeQueries = /* @__PURE__ */ new Map();
14
- this.addActivationHandler(() => {
15
- return this._onActivate();
16
- });
17
- }
18
- _onActivate() {
19
- var _a, _b;
20
- let panel;
21
- try {
22
- panel = sceneGraph.getAncestor(this, VizPanel);
23
- } catch (error) {
24
- writeSceneLog("VizPanelRenderProfiler", "Failed to find VizPanel ancestor", error);
25
- return;
26
- }
27
- if (!panel) {
28
- writeSceneLog("VizPanelRenderProfiler", "Not attached to a VizPanel");
29
- return;
30
- }
31
- if (!panel.state.key) {
32
- writeSceneLog("VizPanelRenderProfiler", "Panel has no key, skipping tracking");
33
- return;
34
- }
35
- this._panelKey = panel.state.key;
36
- this._panelId = String(panel.getLegacyPanelId());
37
- this._pluginId = panel.state.pluginId;
38
- const plugin = panel.getPlugin();
39
- this._pluginVersion = (_b = (_a = plugin == null ? void 0 : plugin.meta) == null ? void 0 : _a.info) == null ? void 0 : _b.version;
40
- this._subs.add(
41
- panel.subscribeToState((newState, prevState) => {
42
- this._handlePanelStateChange(panel, newState, prevState);
43
- })
44
- );
45
- return () => {
46
- this._cleanup();
47
- };
48
- }
49
- _handlePanelStateChange(panel, newState, prevState) {
50
- if (newState.pluginId !== prevState.pluginId) {
51
- this._onPluginChange(panel, newState.pluginId);
52
- }
53
- }
54
- /**
55
- * Track query execution with operation ID correlation
56
- */
57
- onQueryStarted(timestamp, entry, queryId) {
58
- if (!this._panelKey) {
59
- return null;
60
- }
61
- this._activeQueries.set(queryId, { entry, startTime: timestamp });
62
- const operationId = generateOperationId("query");
63
- getScenePerformanceTracker().notifyPanelOperationStart({
64
- operationId,
65
- panelId: this._panelId,
66
- panelKey: this._panelKey,
67
- pluginId: this._pluginId,
68
- pluginVersion: this._pluginVersion,
69
- operation: "query",
70
- timestamp,
71
- metadata: {
72
- queryId,
73
- queryType: entry.type
74
- }
75
- });
76
- const callback = (endTimestamp, error) => {
77
- if (!this._panelKey) {
78
- return;
79
- }
80
- const queryInfo = this._activeQueries.get(queryId);
81
- if (!queryInfo) {
82
- return;
83
- }
84
- const duration = endTimestamp - queryInfo.startTime;
85
- this._activeQueries.delete(queryId);
86
- getScenePerformanceTracker().notifyPanelOperationComplete({
87
- operationId,
88
- panelId: this._panelId,
89
- panelKey: this._panelKey,
90
- pluginId: this._pluginId,
91
- pluginVersion: this._pluginVersion,
92
- operation: "query",
93
- timestamp: endTimestamp,
94
- duration,
95
- metadata: {
96
- queryId,
97
- queryType: entry.type
98
- },
99
- error: error ? (error == null ? void 0 : error.message) || String(error) || "Unknown error" : void 0
100
- });
101
- };
102
- return callback;
103
- }
104
- /**
105
- * Track plugin loading with operation ID correlation
106
- */
107
- onPluginLoadStart(pluginId) {
108
- if (!this._panelKey) {
109
- let panel;
110
- try {
111
- panel = sceneGraph.getAncestor(this, VizPanel);
112
- } catch (error) {
113
- return null;
114
- }
115
- if (panel && !this._panelKey && panel.state.key) {
116
- this._panelKey = panel.state.key;
117
- this._panelId = String(panel.getLegacyPanelId());
118
- this._pluginId = pluginId;
119
- }
120
- }
121
- if (!this._panelKey) {
122
- return null;
123
- }
124
- if (!this._isTracking) {
125
- this._startTracking();
126
- }
127
- this._loadPluginStartTime = performance.now();
128
- const operationId = generateOperationId("pluginLoad");
129
- getScenePerformanceTracker().notifyPanelOperationStart({
130
- operationId,
131
- panelId: this._panelId,
132
- panelKey: this._panelKey,
133
- pluginId: this._pluginId,
134
- operation: "plugin-load",
135
- timestamp: this._loadPluginStartTime,
136
- metadata: {
137
- pluginId
138
- }
139
- });
140
- const callback = (plugin, fromCache = false) => {
141
- if (!this._panelKey || !this._loadPluginStartTime) {
142
- return;
143
- }
144
- const duration = performance.now() - this._loadPluginStartTime;
145
- getScenePerformanceTracker().notifyPanelOperationComplete({
146
- operationId,
147
- panelId: this._panelId,
148
- panelKey: this._panelKey,
149
- pluginId: this._pluginId,
150
- operation: "plugin-load",
151
- timestamp: performance.now(),
152
- duration,
153
- metadata: {
154
- pluginId: this._pluginId,
155
- fromCache,
156
- pluginLoadTime: duration
157
- }
158
- });
159
- this._loadPluginStartTime = void 0;
160
- };
161
- return callback;
162
- }
163
- /**
164
- * Track field config processing with operation ID correlation
165
- */
166
- onFieldConfigStart(timestamp) {
167
- if (!this._panelKey) {
168
- return null;
169
- }
170
- this._applyFieldConfigStartTime = timestamp;
171
- const operationId = generateOperationId("fieldConfig");
172
- getScenePerformanceTracker().notifyPanelOperationStart({
173
- operationId,
174
- panelId: this._panelId,
175
- panelKey: this._panelKey,
176
- pluginId: this._pluginId,
177
- operation: "fieldConfig",
178
- timestamp: this._applyFieldConfigStartTime,
179
- metadata: {
180
- // Initial metadata - will be updated on completion with actual counts
181
- }
182
- });
183
- const callback = (endTimestamp, dataPointsCount, seriesCount) => {
184
- if (!this._panelKey || !this._applyFieldConfigStartTime) {
185
- return;
186
- }
187
- const duration = endTimestamp - this._applyFieldConfigStartTime;
188
- getScenePerformanceTracker().notifyPanelOperationComplete({
189
- operationId,
190
- panelId: this._panelId,
191
- panelKey: this._panelKey,
192
- pluginId: this._pluginId,
193
- operation: "fieldConfig",
194
- timestamp: endTimestamp,
195
- duration,
196
- metadata: {}
197
- });
198
- this._applyFieldConfigStartTime = void 0;
199
- };
200
- return callback;
201
- }
202
- /**
203
- * Get panel info for logging - truncates long titles for readability
204
- */
205
- _getPanelInfo() {
206
- let panel;
207
- try {
208
- panel = sceneGraph.getAncestor(this, VizPanel);
209
- } catch (error) {
210
- }
211
- let panelTitle = (panel == null ? void 0 : panel.state.title) || this._panelKey || "No-key panel";
212
- if (panelTitle.length > 30) {
213
- panelTitle = panelTitle.substring(0, 27) + "...";
214
- }
215
- return `VizPanelRenderProfiler [${panelTitle}]`;
216
- }
217
- /**
218
- * Track simple render timing with operation ID correlation
219
- */
220
- onSimpleRenderStart(timestamp) {
221
- if (!this._panelKey) {
222
- return void 0;
223
- }
224
- const operationId = generateOperationId("render");
225
- getScenePerformanceTracker().notifyPanelOperationStart({
226
- operationId,
227
- panelId: this._panelId || "unknown",
228
- panelKey: this._panelKey,
229
- pluginId: this._pluginId || "unknown",
230
- pluginVersion: this._pluginVersion,
231
- operation: "render",
232
- timestamp,
233
- metadata: {}
234
- });
235
- return (endTimestamp, duration) => {
236
- if (!this._panelKey) {
237
- return;
238
- }
239
- getScenePerformanceTracker().notifyPanelOperationComplete({
240
- operationId,
241
- panelId: this._panelId || "unknown",
242
- panelKey: this._panelKey,
243
- pluginId: this._pluginId || "unknown",
244
- pluginVersion: this._pluginVersion,
245
- operation: "render",
246
- duration,
247
- timestamp: endTimestamp,
248
- metadata: {}
249
- });
250
- };
251
- }
252
- /** Handle plugin changes */
253
- _onPluginChange(panel, newPluginId) {
254
- var _a, _b;
255
- this._pluginId = newPluginId;
256
- const plugin = panel.getPlugin();
257
- this._pluginVersion = (_b = (_a = plugin == null ? void 0 : plugin.meta) == null ? void 0 : _a.info) == null ? void 0 : _b.version;
258
- writeSceneLog(this._getPanelInfo(), `Plugin changed to ${newPluginId}`);
259
- }
260
- /** Start tracking this panel */
261
- _startTracking() {
262
- if (!this._panelKey || !this._pluginId || this._isTracking) {
263
- return;
264
- }
265
- this._isTracking = true;
266
- }
267
- /** Cleanup when behavior is deactivated */
268
- _cleanup() {
269
- this._activeQueries.clear();
270
- this._isTracking = false;
271
- writeSceneLog(this._getPanelInfo(), "Cleaned up");
272
- }
273
- /**
274
- * Track data transformation with operation ID correlation
275
- */
276
- onDataTransformStart(timestamp, transformationId, metrics) {
277
- if (!this._panelKey) {
278
- return null;
279
- }
280
- const operationId = generateOperationId("transform");
281
- getScenePerformanceTracker().notifyPanelOperationStart({
282
- operationId,
283
- panelId: this._panelId,
284
- panelKey: this._panelKey,
285
- pluginId: this._pluginId,
286
- operation: "transform",
287
- timestamp,
288
- metadata: {
289
- transformationId,
290
- transformationCount: metrics.transformationCount,
291
- // dataFrameCount: metrics.dataFrameCount,
292
- // totalDataPoints: metrics.totalDataPoints,
293
- seriesTransformationCount: metrics.seriesTransformationCount,
294
- annotationTransformationCount: metrics.annotationTransformationCount
295
- }
296
- });
297
- const callback = (endTimestamp, duration, success, result) => {
298
- if (!this._panelKey) {
299
- return;
300
- }
301
- getScenePerformanceTracker().notifyPanelOperationComplete({
302
- operationId,
303
- panelId: this._panelId,
304
- panelKey: this._panelKey,
305
- pluginId: this._pluginId,
306
- operation: "transform",
307
- timestamp: endTimestamp,
308
- duration,
309
- metadata: {
310
- transformationId,
311
- transformationCount: metrics.transformationCount,
312
- seriesTransformationCount: metrics.seriesTransformationCount,
313
- annotationTransformationCount: metrics.annotationTransformationCount,
314
- success,
315
- error: (result == null ? void 0 : result.error) || (!success ? "Transform operation failed" : void 0)
316
- // dataFrameCount: metrics.dataFrameCount,
317
- // totalDataPoints: metrics.totalDataPoints,
318
- // outputSeriesCount: result?.outputSeriesCount,
319
- // outputAnnotationsCount: result?.outputAnnotationsCount,
320
- }
321
- });
322
- };
323
- return callback;
324
- }
325
- }
326
-
327
- export { VizPanelRenderProfiler };
328
- //# sourceMappingURL=VizPanelRenderProfiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VizPanelRenderProfiler.js","sources":["../../../src/behaviors/VizPanelRenderProfiler.ts"],"sourcesContent":["import { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObjectState } from '../core/types';\nimport { VizPanel } from '../components/VizPanel/VizPanel';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneQueryControllerEntry } from './types';\nimport { QueryProfilerLike } from '../querying/registerQueryWithController';\nimport { getScenePerformanceTracker, generateOperationId } from './ScenePerformanceTracker';\n\nexport interface VizPanelRenderProfilerState extends SceneObjectState {}\n\n/**\n * Tracks performance metrics for individual VizPanel instances using observer pattern.\n *\n * Performance events are sent to ScenePerformanceTracker observers, which are consumed\n * by Grafana's ScenePerformanceLogger and DashboardAnalyticsAggregator.\n */\n\nexport class VizPanelRenderProfiler extends SceneObjectBase<VizPanelRenderProfilerState> implements QueryProfilerLike {\n private _panelKey?: string;\n private _panelId?: string;\n private _pluginId?: string;\n private _pluginVersion?: string;\n private _isTracking = false;\n private _loadPluginStartTime?: number;\n private _applyFieldConfigStartTime?: number;\n private _activeQueries = new Map<string, { entry: SceneQueryControllerEntry; startTime: number }>();\n\n public constructor(state: Partial<VizPanelRenderProfilerState> = {}) {\n super({\n ...state,\n });\n\n this.addActivationHandler(() => {\n return this._onActivate();\n });\n }\n\n private _onActivate() {\n let panel: VizPanel | undefined;\n\n try {\n panel = sceneGraph.getAncestor(this, VizPanel);\n } catch (error) {\n writeSceneLog('VizPanelRenderProfiler', 'Failed to find VizPanel ancestor', error);\n return;\n }\n\n if (!panel) {\n writeSceneLog('VizPanelRenderProfiler', 'Not attached to a VizPanel');\n return;\n }\n\n if (!panel.state.key) {\n writeSceneLog('VizPanelRenderProfiler', 'Panel has no key, skipping tracking');\n return;\n }\n\n this._panelKey = panel.state.key;\n this._panelId = String(panel.getLegacyPanelId());\n this._pluginId = panel.state.pluginId;\n const plugin = panel.getPlugin();\n this._pluginVersion = plugin?.meta?.info?.version;\n\n this._subs.add(\n panel.subscribeToState((newState, prevState) => {\n this._handlePanelStateChange(panel, newState, prevState);\n })\n );\n\n return () => {\n this._cleanup();\n };\n }\n\n private _handlePanelStateChange(panel: VizPanel, newState: any, prevState: any) {\n if (newState.pluginId !== prevState.pluginId) {\n this._onPluginChange(panel, newState.pluginId);\n }\n }\n\n /**\n * Track query execution with operation ID correlation\n */\n public onQueryStarted(\n timestamp: number,\n entry: SceneQueryControllerEntry,\n queryId: string\n ): ((endTimestamp: number, error?: any) => void) | null {\n if (!this._panelKey) {\n return null;\n }\n\n this._activeQueries.set(queryId, { entry, startTime: timestamp });\n\n const operationId = generateOperationId('query');\n\n // ✅ Use panel operation tracking for panel queries\n getScenePerformanceTracker().notifyPanelOperationStart({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n pluginVersion: this._pluginVersion,\n operation: 'query',\n timestamp,\n metadata: {\n queryId: queryId,\n queryType: entry.type,\n },\n });\n\n // Return end callback with captured operationId and query context\n const callback = (endTimestamp: number, error?: any) => {\n if (!this._panelKey) {\n return;\n }\n\n const queryInfo = this._activeQueries.get(queryId);\n if (!queryInfo) {\n return;\n }\n\n const duration = endTimestamp - queryInfo.startTime;\n this._activeQueries.delete(queryId);\n\n getScenePerformanceTracker().notifyPanelOperationComplete({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n pluginVersion: this._pluginVersion,\n operation: 'query',\n timestamp: endTimestamp,\n duration: duration,\n metadata: {\n queryId: queryId,\n queryType: entry.type,\n },\n error: error ? error?.message || String(error) || 'Unknown error' : undefined,\n });\n };\n return callback;\n }\n\n /**\n * Track plugin loading with operation ID correlation\n */\n public onPluginLoadStart(pluginId: string): ((plugin: any, fromCache?: boolean) => void) | null {\n // Initialize early since plugin loading happens before _onActivate\n if (!this._panelKey) {\n let panel: VizPanel | undefined;\n\n try {\n panel = sceneGraph.getAncestor(this, VizPanel);\n } catch (error) {\n return null;\n }\n\n if (panel && !this._panelKey && panel.state.key) {\n this._panelKey = panel.state.key;\n this._panelId = String(panel.getLegacyPanelId());\n this._pluginId = pluginId;\n }\n }\n\n if (!this._panelKey) {\n return null;\n }\n\n if (!this._isTracking) {\n this._startTracking();\n }\n\n this._loadPluginStartTime = performance.now();\n\n const operationId = generateOperationId('pluginLoad');\n getScenePerformanceTracker().notifyPanelOperationStart({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n operation: 'plugin-load',\n timestamp: this._loadPluginStartTime,\n metadata: {\n pluginId,\n },\n });\n\n // Return end callback with captured operationId and panel context\n const callback = (plugin: any, fromCache = false) => {\n if (!this._panelKey || !this._loadPluginStartTime) {\n return;\n }\n\n const duration = performance.now() - this._loadPluginStartTime;\n\n getScenePerformanceTracker().notifyPanelOperationComplete({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n operation: 'plugin-load',\n timestamp: performance.now(),\n duration,\n metadata: {\n pluginId: this._pluginId!,\n fromCache,\n pluginLoadTime: duration,\n },\n });\n\n this._loadPluginStartTime = undefined;\n };\n return callback;\n }\n\n /**\n * Track field config processing with operation ID correlation\n */\n public onFieldConfigStart(\n timestamp: number\n ): ((endTimestamp: number, dataPointsCount?: number, seriesCount?: number) => void) | null {\n if (!this._panelKey) {\n return null;\n }\n\n this._applyFieldConfigStartTime = timestamp;\n\n const operationId = generateOperationId('fieldConfig');\n getScenePerformanceTracker().notifyPanelOperationStart({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n operation: 'fieldConfig',\n timestamp: this._applyFieldConfigStartTime,\n metadata: {\n // Initial metadata - will be updated on completion with actual counts\n },\n });\n\n // Return end callback with captured operationId and panel context\n const callback = (endTimestamp: number, dataPointsCount?: number, seriesCount?: number) => {\n if (!this._panelKey || !this._applyFieldConfigStartTime) {\n return;\n }\n\n const duration = endTimestamp - this._applyFieldConfigStartTime;\n\n getScenePerformanceTracker().notifyPanelOperationComplete({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n operation: 'fieldConfig',\n timestamp: endTimestamp,\n duration,\n metadata: {},\n });\n\n this._applyFieldConfigStartTime = undefined;\n };\n return callback;\n }\n\n /**\n * Get panel info for logging - truncates long titles for readability\n */\n private _getPanelInfo(): string {\n let panel: VizPanel | undefined;\n\n try {\n panel = sceneGraph.getAncestor(this, VizPanel);\n } catch (error) {\n // If we can't find the panel, use fallback info\n }\n\n let panelTitle = panel?.state.title || this._panelKey || 'No-key panel';\n\n if (panelTitle.length > 30) {\n panelTitle = panelTitle.substring(0, 27) + '...';\n }\n\n return `VizPanelRenderProfiler [${panelTitle}]`;\n }\n\n /**\n * Track simple render timing with operation ID correlation\n */\n public onSimpleRenderStart(timestamp: number): ((endTimestamp: number, duration: number) => void) | undefined {\n if (!this._panelKey) {\n return undefined;\n }\n\n const operationId = generateOperationId('render');\n getScenePerformanceTracker().notifyPanelOperationStart({\n operationId,\n panelId: this._panelId || 'unknown',\n panelKey: this._panelKey,\n pluginId: this._pluginId || 'unknown',\n pluginVersion: this._pluginVersion,\n operation: 'render',\n timestamp,\n metadata: {},\n });\n\n // Return end callback with captured operationId and panel context\n return (endTimestamp: number, duration: number) => {\n if (!this._panelKey) {\n return;\n }\n\n getScenePerformanceTracker().notifyPanelOperationComplete({\n operationId,\n panelId: this._panelId || 'unknown',\n panelKey: this._panelKey,\n pluginId: this._pluginId || 'unknown',\n pluginVersion: this._pluginVersion,\n operation: 'render',\n duration,\n timestamp: endTimestamp,\n metadata: {},\n });\n };\n }\n\n /** Handle plugin changes */\n private _onPluginChange(panel: VizPanel, newPluginId: string) {\n this._pluginId = newPluginId;\n const plugin = panel.getPlugin();\n this._pluginVersion = plugin?.meta?.info?.version;\n\n writeSceneLog(this._getPanelInfo(), `Plugin changed to ${newPluginId}`);\n }\n\n /** Start tracking this panel */\n private _startTracking() {\n if (!this._panelKey || !this._pluginId || this._isTracking) {\n return;\n }\n\n this._isTracking = true;\n }\n\n /** Cleanup when behavior is deactivated */\n private _cleanup() {\n this._activeQueries.clear();\n this._isTracking = false;\n writeSceneLog(this._getPanelInfo(), 'Cleaned up');\n }\n\n /**\n * Track data transformation with operation ID correlation\n */\n public onDataTransformStart(\n timestamp: number,\n transformationId: string,\n metrics: {\n transformationCount: number;\n // dataFrameCount: number;\n // totalDataPoints: number;\n seriesTransformationCount: number;\n annotationTransformationCount: number;\n }\n ):\n | ((\n endTimestamp: number,\n duration: number,\n success: boolean,\n result?: {\n // outputSeriesCount?: number;\n // outputAnnotationsCount?: number;\n error?: string;\n }\n ) => void)\n | null {\n if (!this._panelKey) {\n return null;\n }\n\n const operationId = generateOperationId('transform');\n getScenePerformanceTracker().notifyPanelOperationStart({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n operation: 'transform',\n timestamp,\n metadata: {\n transformationId,\n transformationCount: metrics.transformationCount,\n // dataFrameCount: metrics.dataFrameCount,\n // totalDataPoints: metrics.totalDataPoints,\n seriesTransformationCount: metrics.seriesTransformationCount,\n annotationTransformationCount: metrics.annotationTransformationCount,\n },\n });\n\n // Return end callback with captured operationId and panel context\n const callback = (\n endTimestamp: number,\n duration: number,\n success: boolean,\n result?: {\n outputSeriesCount?: number;\n outputAnnotationsCount?: number;\n error?: string;\n }\n ) => {\n if (!this._panelKey) {\n return;\n }\n\n getScenePerformanceTracker().notifyPanelOperationComplete({\n operationId,\n panelId: this._panelId!,\n panelKey: this._panelKey,\n pluginId: this._pluginId!,\n operation: 'transform',\n timestamp: endTimestamp,\n duration,\n metadata: {\n transformationId,\n transformationCount: metrics.transformationCount,\n seriesTransformationCount: metrics.seriesTransformationCount,\n annotationTransformationCount: metrics.annotationTransformationCount,\n success,\n error: result?.error || (!success ? 'Transform operation failed' : undefined),\n // dataFrameCount: metrics.dataFrameCount,\n // totalDataPoints: metrics.totalDataPoints,\n // outputSeriesCount: result?.outputSeriesCount,\n // outputAnnotationsCount: result?.outputAnnotationsCount,\n },\n });\n };\n return callback;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- const REFRESH_INTERACTION = "refresh";
2
- const TIME_RANGE_CHANGE_INTERACTION = "time_range_change";
3
- const FILTER_ADDED_INTERACTION = "filter_added";
4
- const FILTER_REMOVED_INTERACTION = "filter_removed";
5
- const FILTER_CHANGED_INTERACTION = "filter_changed";
6
- const FILTER_RESTORED_INTERACTION = "filter_restored";
7
- const VARIABLE_VALUE_CHANGED_INTERACTION = "variable_value_changed";
8
- const SCOPES_CHANGED_INTERACTION = "scopes_changed";
9
- const ADHOC_KEYS_DROPDOWN_INTERACTION = "adhoc_keys_dropdown";
10
- const ADHOC_VALUES_DROPDOWN_INTERACTION = "adhoc_values_dropdown";
11
- const GROUPBY_DIMENSIONS_INTERACTION = "groupby_dimensions";
12
-
13
- export { ADHOC_KEYS_DROPDOWN_INTERACTION, ADHOC_VALUES_DROPDOWN_INTERACTION, FILTER_ADDED_INTERACTION, FILTER_CHANGED_INTERACTION, FILTER_REMOVED_INTERACTION, FILTER_RESTORED_INTERACTION, GROUPBY_DIMENSIONS_INTERACTION, REFRESH_INTERACTION, SCOPES_CHANGED_INTERACTION, TIME_RANGE_CHANGE_INTERACTION, VARIABLE_VALUE_CHANGED_INTERACTION };
14
- //# sourceMappingURL=interactionConstants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interactionConstants.js","sources":["../../../src/behaviors/interactionConstants.ts"],"sourcesContent":["/**\n * Constants for different types of dashboard interactions tracked by SceneRenderProfiler\n */\n\nexport const REFRESH_INTERACTION = 'refresh';\nexport const TIME_RANGE_CHANGE_INTERACTION = 'time_range_change';\nexport const FILTER_ADDED_INTERACTION = 'filter_added';\nexport const FILTER_REMOVED_INTERACTION = 'filter_removed';\nexport const FILTER_CHANGED_INTERACTION = 'filter_changed';\nexport const FILTER_RESTORED_INTERACTION = 'filter_restored';\nexport const VARIABLE_VALUE_CHANGED_INTERACTION = 'variable_value_changed';\nexport const SCOPES_CHANGED_INTERACTION = 'scopes_changed';\nexport const ADHOC_KEYS_DROPDOWN_INTERACTION = 'adhoc_keys_dropdown';\nexport const ADHOC_VALUES_DROPDOWN_INTERACTION = 'adhoc_values_dropdown';\nexport const GROUPBY_DIMENSIONS_INTERACTION = 'groupby_dimensions';\n"],"names":[],"mappings":"AAIO,MAAM,mBAAsB,GAAA;AAC5B,MAAM,6BAAgC,GAAA;AACtC,MAAM,wBAA2B,GAAA;AACjC,MAAM,0BAA6B,GAAA;AACnC,MAAM,0BAA6B,GAAA;AACnC,MAAM,2BAA8B,GAAA;AACpC,MAAM,kCAAqC,GAAA;AAC3C,MAAM,0BAA6B,GAAA;AACnC,MAAM,+BAAkC,GAAA;AACxC,MAAM,iCAAoC,GAAA;AAC1C,MAAM,8BAAiC,GAAA;;;;"}
@@ -1,18 +0,0 @@
1
- import { sceneGraph } from '../core/sceneGraph/index.js';
2
- import { VizPanel } from '../components/VizPanel/VizPanel.js';
3
- import { VizPanelRenderProfiler } from '../behaviors/VizPanelRenderProfiler.js';
4
-
5
- function findPanelProfiler(sceneObject) {
6
- try {
7
- const panel = sceneGraph.getAncestor(sceneObject, VizPanel);
8
- if (panel) {
9
- const behaviors = panel.state.$behaviors || [];
10
- return behaviors.find((b) => b instanceof VizPanelRenderProfiler);
11
- }
12
- } catch (error) {
13
- }
14
- return void 0;
15
- }
16
-
17
- export { findPanelProfiler };
18
- //# sourceMappingURL=findPanelProfiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findPanelProfiler.js","sources":["../../../src/utils/findPanelProfiler.ts"],"sourcesContent":["import { sceneGraph } from '../core/sceneGraph';\nimport { SceneObject } from '../core/types';\nimport { VizPanel } from '../components/VizPanel/VizPanel';\nimport { VizPanelRenderProfiler } from '../behaviors/VizPanelRenderProfiler';\n\n/**\n * Find VizPanelRenderProfiler for a scene object by traversing up to find VizPanel ancestor.\n * @param sceneObject - Scene object to start search from\n * @returns VizPanelRenderProfiler if found, undefined otherwise\n */\nexport function findPanelProfiler(sceneObject: SceneObject): VizPanelRenderProfiler | undefined {\n try {\n const panel = sceneGraph.getAncestor(sceneObject, VizPanel);\n if (panel) {\n const behaviors = panel.state.$behaviors || [];\n return behaviors.find((b): b is VizPanelRenderProfiler => b instanceof VizPanelRenderProfiler);\n }\n } catch (error) {\n // Continue without tracking if panel not found\n }\n return undefined;\n}\n"],"names":[],"mappings":";;;;AAUO,SAAS,kBAAkB,WAA8D,EAAA;AAC9F,EAAI,IAAA;AACF,IAAA,MAAM,KAAQ,GAAA,UAAA,CAAW,WAAY,CAAA,WAAA,EAAa,QAAQ,CAAA;AAC1D,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,MAAM,SAAY,GAAA,KAAA,CAAM,KAAM,CAAA,UAAA,IAAc,EAAC;AAC7C,MAAA,OAAO,SAAU,CAAA,IAAA,CAAK,CAAC,CAAA,KAAmC,aAAa,sBAAsB,CAAA;AAAA;AAC/F,WACO,KAAO,EAAA;AAAA;AAGhB,EAAO,OAAA,MAAA;AACT;;;;"}
@@ -1,12 +0,0 @@
1
- function writePerformanceLog(logger, message, ...rest) {
2
- let loggingEnabled = false;
3
- if (typeof window !== "undefined") {
4
- loggingEnabled = localStorage.getItem("grafana.debug.sceneProfiling") === "true";
5
- }
6
- if (loggingEnabled) {
7
- console.log(`${logger}: `, message, ...rest);
8
- }
9
- }
10
-
11
- export { writePerformanceLog };
12
- //# sourceMappingURL=writePerformanceLog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"writePerformanceLog.js","sources":["../../../src/utils/writePerformanceLog.ts"],"sourcesContent":["export function writePerformanceLog(logger: string, message: string, ...rest: unknown[]) {\n let loggingEnabled = false;\n\n if (typeof window !== 'undefined') {\n loggingEnabled = localStorage.getItem('grafana.debug.sceneProfiling') === 'true';\n }\n\n if (loggingEnabled) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n"],"names":[],"mappings":"AAAgB,SAAA,mBAAA,CAAoB,MAAgB,EAAA,OAAA,EAAA,GAAoB,IAAiB,EAAA;AACvF,EAAA,IAAI,cAAiB,GAAA,KAAA;AAErB,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAiB,cAAA,GAAA,YAAA,CAAa,OAAQ,CAAA,8BAA8B,CAAM,KAAA,MAAA;AAAA;AAG5E,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,OAAA,CAAQ,IAAI,CAAG,EAAA,MAAM,CAAM,EAAA,CAAA,EAAA,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA;AAE/C;;;;"}