@grafana/scenes 6.40.0 → 6.41.0--canary.1265.18907056171.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 (145) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/esm/behaviors/SceneInteractionTracker.js.map +1 -1
  3. package/dist/esm/behaviors/SceneQueryController.js.map +1 -1
  4. package/dist/esm/components/SceneRefreshPicker.js +1 -1
  5. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  6. package/dist/esm/components/VizPanel/VizPanel.js +26 -0
  7. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  8. package/dist/esm/components/VizPanel/VizPanelRenderer.js +18 -1
  9. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  10. package/dist/esm/core/SceneTimeRange.js +1 -1
  11. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  12. package/dist/esm/index.js +5 -3
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/esm/locales/cs-CZ/grafana-scenes.json.js +5 -0
  15. package/dist/esm/locales/cs-CZ/grafana-scenes.json.js.map +1 -1
  16. package/dist/esm/locales/de-DE/grafana-scenes.json.js +5 -0
  17. package/dist/esm/locales/de-DE/grafana-scenes.json.js.map +1 -1
  18. package/dist/esm/locales/es-ES/grafana-scenes.json.js +5 -0
  19. package/dist/esm/locales/es-ES/grafana-scenes.json.js.map +1 -1
  20. package/dist/esm/locales/fr-FR/grafana-scenes.json.js +5 -0
  21. package/dist/esm/locales/fr-FR/grafana-scenes.json.js.map +1 -1
  22. package/dist/esm/locales/hu-HU/grafana-scenes.json.js +5 -0
  23. package/dist/esm/locales/hu-HU/grafana-scenes.json.js.map +1 -1
  24. package/dist/esm/locales/id-ID/grafana-scenes.json.js +5 -0
  25. package/dist/esm/locales/id-ID/grafana-scenes.json.js.map +1 -1
  26. package/dist/esm/locales/it-IT/grafana-scenes.json.js +5 -0
  27. package/dist/esm/locales/it-IT/grafana-scenes.json.js.map +1 -1
  28. package/dist/esm/locales/ja-JP/grafana-scenes.json.js +5 -0
  29. package/dist/esm/locales/ja-JP/grafana-scenes.json.js.map +1 -1
  30. package/dist/esm/locales/ko-KR/grafana-scenes.json.js +5 -0
  31. package/dist/esm/locales/ko-KR/grafana-scenes.json.js.map +1 -1
  32. package/dist/esm/locales/nl-NL/grafana-scenes.json.js +5 -0
  33. package/dist/esm/locales/nl-NL/grafana-scenes.json.js.map +1 -1
  34. package/dist/esm/locales/pl-PL/grafana-scenes.json.js +5 -0
  35. package/dist/esm/locales/pl-PL/grafana-scenes.json.js.map +1 -1
  36. package/dist/esm/locales/pt-BR/grafana-scenes.json.js +5 -0
  37. package/dist/esm/locales/pt-BR/grafana-scenes.json.js.map +1 -1
  38. package/dist/esm/locales/pt-PT/grafana-scenes.json.js +5 -0
  39. package/dist/esm/locales/pt-PT/grafana-scenes.json.js.map +1 -1
  40. package/dist/esm/locales/ru-RU/grafana-scenes.json.js +5 -0
  41. package/dist/esm/locales/ru-RU/grafana-scenes.json.js.map +1 -1
  42. package/dist/esm/locales/sv-SE/grafana-scenes.json.js +5 -0
  43. package/dist/esm/locales/sv-SE/grafana-scenes.json.js.map +1 -1
  44. package/dist/esm/locales/tr-TR/grafana-scenes.json.js +5 -0
  45. package/dist/esm/locales/tr-TR/grafana-scenes.json.js.map +1 -1
  46. package/dist/esm/locales/zh-Hans/grafana-scenes.json.js +5 -0
  47. package/dist/esm/locales/zh-Hans/grafana-scenes.json.js.map +1 -1
  48. package/dist/esm/locales/zh-Hant/grafana-scenes.json.js +5 -0
  49. package/dist/esm/locales/zh-Hant/grafana-scenes.json.js.map +1 -1
  50. package/dist/esm/{behaviors → performance}/LongFrameDetector.js +11 -11
  51. package/dist/esm/performance/LongFrameDetector.js.map +1 -0
  52. package/dist/esm/performance/PanelProfilingManager.js +65 -0
  53. package/dist/esm/performance/PanelProfilingManager.js.map +1 -0
  54. package/dist/esm/performance/ScenePerformanceTracker.js +82 -0
  55. package/dist/esm/performance/ScenePerformanceTracker.js.map +1 -0
  56. package/dist/esm/{behaviors → performance}/SceneRenderProfiler.js +87 -132
  57. package/dist/esm/performance/SceneRenderProfiler.js.map +1 -0
  58. package/dist/esm/performance/VizPanelRenderProfiler.js +316 -0
  59. package/dist/esm/performance/VizPanelRenderProfiler.js.map +1 -0
  60. package/dist/esm/performance/index.js +3 -0
  61. package/dist/esm/performance/index.js.map +1 -0
  62. package/dist/esm/performance/interactionConstants.js +13 -0
  63. package/dist/esm/performance/interactionConstants.js.map +1 -0
  64. package/dist/esm/querying/SceneDataTransformer.js +57 -0
  65. package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
  66. package/dist/esm/querying/SceneQueryRunner.js +11 -6
  67. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  68. package/dist/esm/querying/registerQueryWithController.js +39 -2
  69. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  70. package/dist/esm/utils/findPanelProfiler.js +18 -0
  71. package/dist/esm/utils/findPanelProfiler.js.map +1 -0
  72. package/dist/esm/utils/writePerformanceLog.js +12 -0
  73. package/dist/esm/utils/writePerformanceLog.js.map +1 -0
  74. package/dist/esm/utils/writeSceneLog.js +1 -10
  75. package/dist/esm/utils/writeSceneLog.js.map +1 -1
  76. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +1 -1
  77. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  78. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +1 -1
  79. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  80. package/dist/esm/variables/components/VariableValueSelect.js +1 -1
  81. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  82. package/dist/esm/variables/groupby/GroupByVariable.js +1 -1
  83. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  84. package/dist/esm/variables/macros/timeMacros.js +0 -3
  85. package/dist/esm/variables/macros/timeMacros.js.map +1 -1
  86. package/dist/esm/variables/variants/MultiValueVariable.js +1 -1
  87. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  88. package/dist/esm/variables/variants/ScopesVariable.js +1 -1
  89. package/dist/esm/variables/variants/ScopesVariable.js.map +1 -1
  90. package/dist/{grafana-scenes-CRkk3i3Y.js → grafana-scenes-2zS6WwcG.js} +6 -1
  91. package/dist/{grafana-scenes-BH2OEiLz.js.map → grafana-scenes-2zS6WwcG.js.map} +1 -1
  92. package/dist/{grafana-scenes-BH2OEiLz.js → grafana-scenes-5D_kgp5S.js} +6 -1
  93. package/dist/{grafana-scenes-BLJV6eE3.js.map → grafana-scenes-5D_kgp5S.js.map} +1 -1
  94. package/dist/{grafana-scenes-DTn3nyOX.js → grafana-scenes-8z5eBgO0.js} +6 -1
  95. package/dist/{grafana-scenes-BrExMMR1.js.map → grafana-scenes-8z5eBgO0.js.map} +1 -1
  96. package/dist/{grafana-scenes-DNMnQEFs.js → grafana-scenes-BAJo7mZu.js} +6 -1
  97. package/dist/{grafana-scenes-BrpU2VxI.js.map → grafana-scenes-BAJo7mZu.js.map} +1 -1
  98. package/dist/{grafana-scenes-DaO9TTTj.js → grafana-scenes-BAvDcHPV.js} +6 -1
  99. package/dist/grafana-scenes-BAvDcHPV.js.map +1 -0
  100. package/dist/{grafana-scenes-Kqjin1Vr.js → grafana-scenes-C4rsdf2J.js} +6 -1
  101. package/dist/grafana-scenes-C4rsdf2J.js.map +1 -0
  102. package/dist/{grafana-scenes-DpvJWDGo.js → grafana-scenes-DQDUiFgy.js} +6 -1
  103. package/dist/grafana-scenes-DQDUiFgy.js.map +1 -0
  104. package/dist/{grafana-scenes-OEGPBO01.js → grafana-scenes-DW_EK7z5.js} +6 -1
  105. package/dist/grafana-scenes-DW_EK7z5.js.map +1 -0
  106. package/dist/{grafana-scenes-D-DPZiBx.js → grafana-scenes-D_7C5tUl.js} +6 -1
  107. package/dist/grafana-scenes-D_7C5tUl.js.map +1 -0
  108. package/dist/{grafana-scenes-D1jd3aZp.js → grafana-scenes-DarGXy_b.js} +6 -1
  109. package/dist/grafana-scenes-DarGXy_b.js.map +1 -0
  110. package/dist/{grafana-scenes-Cl-piLdF.js → grafana-scenes-Di0mD-iN.js} +6 -1
  111. package/dist/grafana-scenes-Di0mD-iN.js.map +1 -0
  112. package/dist/{grafana-scenes-DPbgWPLH.js → grafana-scenes-DkNywY1s.js} +6 -1
  113. package/dist/grafana-scenes-DkNywY1s.js.map +1 -0
  114. package/dist/{grafana-scenes-BrpU2VxI.js → grafana-scenes-Dmwf_eJ5.js} +6 -1
  115. package/dist/grafana-scenes-Dmwf_eJ5.js.map +1 -0
  116. package/dist/{grafana-scenes-BLJV6eE3.js → grafana-scenes-L3DvBvA_.js} +6 -1
  117. package/dist/grafana-scenes-L3DvBvA_.js.map +1 -0
  118. package/dist/{grafana-scenes-qNHDZUAZ.js → grafana-scenes-fPery0i8.js} +6 -1
  119. package/dist/grafana-scenes-fPery0i8.js.map +1 -0
  120. package/dist/{grafana-scenes-CfuUpx6R.js → grafana-scenes-r_1S-tPI.js} +6 -1
  121. package/dist/grafana-scenes-r_1S-tPI.js.map +1 -0
  122. package/dist/{grafana-scenes-BrExMMR1.js → grafana-scenes-tZ650dxC.js} +6 -1
  123. package/dist/grafana-scenes-tZ650dxC.js.map +1 -0
  124. package/dist/{grafana-scenes-DoKV4lED.js → grafana-scenes-v_pWTyzx.js} +6 -1
  125. package/dist/grafana-scenes-v_pWTyzx.js.map +1 -0
  126. package/dist/index.d.ts +326 -95
  127. package/dist/index.js +6621 -6055
  128. package/dist/index.js.map +1 -1
  129. package/package.json +2 -2
  130. package/dist/esm/behaviors/LongFrameDetector.js.map +0 -1
  131. package/dist/esm/behaviors/SceneRenderProfiler.js.map +0 -1
  132. package/dist/grafana-scenes-CRkk3i3Y.js.map +0 -1
  133. package/dist/grafana-scenes-CfuUpx6R.js.map +0 -1
  134. package/dist/grafana-scenes-Cl-piLdF.js.map +0 -1
  135. package/dist/grafana-scenes-D-DPZiBx.js.map +0 -1
  136. package/dist/grafana-scenes-D1jd3aZp.js.map +0 -1
  137. package/dist/grafana-scenes-DNMnQEFs.js.map +0 -1
  138. package/dist/grafana-scenes-DPbgWPLH.js.map +0 -1
  139. package/dist/grafana-scenes-DTn3nyOX.js.map +0 -1
  140. package/dist/grafana-scenes-DaO9TTTj.js.map +0 -1
  141. package/dist/grafana-scenes-DoKV4lED.js.map +0 -1
  142. package/dist/grafana-scenes-DpvJWDGo.js.map +0 -1
  143. package/dist/grafana-scenes-Kqjin1Vr.js.map +0 -1
  144. package/dist/grafana-scenes-OEGPBO01.js.map +0 -1
  145. package/dist/grafana-scenes-qNHDZUAZ.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as _grafana_data from '@grafana/data';
2
- import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, PanelModel, TimeRange, DataTransformContext, DataFrame, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, GetTagResponse, MetricFindValue, SelectableValue, VariableRefresh as VariableRefresh$1, VariableSort, DrilldownsApplicability, Scope, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
2
+ import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, DataQueryRequest, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, PanelModel, TimeRange, DataTransformContext, DataFrame, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, GetTagResponse, MetricFindValue, SelectableValue, VariableRefresh as VariableRefresh$1, VariableSort, DrilldownsApplicability, Scope, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
3
+ import * as _grafana_schema from '@grafana/schema';
4
+ import { VariableType, VariableHide, LoadingState, TimeZone, DataQuery, DataTopic, DataSourceRef, VariableRefresh, DashboardCursorSync, MatcherConfig, TableFieldOptions } from '@grafana/schema';
3
5
  import * as React$1 from 'react';
4
6
  import React__default, { ComponentType, CSSProperties, PointerEvent, ForwardRefExoticComponent } from 'react';
5
7
  import * as rxjs from 'rxjs';
6
8
  import { Observable, Subscription, Unsubscribable, MonoTypeOperatorFunction, ReplaySubject } from 'rxjs';
7
- import * as _grafana_schema from '@grafana/schema';
8
- import { VariableType, VariableHide, TimeZone, DataQuery, DataTopic, DataSourceRef, VariableRefresh, LoadingState, DashboardCursorSync, MatcherConfig, TableFieldOptions } from '@grafana/schema';
9
9
  import { PanelContext, WeekStart, IconName as IconName$1 } from '@grafana/ui';
10
10
  import { LocationService, VariableInterpolation, ScopesContextValue } from '@grafana/runtime';
11
11
  import { Location } from 'history';
@@ -315,6 +315,127 @@ declare class VariableDependencyConfig<TState extends SceneObjectState> implemen
315
315
  private handleTimeMacros;
316
316
  }
317
317
 
318
+ interface LongFrameEvent {
319
+ duration: number;
320
+ timestamp: number;
321
+ method: 'manual' | 'loaf';
322
+ }
323
+ type LongFrameCallback = (event: LongFrameEvent) => void;
324
+
325
+ interface QueryResultWithState {
326
+ state: LoadingState;
327
+ }
328
+ interface SceneQueryControllerEntry {
329
+ request?: DataQueryRequest;
330
+ type: SceneQueryControllerEntryType;
331
+ origin: SceneObject;
332
+ cancel?: () => void;
333
+ }
334
+ type SceneQueryControllerEntryType = 'data' | 'annotations' | 'variable' | 'alerts' | 'plugin' | string;
335
+
336
+
337
+
338
+ interface SceneComponentInteractionEvent {
339
+ origin: string;
340
+ duration: number;
341
+ networkDuration: number;
342
+ startTs: number;
343
+ endTs: number;
344
+ }
345
+ interface SceneInteractionTrackerState extends SceneObjectState {
346
+ enableInteractionTracking?: boolean;
347
+ onInteractionComplete?(event: SceneComponentInteractionEvent): void;
348
+ }
349
+ interface SceneQueryStateControllerState extends SceneObjectState {
350
+ isRunning: boolean;
351
+ enableProfiling?: boolean;
352
+ }
353
+ interface SceneQueryControllerLike extends SceneObject<SceneQueryStateControllerState> {
354
+ isQueryController: true;
355
+ cancelAll(): void;
356
+ queryStarted(entry: SceneQueryControllerEntry): void;
357
+ queryCompleted(entry: SceneQueryControllerEntry): void;
358
+ startProfile(name: string): void;
359
+ cancelProfile(): void;
360
+ runningQueriesCount(): number;
361
+ }
362
+
363
+ /**
364
+ * Performance tracking callback types
365
+ */
366
+ type QueryCompletionCallback = (endTimestamp: number, error?: any) => void;
367
+ type PluginLoadCompletionCallback = (plugin: any, fromCache?: boolean) => void;
368
+ type FieldConfigCompletionCallback = (endTimestamp: number, dataPointsCount?: number, seriesCount?: number) => void;
369
+ type RenderCompletionCallback = (endTimestamp: number, duration: number) => void;
370
+ type DataTransformCompletionCallback = (endTimestamp: number, duration: number, success: boolean, result?: {
371
+ error?: string;
372
+ }) => void;
373
+
374
+ interface QueryProfilerLike {
375
+ onQueryStarted(timestamp: number, entry: SceneQueryControllerEntry, queryId: string): QueryCompletionCallback | null;
376
+ }
377
+ /**
378
+ * Will look for a scene object with a behavior that is a SceneQueryController and register the query with it.
379
+ * Optionally accepts a panel profiler for direct query tracking callbacks.
380
+ */
381
+ declare function registerQueryWithController<T extends QueryResultWithState>(entry: SceneQueryControllerEntry, profiler?: QueryProfilerLike): (queryStream: Observable<T>) => Observable<T>;
382
+
383
+ interface VizPanelRenderProfilerState extends SceneObjectState {
384
+ }
385
+ /**
386
+ * Tracks performance metrics for individual VizPanel instances using observer pattern.
387
+ *
388
+ * Performance events are sent to ScenePerformanceTracker observers, which are consumed
389
+ * by Grafana's ScenePerformanceLogger and DashboardAnalyticsAggregator.
390
+ */
391
+ declare class VizPanelRenderProfiler extends SceneObjectBase<VizPanelRenderProfilerState> implements QueryProfilerLike {
392
+ private _panelKey?;
393
+ private _panelId?;
394
+ private _pluginId?;
395
+ private _pluginVersion?;
396
+ private _isTracking;
397
+ private _loadPluginStartTime?;
398
+ private _applyFieldConfigStartTime?;
399
+ private _activeQueries;
400
+ constructor(state?: Partial<VizPanelRenderProfilerState>);
401
+ private _onActivate;
402
+ private _handlePanelStateChange;
403
+ /**
404
+ * Track query execution with operation ID correlation
405
+ */
406
+ onQueryStarted(timestamp: number, entry: SceneQueryControllerEntry, queryId: string): QueryCompletionCallback | null;
407
+ /**
408
+ * Track plugin loading with operation ID correlation
409
+ */
410
+ onPluginLoadStart(pluginId: string): PluginLoadCompletionCallback | null;
411
+ /**
412
+ * Track field config processing with operation ID correlation
413
+ */
414
+ onFieldConfigStart(timestamp: number): FieldConfigCompletionCallback | null;
415
+ /**
416
+ * Get panel info for logging - truncates long titles for readability
417
+ */
418
+ private _getPanelInfo;
419
+ /**
420
+ * Track simple render timing with operation ID correlation
421
+ */
422
+ onSimpleRenderStart(timestamp: number): RenderCompletionCallback | undefined;
423
+ /** Handle plugin changes */
424
+ private _onPluginChange;
425
+ /** Start tracking this panel */
426
+ private _startTracking;
427
+ /** Cleanup when behavior is deactivated */
428
+ private _cleanup;
429
+ /**
430
+ * Track data transformation with operation ID correlation
431
+ */
432
+ onDataTransformStart(timestamp: number, transformationId: string, metrics: {
433
+ transformationCount: number;
434
+ seriesTransformationCount: number;
435
+ annotationTransformationCount: number;
436
+ }): DataTransformCompletionCallback | null;
437
+ }
438
+
318
439
  interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {
319
440
  /**
320
441
  * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a
@@ -385,6 +506,10 @@ declare class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends Scen
385
506
  private _dataWithFieldConfig?;
386
507
  private _structureRev;
387
508
  constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>);
509
+ /**
510
+ * Get the VizPanelRenderProfiler behavior if attached
511
+ */
512
+ getProfiler(): VizPanelRenderProfiler | undefined;
388
513
  private _onActivate;
389
514
  forceRender(): void;
390
515
  private _loadPlugin;
@@ -1343,65 +1468,6 @@ declare class UserActionEvent extends BusEventWithPayload<UserActionEventPayload
1343
1468
  */
1344
1469
  declare function lookupVariable(name: string, sceneObject: SceneObject): SceneVariable | null;
1345
1470
 
1346
- interface LongFrameEvent {
1347
- duration: number;
1348
- timestamp: number;
1349
- method: 'manual' | 'loaf';
1350
- }
1351
- type LongFrameCallback = (event: LongFrameEvent) => void;
1352
-
1353
- interface QueryResultWithState {
1354
- state: LoadingState;
1355
- }
1356
- interface SceneQueryControllerEntry {
1357
- request?: DataQueryRequest;
1358
- type: SceneQueryControllerEntryType;
1359
- origin: SceneObject;
1360
- cancel?: () => void;
1361
- }
1362
- type SceneQueryControllerEntryType = 'data' | 'annotations' | 'variable' | 'alerts' | 'plugin' | string;
1363
-
1364
-
1365
-
1366
- interface SceneInteractionProfileEvent {
1367
- origin: string;
1368
- duration: number;
1369
- networkDuration: number;
1370
- jsHeapSizeLimit: number;
1371
- usedJSHeapSize: number;
1372
- totalJSHeapSize: number;
1373
- crumbs: string[];
1374
- startTs: number;
1375
- endTs: number;
1376
- longFramesCount: number;
1377
- longFramesTotalTime: number;
1378
- }
1379
- interface SceneComponentInteractionEvent {
1380
- origin: string;
1381
- duration: number;
1382
- networkDuration: number;
1383
- startTs: number;
1384
- endTs: number;
1385
- }
1386
- interface SceneInteractionTrackerState extends SceneObjectState {
1387
- enableInteractionTracking?: boolean;
1388
- onInteractionComplete?(event: SceneComponentInteractionEvent): void;
1389
- }
1390
- interface SceneQueryStateControllerState extends SceneObjectState {
1391
- isRunning: boolean;
1392
- enableProfiling?: boolean;
1393
- onProfileComplete?(event: SceneInteractionProfileEvent): void;
1394
- }
1395
- interface SceneQueryControllerLike extends SceneObject<SceneQueryStateControllerState> {
1396
- isQueryController: true;
1397
- cancelAll(): void;
1398
- queryStarted(entry: SceneQueryControllerEntry): void;
1399
- queryCompleted(entry: SceneQueryControllerEntry): void;
1400
- startProfile(name: string): void;
1401
- cancelProfile(): void;
1402
- runningQueriesCount(): number;
1403
- }
1404
-
1405
1471
  /**
1406
1472
  * Returns the closest query controller undefined if none found
1407
1473
  */
@@ -1581,6 +1647,10 @@ declare class PanelContextEventBus implements EventBus {
1581
1647
  newScopedBus(key: string, filter: EventFilterOptions): EventBus;
1582
1648
  }
1583
1649
 
1650
+ interface PanelProfilingConfig {
1651
+ watchStateKey?: string;
1652
+ }
1653
+
1584
1654
  /**
1585
1655
  * SceneRenderProfiler tracks dashboard interaction performance including:
1586
1656
  * - Total interaction duration
@@ -1600,9 +1670,17 @@ declare class PanelContextEventBus implements EventBus {
1600
1670
  */
1601
1671
  declare class SceneRenderProfiler {
1602
1672
  #private;
1673
+ private metadata;
1674
+ private _panelProfilingManager?;
1603
1675
  private queryController?;
1604
- constructor(queryController?: SceneQueryControllerLike | undefined);
1676
+ constructor(panelProfilingConfig?: PanelProfilingConfig);
1677
+ /** Set generic metadata for observer notifications */
1678
+ setMetadata(metadata: Record<string, unknown>): void;
1605
1679
  setQueryController(queryController: SceneQueryControllerLike): void;
1680
+ /** Attach panel profiling to a scene object */
1681
+ attachPanelProfiling(sceneObject: SceneObject): void;
1682
+ /** Attach profiler to a specific panel */
1683
+ attachProfilerToPanel(panel: VizPanel): void;
1606
1684
  setInteractionCompleteHandler(handler?: (event: SceneComponentInteractionEvent) => void): void;
1607
1685
  private setupVisibilityChangeHandler;
1608
1686
  cleanup(): void;
@@ -1611,14 +1689,9 @@ declare class SceneRenderProfiler {
1611
1689
  stopInteraction(): void;
1612
1690
  getCurrentInteraction(): string | null;
1613
1691
  /**
1614
- * Starts a new profile for performance measurement.
1615
- *
1616
- * @param name - The origin/trigger of the profile (e.g., 'time_range_change', 'variable_value_changed')
1617
- * @param force - Whether this is a "forced" profile (true) or "clean" profile (false)
1618
- * - "forced": Started by canceling an existing profile that was recording trailing frames
1619
- * This happens when a new user interaction occurs before the previous one
1620
- * finished measuring its performance impact
1621
- * - "clean": Started when no profile is currently active
1692
+ * Start new performance profile
1693
+ * @param name - Profile trigger (e.g., 'time_range_change')
1694
+ * @param force - True if canceling existing profile, false if starting clean
1622
1695
  */
1623
1696
  private _startNewProfile;
1624
1697
  private recordProfileTail;
@@ -1667,26 +1740,186 @@ declare class LiveNowTimer extends SceneObjectBase<LiveNowTimerState> {
1667
1740
  get isEnabled(): boolean;
1668
1741
  }
1669
1742
 
1670
- type index$1_ActWhenVariableChanged = ActWhenVariableChanged;
1671
- declare const index$1_ActWhenVariableChanged: typeof ActWhenVariableChanged;
1672
- type index$1_CursorSync = CursorSync;
1673
- declare const index$1_CursorSync: typeof CursorSync;
1674
- type index$1_LiveNowTimer = LiveNowTimer;
1675
- declare const index$1_LiveNowTimer: typeof LiveNowTimer;
1676
- type index$1_SceneInteractionTracker = SceneInteractionTracker;
1677
- declare const index$1_SceneInteractionTracker: typeof SceneInteractionTracker;
1678
- type index$1_SceneQueryController = SceneQueryController;
1679
- declare const index$1_SceneQueryController: typeof SceneQueryController;
1680
- declare namespace index$1 {
1743
+ type index$2_ActWhenVariableChanged = ActWhenVariableChanged;
1744
+ declare const index$2_ActWhenVariableChanged: typeof ActWhenVariableChanged;
1745
+ type index$2_CursorSync = CursorSync;
1746
+ declare const index$2_CursorSync: typeof CursorSync;
1747
+ type index$2_LiveNowTimer = LiveNowTimer;
1748
+ declare const index$2_LiveNowTimer: typeof LiveNowTimer;
1749
+ type index$2_SceneInteractionTracker = SceneInteractionTracker;
1750
+ declare const index$2_SceneInteractionTracker: typeof SceneInteractionTracker;
1751
+ type index$2_SceneQueryController = SceneQueryController;
1752
+ declare const index$2_SceneQueryController: typeof SceneQueryController;
1753
+ declare namespace index$2 {
1681
1754
  export {
1682
- index$1_ActWhenVariableChanged as ActWhenVariableChanged,
1683
- index$1_CursorSync as CursorSync,
1684
- index$1_LiveNowTimer as LiveNowTimer,
1685
- index$1_SceneInteractionTracker as SceneInteractionTracker,
1686
- index$1_SceneQueryController as SceneQueryController,
1755
+ index$2_ActWhenVariableChanged as ActWhenVariableChanged,
1756
+ index$2_CursorSync as CursorSync,
1757
+ index$2_LiveNowTimer as LiveNowTimer,
1758
+ index$2_SceneInteractionTracker as SceneInteractionTracker,
1759
+ index$2_SceneQueryController as SceneQueryController,
1687
1760
  };
1688
1761
  }
1689
1762
 
1763
+ /** Base interface for all performance events */
1764
+ interface BasePerformanceEvent {
1765
+ operationId: string;
1766
+ timestamp: number;
1767
+ duration?: number;
1768
+ error?: string;
1769
+ }
1770
+ interface DashboardInteractionStartData extends BasePerformanceEvent {
1771
+ interactionType: string;
1772
+ metadata?: Record<string, unknown>;
1773
+ }
1774
+ interface DashboardInteractionMilestoneData extends BasePerformanceEvent {
1775
+ interactionType: string;
1776
+ milestone: string;
1777
+ metadata?: Record<string, unknown>;
1778
+ }
1779
+ interface DashboardInteractionCompleteData extends BasePerformanceEvent {
1780
+ interactionType: string;
1781
+ networkDuration?: number;
1782
+ longFramesCount: number;
1783
+ longFramesTotalTime: number;
1784
+ metadata?: Record<string, unknown>;
1785
+ }
1786
+ /** Metadata interface for transform operations */
1787
+ interface TransformMetadata {
1788
+ transformationId: string;
1789
+ transformationCount: number;
1790
+ seriesTransformationCount: number;
1791
+ annotationTransformationCount: number;
1792
+ success?: boolean;
1793
+ error?: string;
1794
+ }
1795
+ /** Metadata interface for query operations */
1796
+ interface QueryMetadata {
1797
+ queryId: string;
1798
+ queryType: string;
1799
+ }
1800
+ /** Metadata interface for render operations */
1801
+ interface RenderMetadata {
1802
+ }
1803
+ /** Metadata interface for plugin load operations */
1804
+ interface PluginLoadMetadata {
1805
+ pluginId: string;
1806
+ fromCache?: boolean;
1807
+ pluginLoadTime?: number;
1808
+ }
1809
+ /** Metadata interface for field config operations */
1810
+ interface FieldConfigMetadata {
1811
+ }
1812
+ /** Base interface for panel performance events */
1813
+ interface BasePanelPerformanceData extends BasePerformanceEvent {
1814
+ panelId: string;
1815
+ panelKey: string;
1816
+ pluginId: string;
1817
+ pluginVersion?: string;
1818
+ panelTitle?: string;
1819
+ }
1820
+ /** Transform operation performance data */
1821
+ interface PanelTransformPerformanceData extends BasePanelPerformanceData {
1822
+ operation: 'transform';
1823
+ metadata: TransformMetadata;
1824
+ }
1825
+ /** Query operation performance data */
1826
+ interface PanelQueryPerformanceData extends BasePanelPerformanceData {
1827
+ operation: 'query';
1828
+ metadata: QueryMetadata;
1829
+ }
1830
+ /** Render operation performance data */
1831
+ interface PanelRenderPerformanceData extends BasePanelPerformanceData {
1832
+ operation: 'render';
1833
+ metadata: RenderMetadata;
1834
+ }
1835
+ /** Plugin load operation performance data */
1836
+ interface PanelPluginLoadPerformanceData extends BasePanelPerformanceData {
1837
+ operation: 'plugin-load';
1838
+ metadata: PluginLoadMetadata;
1839
+ }
1840
+ /** Field config operation performance data */
1841
+ interface PanelFieldConfigPerformanceData extends BasePanelPerformanceData {
1842
+ operation: 'fieldConfig';
1843
+ metadata: FieldConfigMetadata;
1844
+ }
1845
+ /** Discriminated union of all panel performance data types */
1846
+ type PanelPerformanceData = PanelTransformPerformanceData | PanelQueryPerformanceData | PanelRenderPerformanceData | PanelPluginLoadPerformanceData | PanelFieldConfigPerformanceData;
1847
+ /** Non-panel query performance data for dashboard queries (annotations, variables, etc.) */
1848
+ interface QueryPerformanceData extends BasePerformanceEvent {
1849
+ queryId: string;
1850
+ queryType: string;
1851
+ origin: string;
1852
+ }
1853
+ /**
1854
+ * Observer interface for performance monitoring
1855
+ * External systems implement this to receive performance notifications
1856
+ */
1857
+ interface ScenePerformanceObserver {
1858
+ onDashboardInteractionStart?(data: DashboardInteractionStartData): void;
1859
+ onDashboardInteractionMilestone?(data: DashboardInteractionMilestoneData): void;
1860
+ onDashboardInteractionComplete?(data: DashboardInteractionCompleteData): void;
1861
+ onPanelOperationStart?(data: PanelPerformanceData): void;
1862
+ onPanelOperationComplete?(data: PanelPerformanceData): void;
1863
+ onQueryStart?(data: QueryPerformanceData): void;
1864
+ onQueryComplete?(data: QueryPerformanceData): void;
1865
+ }
1866
+ /**
1867
+ * Centralized performance tracker
1868
+ * Manages observers and provides methods for scene objects to report performance events
1869
+ */
1870
+ declare class ScenePerformanceTracker {
1871
+ private static instance;
1872
+ private observers;
1873
+ static getInstance(): ScenePerformanceTracker;
1874
+ /**
1875
+ * Register a performance observer
1876
+ */
1877
+ addObserver(observer: ScenePerformanceObserver): () => void;
1878
+ /**
1879
+ * Remove all observers (for testing)
1880
+ */
1881
+ clearObservers(): void;
1882
+ /**
1883
+ * Get current observer count (for debugging)
1884
+ */
1885
+ getObserverCount(): number;
1886
+ private notifyObservers;
1887
+ notifyDashboardInteractionStart(data: DashboardInteractionStartData): void;
1888
+ notifyDashboardInteractionMilestone(data: DashboardInteractionMilestoneData): void;
1889
+ notifyDashboardInteractionComplete(data: DashboardInteractionCompleteData): void;
1890
+ notifyPanelOperationStart(data: PanelPerformanceData): void;
1891
+ notifyPanelOperationComplete(data: PanelPerformanceData): void;
1892
+ notifyQueryStart(data: QueryPerformanceData): void;
1893
+ notifyQueryComplete(data: QueryPerformanceData): void;
1894
+ }
1895
+ /**
1896
+ * Get the global performance tracker instance
1897
+ */
1898
+ declare function getScenePerformanceTracker(): ScenePerformanceTracker;
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+ type index$1_DashboardInteractionCompleteData = DashboardInteractionCompleteData;
1908
+ type index$1_DashboardInteractionMilestoneData = DashboardInteractionMilestoneData;
1909
+ type index$1_DashboardInteractionStartData = DashboardInteractionStartData;
1910
+ type index$1_PanelPerformanceData = PanelPerformanceData;
1911
+ type index$1_QueryPerformanceData = QueryPerformanceData;
1912
+ type index$1_ScenePerformanceObserver = ScenePerformanceObserver;
1913
+ type index$1_SceneRenderProfiler = SceneRenderProfiler;
1914
+ declare const index$1_SceneRenderProfiler: typeof SceneRenderProfiler;
1915
+ declare const index$1_getScenePerformanceTracker: typeof getScenePerformanceTracker;
1916
+ declare namespace index$1 {
1917
+ export { index$1_SceneRenderProfiler as SceneRenderProfiler, index$1_getScenePerformanceTracker as getScenePerformanceTracker };
1918
+ export type { index$1_DashboardInteractionCompleteData as DashboardInteractionCompleteData, index$1_DashboardInteractionMilestoneData as DashboardInteractionMilestoneData, index$1_DashboardInteractionStartData as DashboardInteractionStartData, index$1_PanelPerformanceData as PanelPerformanceData, index$1_QueryPerformanceData as QueryPerformanceData, index$1_ScenePerformanceObserver as ScenePerformanceObserver };
1919
+ }
1920
+
1921
+ declare function writePerformanceLog(logger: string, message: string, ...rest: unknown[]): void;
1922
+
1690
1923
  /**
1691
1924
  * Base class for data layer. Handles common implementation including enabling/disabling layer and publishing results.
1692
1925
  */
@@ -2012,6 +2245,10 @@ declare class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerS
2012
2245
  setContainerWidth(width: number): void;
2013
2246
  isDataReadyToDisplay(): boolean;
2014
2247
  reprocessTransformations(): void;
2248
+ /**
2249
+ * S3.1: Calculate transformation complexity metrics
2250
+ */
2251
+ private _calculateTransformationMetrics;
2015
2252
  cancelQuery(): void;
2016
2253
  getResultsStream(): ReplaySubject<SceneDataProviderResult>;
2017
2254
  clone(withState?: Partial<SceneDataTransformerState>): this;
@@ -2023,11 +2260,6 @@ declare class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerS
2023
2260
  private _filterAndPrepareTransformationsByTopic;
2024
2261
  }
2025
2262
 
2026
- /**
2027
- * Will look for a scene object with a behavior that is a SceneQueryController and register the query with it.
2028
- */
2029
- declare function registerQueryWithController<T extends QueryResultWithState>(entry: SceneQueryControllerEntry): (queryStream: Observable<T>) => Observable<T>;
2030
-
2031
2263
  interface VariableValueSelectorsState extends SceneObjectState {
2032
2264
  layout?: ControlsLayout;
2033
2265
  }
@@ -3205,7 +3437,6 @@ declare const loadResources: ResourceLoader;
3205
3437
 
3206
3438
 
3207
3439
 
3208
-
3209
3440
 
3210
3441
 
3211
3442
  declare const sceneUtils: {
@@ -3233,5 +3464,5 @@ declare const sceneUtils: {
3233
3464
  buildPathIdFor: typeof buildPathIdFor;
3234
3465
  };
3235
3466
 
3236
- export { AdHocFiltersVariable, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRenderProfiler, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$1 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
3237
- export type { AdHocFilterWithLabels, CancelActivationHandler, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, MacroVariableConstructor, MultiValueVariableState, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueSingle, VizConfig, VizPanelState };
3467
+ export { AdHocFiltersVariable, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$2 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, index$1 as performanceUtils, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync, writePerformanceLog };
3468
+ export type { AdHocFilterWithLabels, CancelActivationHandler, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, MacroVariableConstructor, MultiValueVariableState, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueSingle, VizConfig, VizPanelState };