import { css } from '@emotion/css'; import React from 'react'; import { DataSourceJsonData, DataSourcePluginOptionsEditorProps, GrafanaTheme, KeyValue, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; import { DataSourcePicker } from '@grafana/runtime'; import { Button, InlineField, InlineFieldRow, Input, useStyles } from '@grafana/ui'; import KeyValueInput from '../TraceToLogs/KeyValueInput'; export interface TraceToMetricsOptions { datasourceUid?: string; tags?: Array>; queries: TraceToMetricQuery[]; } export interface TraceToMetricQuery { name?: string; query?: string; } export interface TraceToMetricsData extends DataSourceJsonData { tracesToMetrics?: TraceToMetricsOptions; } interface Props extends DataSourcePluginOptionsEditorProps {} export function TraceToMetricsSettings({ options, onOptionsChange }: Props) { const styles = useStyles(getStyles); return (

Trace to metrics

Trace to metrics lets you navigate from a trace span to the selected data source.
updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', { ...options.jsonData.tracesToMetrics, datasourceUid: ds.uid, }) } /> {options.jsonData.tracesToMetrics?.datasourceUid ? ( ) : null} updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', { ...options.jsonData.tracesToMetrics, tags: v, }) } /> {options.jsonData.tracesToMetrics?.queries?.map((query, i) => (
{ let newQueries = options.jsonData.tracesToMetrics?.queries.slice() ?? []; newQueries[i].name = e.currentTarget.value; updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', { ...options.jsonData.tracesToMetrics, queries: newQueries, }); }} /> { let newQueries = options.jsonData.tracesToMetrics?.queries.slice() ?? []; newQueries[i].query = e.currentTarget.value; updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', { ...options.jsonData.tracesToMetrics, queries: newQueries, }); }} />
))}
); } const getStyles = (theme: GrafanaTheme) => ({ infoText: css` padding-bottom: ${theme.spacing.md}; color: ${theme.colors.textSemiWeak}; `, row: css` label: row; align-items: baseline; `, queryRow: css` display: flex; `, });