grafana/public/app/features/query/state/DashboardQueryRunner/SnapshotWorker.ts
Ashley Harrison 0c44a6f9bb
Chore: Improve typings 🧹 (#74599)
* various type fixes

* candlestick panel type fixes

* few more fixes

* some fixes

* more :)

* moar!

* undo change to SilencesFilter

* undo change to configureStore
2023-09-13 09:17:07 +01:00

40 lines
1.5 KiB
TypeScript

import { Observable, of } from 'rxjs';
import { AnnotationEvent } from '@grafana/data';
import { DashboardModel } from '../../../dashboard/state';
import { DashboardQueryRunnerOptions, DashboardQueryRunnerWorker, DashboardQueryRunnerWorkerResult } from './types';
import { emptyResult, getAnnotationsByPanelId, translateQueryResult } from './utils';
export class SnapshotWorker implements DashboardQueryRunnerWorker {
canWork({ dashboard }: DashboardQueryRunnerOptions): boolean {
return dashboard?.annotations?.list?.some((a) => a.enable && Boolean(a.snapshotData));
}
work(options: DashboardQueryRunnerOptions): Observable<DashboardQueryRunnerWorkerResult> {
if (!this.canWork(options)) {
return emptyResult();
}
const annotations = this.getAnnotationsFromSnapshot(options.dashboard);
return of({ annotations, alertStates: [] });
}
private getAnnotationsFromSnapshot(dashboard: DashboardModel): AnnotationEvent[] {
const dashAnnotations = dashboard?.annotations?.list?.filter((a) => a.enable);
const snapshots = dashAnnotations.filter((a) => Boolean(a.snapshotData));
const annotations = snapshots.reduce<AnnotationEvent[]>(
(acc, curr) => acc.concat(translateQueryResult(curr, curr.snapshotData)),
[]
);
return annotations;
}
getAnnotationsInSnapshot(dashboard: DashboardModel, panelId?: number): AnnotationEvent[] {
const annotations = this.getAnnotationsFromSnapshot(dashboard);
return getAnnotationsByPanelId(annotations, panelId);
}
}