import { css } from '@emotion/css'; import { DataSourceJsonData, DataSourcePluginOptionsEditorProps, GrafanaTheme, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; import { DataSourcePicker } from '@grafana/runtime'; import { InlineField, InlineFieldRow, Input, TagsInput, useStyles, InlineSwitch } from '@grafana/ui'; import React from 'react'; export interface TraceToLogsOptions { datasourceUid?: string; tags?: string[]; spanStartTimeShift?: string; spanEndTimeShift?: string; filterByTraceID?: boolean; filterBySpanID?: boolean; lokiSearch?: boolean; } export interface TraceToLogsData extends DataSourceJsonData { tracesToLogs?: TraceToLogsOptions; } interface Props extends DataSourcePluginOptionsEditorProps {} export function TraceToLogsSettings({ options, onOptionsChange }: Props) { const styles = useStyles(getStyles); return (

Trace to logs

Trace to logs let's you navigate from a trace span to the selected data source's log.
updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { datasourceUid: ds.uid, tags: options.jsonData.tracesToLogs?.tags, }) } /> updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { datasourceUid: options.jsonData.tracesToLogs?.datasourceUid, tags: tags, }) } /> updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { ...options.jsonData.tracesToLogs, spanStartTimeShift: v.currentTarget.value, }) } value={options.jsonData.tracesToLogs?.spanStartTimeShift || ''} /> updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { ...options.jsonData.tracesToLogs, spanEndTimeShift: v.currentTarget.value, }) } value={options.jsonData.tracesToLogs?.spanEndTimeShift || ''} /> ) => updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { ...options.jsonData.tracesToLogs, filterByTraceID: event.currentTarget.checked, }) } /> ) => updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { ...options.jsonData.tracesToLogs, filterBySpanID: event.currentTarget.checked, }) } /> ) => updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToLogs', { ...options.jsonData.tracesToLogs, lokiSearch: event.currentTarget.checked, }) } />
); } const getStyles = (theme: GrafanaTheme) => ({ infoText: css` padding-bottom: ${theme.spacing.md}; color: ${theme.colors.textSemiWeak}; `, });