From 770e8e4a0bea65b61ab0c1e3215a998cf79dd6d5 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 8 Dec 2020 17:36:09 -0800 Subject: [PATCH] DataFrame: add path and description metadata (#29695) --- packages/grafana-data/src/types/data.ts | 10 ++++++++++ packages/grafana-data/src/types/dataFrame.ts | 14 ++++++++++++++ packages/grafana-ui/src/components/uPlot/config.ts | 12 ++++++++++++ .../uPlot/plugins/AnnotationsEditorPlugin.tsx | 3 +++ .../src/components/uPlot/plugins/ClickPlugin.tsx | 3 +++ .../components/uPlot/plugins/ContextMenuPlugin.tsx | 3 +++ .../src/components/uPlot/plugins/CursorPlugin.tsx | 6 +++++- .../components/uPlot/plugins/SelectionPlugin.tsx | 3 +++ .../src/components/uPlot/plugins/TooltipPlugin.tsx | 3 +++ .../src/components/uPlot/plugins/ZoomPlugin.tsx | 3 +++ 10 files changed, 59 insertions(+), 1 deletion(-) diff --git a/packages/grafana-data/src/types/data.ts b/packages/grafana-data/src/types/data.ts index 0bdd1c1d129..fbf0dbfb0c6 100644 --- a/packages/grafana-data/src/types/data.ts +++ b/packages/grafana-data/src/types/data.ts @@ -53,6 +53,16 @@ export interface QueryResultMeta { */ executedQueryString?: string; + /** + * A browsable path on the datasource + */ + path?: string; + + /** + * defaults to '/' + */ + pathSeparator?: string; + /** * Legacy data source specific, should be moved to custom * */ diff --git a/packages/grafana-data/src/types/dataFrame.ts b/packages/grafana-data/src/types/dataFrame.ts index d634ab11e6c..c96af483685 100644 --- a/packages/grafana-data/src/types/dataFrame.ts +++ b/packages/grafana-data/src/types/dataFrame.ts @@ -34,6 +34,20 @@ export interface FieldConfig { */ displayNameFromDS?: string; + /** + * Human readable field metadata + */ + description?: string; + + /** + * An explict path to the field in the datasource. When the frame meta includes a path, + * This will default to `${frame.meta.path}/${field.name} + * + * When defined, this value can be used as an identifier within the datasource scope, and + * may be used to update the results + */ + path?: string; + /** * True if data source field supports ad-hoc filters */ diff --git a/packages/grafana-ui/src/components/uPlot/config.ts b/packages/grafana-ui/src/components/uPlot/config.ts index a091d67e221..5b0518c0f07 100644 --- a/packages/grafana-ui/src/components/uPlot/config.ts +++ b/packages/grafana-ui/src/components/uPlot/config.ts @@ -28,6 +28,9 @@ export enum LineInterpolation { StepAfter = 'stepAfter', } +/** + * @alpha + */ export interface LineConfig { lineColor?: string; lineWidth?: number; @@ -35,11 +38,17 @@ export interface LineConfig { spanNulls?: boolean; } +/** + * @alpha + */ export interface AreaConfig { fillColor?: string; fillOpacity?: number; } +/** + * @alpha + */ export interface PointsConfig { showPoints?: PointVisibility; pointSize?: number; @@ -54,6 +63,9 @@ export interface AxisConfig { axisWidth?: number; // pixels ideally auto? } +/** + * @alpha + */ export interface GraphFieldConfig extends LineConfig, AreaConfig, PointsConfig, AxisConfig { drawStyle?: DrawStyle; } diff --git a/packages/grafana-ui/src/components/uPlot/plugins/AnnotationsEditorPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/AnnotationsEditorPlugin.tsx index 524235b103e..b4a1b141cca 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/AnnotationsEditorPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/AnnotationsEditorPlugin.tsx @@ -8,6 +8,9 @@ interface AnnotationsEditorPluginProps { onAnnotationCreate: () => void; } +/** + * @alpha + */ export const AnnotationsEditorPlugin: React.FC = ({ onAnnotationCreate }) => { const pluginId = 'AnnotationsEditorPlugin'; diff --git a/packages/grafana-ui/src/components/uPlot/plugins/ClickPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/ClickPlugin.tsx index b6927f3d08a..41bdd3b639e 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/ClickPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/ClickPlugin.tsx @@ -18,6 +18,9 @@ interface ClickPluginAPI { clearSelection: () => void; } +/** + * @alpha + */ interface ClickPluginProps extends PlotPluginProps { onClick: (e: { seriesIdx: number | null; dataIdx: number | null }) => void; children: (api: ClickPluginAPI) => React.ReactElement | null; diff --git a/packages/grafana-ui/src/components/uPlot/plugins/ContextMenuPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/ContextMenuPlugin.tsx index 4b723f11ce9..2334b1b1f03 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/ContextMenuPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/ContextMenuPlugin.tsx @@ -9,6 +9,9 @@ interface ContextMenuPluginProps { onClose?: () => void; } +/** + * @alpha + */ export const ContextMenuPlugin: React.FC = ({ onClose }) => { const [isOpen, setIsOpen] = useState(false); diff --git a/packages/grafana-ui/src/components/uPlot/plugins/CursorPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/CursorPlugin.tsx index 81b6dd025ad..96d85d00776 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/CursorPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/CursorPlugin.tsx @@ -30,7 +30,11 @@ interface Coords { y: number; } -// Exposes API for Graph cursor position +/** + * Exposes API for Graph cursor position + * + * @alpha + */ export const CursorPlugin: React.FC = ({ id, children, capture = 'mousemove', lock = false }) => { const pluginId = `CursorPlugin:${id}`; const plotCanvas = useRef(null); diff --git a/packages/grafana-ui/src/components/uPlot/plugins/SelectionPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/SelectionPlugin.tsx index eff8b96a341..285568f98e0 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/SelectionPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/SelectionPlugin.tsx @@ -30,6 +30,9 @@ interface SelectionPluginProps extends PlotPluginProps { children?: (api: SelectionPluginAPI) => JSX.Element; } +/** + * @alpha + */ export const SelectionPlugin: React.FC = ({ onSelect, onDismiss, lazy, id, children }) => { const pluginId = `SelectionPlugin:${id}`; const plotCtx = usePlotContext(); diff --git a/packages/grafana-ui/src/components/uPlot/plugins/TooltipPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/TooltipPlugin.tsx index feed5e7fd4d..7f3948d5707 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/TooltipPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/TooltipPlugin.tsx @@ -12,6 +12,9 @@ interface TooltipPluginProps { timeZone: TimeZone; } +/** + * @alpha + */ export const TooltipPlugin: React.FC = ({ mode = 'single', timeZone }) => { const pluginId = 'PlotTooltip'; const plotContext = usePlotContext(); diff --git a/packages/grafana-ui/src/components/uPlot/plugins/ZoomPlugin.tsx b/packages/grafana-ui/src/components/uPlot/plugins/ZoomPlugin.tsx index b477af506c3..29e97293f94 100644 --- a/packages/grafana-ui/src/components/uPlot/plugins/ZoomPlugin.tsx +++ b/packages/grafana-ui/src/components/uPlot/plugins/ZoomPlugin.tsx @@ -8,6 +8,9 @@ interface ZoomPluginProps { // min px width that triggers zoom const MIN_ZOOM_DIST = 5; +/** + * @alpha + */ export const ZoomPlugin: React.FC = ({ onZoom }) => { return (