@grafana/scenes 6.40.0--canary.1265.18676273866.0 → 6.40.0--canary.1265.18710211578.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.
@@ -1,6 +1,6 @@
1
- let operationCounter = 0;
2
1
  function generateOperationId(prefix = "op") {
3
- return `${prefix}-${Date.now()}-${++operationCounter}`;
2
+ const uuid = crypto.randomUUID();
3
+ return `${prefix}-${uuid}`;
4
4
  }
5
5
  const _ScenePerformanceTracker = class _ScenePerformanceTracker {
6
6
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"ScenePerformanceTracker.js","sources":["../../../src/performance/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}\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\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
+ {"version":3,"file":"ScenePerformanceTracker.js","sources":["../../../src/performance/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 */\nexport function generateOperationId(prefix = 'op'): string {\n // Use crypto.randomUUID() for true uniqueness without global state\n const uuid = crypto.randomUUID();\n return `${prefix}-${uuid}`;\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}\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\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,7 +1,7 @@
1
1
  import { Observable, from, map, catchError } from 'rxjs';
2
2
  import { LoadingState } from '@grafana/schema';
3
3
  import { sceneGraph } from '../core/sceneGraph/index.js';
4
- import { getScenePerformanceTracker, generateOperationId } from '../performance/ScenePerformanceTracker.js';
4
+ import { generateOperationId, getScenePerformanceTracker } from '../performance/ScenePerformanceTracker.js';
5
5
 
6
6
  function registerQueryWithController(entry, profiler) {
7
7
  return (queryStream) => {
package/dist/index.js CHANGED
@@ -2382,9 +2382,9 @@ function isDataLayer(obj) {
2382
2382
  return "isDataLayer" in obj;
2383
2383
  }
2384
2384
 
2385
- let operationCounter = 0;
2386
2385
  function generateOperationId(prefix = "op") {
2387
- return `${prefix}-${Date.now()}-${++operationCounter}`;
2386
+ const uuid = crypto.randomUUID();
2387
+ return `${prefix}-${uuid}`;
2388
2388
  }
2389
2389
  const _ScenePerformanceTracker = class _ScenePerformanceTracker {
2390
2390
  constructor() {