The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/features/dashboard-scene/scene/DashboardAnnotationsDataLay...

45 lines
1.4 KiB

import { AnnotationEvent, arrayToDataFrame, DataTopic, getDefaultTimeRange, PanelData } from '@grafana/data';
import { config } from '@grafana/runtime';
import { dataLayers } from '@grafana/scenes';
import { AnnotationQuery, LoadingState } from '@grafana/schema';
import { PublicAnnotationsDataSource } from 'app/features/query/state/DashboardQueryRunner/PublicAnnotationsDataSource';
/**
* This class is an extension to dataLayers.AnnotationsDataLayer to provide support for public dashboards.
*/
export class DashboardAnnotationsDataLayer extends dataLayers.AnnotationsDataLayer {
protected async resolveDataSource(query: AnnotationQuery) {
if (config.publicDashboardAccessToken) {
return new PublicAnnotationsDataSource();
}
return super.resolveDataSource(query);
}
protected processEvents(
query: AnnotationQuery,
events: {
state: LoadingState;
events: AnnotationEvent[];
}
) {
if (config.publicDashboardAccessToken) {
const stateUpdate: PanelData = {
series: [],
timeRange: getDefaultTimeRange(),
state: events.state,
};
const df = arrayToDataFrame(events.events);
df.meta = {
...df.meta,
dataTopic: DataTopic.Annotations,
};
stateUpdate.annotations = [df];
return stateUpdate;
} else {
return super.processEvents(query, events);
}
}
}