{"version":3,"file":"grafanaPlugin.4ea3756094d415ba97ab.js","mappings":"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","sources":["webpack://grafana/./public/app/plugins/datasource/grafana/components/SearchEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana/components/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana/module.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport { InlineField, Input, InlineFieldRow, CodeEditor } from '@grafana/ui';\nimport { SearchQuery } from 'app/features/search/service';\n\ninterface Props {\n value: SearchQuery;\n onChange: (value: SearchQuery) => void;\n}\n\nexport default function SearchEditor({ value, onChange }: Props) {\n const [json, setJSON] = useState('');\n const [query, setQuery] = useState(value.query ?? '');\n\n useEffect(() => {\n const emptySearchQuery: SearchQuery = {\n query: '*',\n location: '', // general, etc\n ds_uid: '',\n sort: '',\n tags: [],\n kind: [],\n explain: false,\n facet: [{ field: 'kind' }, { field: 'tags' }],\n from: 0,\n limit: 20,\n };\n\n setJSON(JSON.stringify({ ...emptySearchQuery, ...value }, null, 2));\n }, [value]);\n\n const handleSearchBlur = (e: React.FocusEvent) => {\n if (query !== value.query) {\n onChange({ ...value, query });\n }\n };\n\n const handleSearchEnterKey = (e: React.KeyboardEvent) => {\n if (e.key !== 'Enter') {\n return;\n }\n handleSearchBlur(e as any);\n };\n\n const onSaveSearchJSON = (rawSearchJSON: string) => {\n try {\n const searchQuery = JSON.parse(rawSearchJSON) as SearchQuery;\n onChange(searchQuery);\n setQuery(searchQuery.query ?? '');\n } catch (ex) {\n console.log('UNABLE TO parse search', rawSearchJSON, ex);\n }\n };\n\n return (\n <>\n \n \n setQuery(e.currentTarget.value)}\n onKeyDown={handleSearchEnterKey}\n onBlur={handleSearchBlur}\n spellCheck={false}\n />\n \n \n \n \n );\n}\n","import { css } from '@emotion/css';\nimport pluralize from 'pluralize';\nimport React, { PureComponent } from 'react';\nimport { DropEvent, FileRejection } from 'react-dropzone';\n\nimport {\n QueryEditorProps,\n SelectableValue,\n dataFrameFromJSON,\n rangeUtil,\n DataQueryRequest,\n DataFrame,\n DataFrameJSON,\n dataFrameToJSON,\n GrafanaTheme2,\n getValueFormat,\n formattedValueToString,\n} from '@grafana/data';\nimport { config, getBackendSrv, getDataSourceSrv, reportInteraction } from '@grafana/runtime';\nimport {\n InlineField,\n Select,\n Alert,\n Input,\n InlineFieldRow,\n InlineLabel,\n FileDropzone,\n FileDropzoneDefaultChildren,\n DropzoneFile,\n Themeable2,\n withTheme2,\n} from '@grafana/ui';\nimport { hasAlphaPanels } from 'app/core/config';\nimport * as DFImport from 'app/features/dataframe-import';\nimport { SearchQuery } from 'app/features/search/service';\n\nimport { GrafanaDatasource } from '../datasource';\nimport { defaultQuery, GrafanaQuery, GrafanaQueryType } from '../types';\n\nimport SearchEditor from './SearchEditor';\n\ninterface Props extends QueryEditorProps, Themeable2 {}\n\nconst labelWidth = 12;\n\ninterface State {\n channels: Array>;\n channelFields: Record>>;\n folders?: Array>;\n}\n\nexport class UnthemedQueryEditor extends PureComponent {\n state: State = { channels: [], channelFields: {} };\n\n queryTypes: Array> = [\n {\n label: 'Random Walk',\n value: GrafanaQueryType.RandomWalk,\n description: 'Random signal within the selected time range',\n },\n {\n label: 'Live Measurements',\n value: GrafanaQueryType.LiveMeasurements,\n description: 'Stream real-time measurements from Grafana',\n },\n {\n label: 'List public files',\n value: GrafanaQueryType.List,\n description: 'Show directory listings for public resources',\n },\n ];\n\n constructor(props: Props) {\n super(props);\n\n if (config.featureToggles.panelTitleSearch && hasAlphaPanels) {\n this.queryTypes.push({\n label: 'Search',\n value: GrafanaQueryType.Search,\n description: 'Search for grafana resources',\n });\n }\n if (config.featureToggles.editPanelCSVDragAndDrop) {\n this.queryTypes.push({\n label: 'Spreadsheet or snapshot',\n value: GrafanaQueryType.Snapshot,\n description: 'Query an uploaded spreadsheet or a snapshot',\n });\n }\n }\n\n loadChannelInfo() {\n getBackendSrv()\n .fetch({ url: 'api/live/list' })\n .subscribe({\n next: (v: any) => {\n const channelInfo = v.data?.channels as any[];\n if (channelInfo?.length) {\n const channelFields: Record>> = {};\n const channels: Array> = channelInfo.map((c) => {\n if (c.data) {\n const distinctFields = new Set();\n const frame = dataFrameFromJSON(c.data);\n for (const f of frame.fields) {\n distinctFields.add(f.name);\n }\n channelFields[c.channel] = Array.from(distinctFields).map((n) => ({\n value: n,\n label: n,\n }));\n }\n return {\n value: c.channel,\n label: c.channel + ' [' + c.minute_rate + ' msg/min]',\n };\n });\n\n this.setState({ channelFields, channels });\n }\n },\n });\n }\n\n loadFolderInfo() {\n const query: DataQueryRequest = {\n targets: [{ queryType: GrafanaQueryType.List, refId: 'A' }],\n } as any;\n\n getDataSourceSrv()\n .get('-- Grafana --')\n .then((ds) => {\n const gds = ds as GrafanaDatasource;\n gds.query(query).subscribe({\n next: (rsp) => {\n if (rsp.data.length) {\n const names = (rsp.data[0] as DataFrame).fields[0];\n const folders = names.values.map((v) => ({\n value: v,\n label: v,\n }));\n this.setState({ folders });\n }\n },\n });\n });\n }\n\n componentDidMount() {\n this.loadChannelInfo();\n }\n\n onQueryTypeChange = (sel: SelectableValue) => {\n const { onChange, query, onRunQuery } = this.props;\n onChange({ ...query, queryType: sel.value! });\n onRunQuery();\n\n // Reload the channel list\n this.loadChannelInfo();\n };\n\n onChannelChange = (sel: SelectableValue) => {\n const { onChange, query, onRunQuery } = this.props;\n onChange({ ...query, channel: sel?.value });\n onRunQuery();\n };\n\n onFieldNamesChange = (item: SelectableValue) => {\n const { onChange, query, onRunQuery } = this.props;\n let fields: string[] = [];\n if (Array.isArray(item)) {\n fields = item.map((v) => v.value);\n } else if (item.value) {\n fields = [item.value];\n }\n\n // When adding the first field, also add time (if it exists)\n if (fields.length === 1 && !query.filter?.fields?.length && query.channel) {\n const names = this.state.channelFields[query.channel] ?? [];\n const tf = names.find((f) => f.value === 'time' || f.value === 'Time');\n if (tf && tf.value && tf.value !== fields[0]) {\n fields = [tf.value, ...fields];\n }\n }\n\n onChange({\n ...query,\n filter: {\n ...query.filter,\n fields,\n },\n });\n onRunQuery();\n };\n\n checkAndUpdateValue = (key: keyof GrafanaQuery, txt: string) => {\n const { onChange, query, onRunQuery } = this.props;\n if (key === 'buffer') {\n let buffer: number | undefined;\n if (txt) {\n try {\n buffer = rangeUtil.intervalToSeconds(txt) * 1000;\n } catch (err) {\n console.warn('ERROR', err);\n }\n }\n onChange({\n ...query,\n buffer,\n });\n } else {\n onChange({\n ...query,\n [key]: txt,\n });\n }\n onRunQuery();\n };\n\n handleEnterKey = (e: React.KeyboardEvent) => {\n if (e.key !== 'Enter') {\n return;\n }\n this.checkAndUpdateValue('buffer', e.currentTarget.value);\n };\n\n handleBlur = (e: React.FocusEvent) => {\n this.checkAndUpdateValue('buffer', e.currentTarget.value);\n };\n\n renderMeasurementsQuery() {\n let { channel, filter, buffer } = this.props.query;\n let { channels, channelFields } = this.state;\n let currentChannel = channels.find((c) => c.value === channel);\n if (channel && !currentChannel) {\n currentChannel = {\n value: channel,\n label: channel,\n description: `Connected to ${channel}`,\n };\n channels = [currentChannel, ...channels];\n }\n\n const distinctFields = new Set();\n const fields: Array> = channel ? channelFields[channel] ?? [] : [];\n // if (data && data.series?.length) {\n // for (const frame of data.series) {\n // for (const field of frame.fields) {\n // if (distinctFields.has(field.name) || !field.name) {\n // continue;\n // }\n // fields.push({\n // value: field.name,\n // label: field.name,\n // description: `(${getFrameDisplayName(frame)} / ${field.type})`,\n // });\n // distinctFields.add(field.name);\n // }\n // }\n // }\n if (filter?.fields) {\n for (const f of filter.fields) {\n if (!distinctFields.has(f)) {\n fields.push({\n value: f,\n label: `${f} (not loaded)`,\n description: `Configured, but not found in the query results`,\n });\n distinctFields.add(f);\n }\n }\n }\n\n let formattedTime = '';\n if (buffer) {\n formattedTime = rangeUtil.secondsToHms(buffer / 1000);\n }\n\n return (\n <>\n
\n \n `Connect to: ${input}`}\n />\n \n
\n {channel && (\n
\n \n `Field: ${input}`}\n isSearchable={true}\n isMulti={true}\n />\n \n \n \n \n
\n )}\n\n \n This supports real-time event streams in Grafana core. This feature is under heavy development. Expect the\n interfaces and structures to change as this becomes more production ready.\n \n \n );\n }\n\n onFolderChanged = (sel: SelectableValue) => {\n const { onChange, query, onRunQuery } = this.props;\n onChange({ ...query, path: sel?.value });\n onRunQuery();\n };\n\n renderListPublicFiles() {\n let { path } = this.props.query;\n let { folders } = this.state;\n if (!folders) {\n folders = [];\n this.loadFolderInfo();\n }\n const currentFolder = folders.find((f) => f.value === path);\n if (path && !currentFolder) {\n folders = [\n ...folders,\n {\n value: path,\n label: path,\n },\n ];\n }\n\n return (\n \n \n `Folder: ${input}`}\n />\n \n \n );\n }\n\n // Skip rendering the file list as we're handling that in this component instead.\n fileListRenderer = (file: DropzoneFile, removeFile: (file: DropzoneFile) => void) => {\n return null;\n };\n\n onFileDrop = (acceptedFiles: File[], fileRejections: FileRejection[], event: DropEvent) => {\n DFImport.filesToDataframes(acceptedFiles).subscribe((next) => {\n const snapshot: DataFrameJSON[] = [];\n next.dataFrames.forEach((df) => {\n const dataframeJson = dataFrameToJSON(df);\n snapshot.push(dataframeJson);\n });\n this.props.onChange({\n ...this.props.query,\n file: { name: next.file.name, size: next.file.size },\n queryType: GrafanaQueryType.Snapshot,\n snapshot,\n });\n this.props.onRunQuery();\n\n reportInteraction('grafana_datasource_drop_files', {\n number_of_files: fileRejections.length + acceptedFiles.length,\n accepted_files: acceptedFiles.map((a) => {\n return { type: a.type, size: a.size };\n }),\n rejected_files: fileRejections.map((r) => {\n return { type: r.file.type, size: r.file.size };\n }),\n });\n });\n };\n\n renderSnapshotQuery() {\n const { query, theme } = this.props;\n const file = query.file;\n const styles = getStyles(theme);\n const fileSize = getValueFormat('decbytes')(file ? file.size : 0);\n\n return (\n <>\n \n \n {pluralize('frame', query.snapshot?.length ?? 0, true)}\n \n \n {config.featureToggles.editPanelCSVDragAndDrop && (\n <>\n \n \n \n {file && (\n
\n {file?.name}\n \n {formattedValueToString(fileSize)}\n \n
\n )}\n \n )}\n \n );\n }\n\n onSearchChange = (search: SearchQuery) => {\n const { query, onChange, onRunQuery } = this.props;\n\n onChange({\n ...query,\n search,\n });\n onRunQuery();\n };\n\n render() {\n const query = {\n ...defaultQuery,\n ...this.props.query,\n };\n\n const { queryType } = query;\n\n // Only show \"snapshot\" when it already exists\n let queryTypes = this.queryTypes;\n if (queryType === GrafanaQueryType.Snapshot && !config.featureToggles.editPanelCSVDragAndDrop) {\n queryTypes = [\n ...this.queryTypes,\n {\n label: 'Snapshot',\n value: queryType,\n },\n ];\n }\n\n return (\n <>\n {queryType === GrafanaQueryType.Search && (\n \n Using this datasource to call the new search system is experimental, and subject to change at any time\n without notice.\n \n )}\n \n \n v.value === queryType) || queryTypes[0]}\n onChange={this.onQueryTypeChange}\n />\n \n \n {queryType === GrafanaQueryType.LiveMeasurements && this.renderMeasurementsQuery()}\n {queryType === GrafanaQueryType.List && this.renderListPublicFiles()}\n {queryType === GrafanaQueryType.Snapshot && this.renderSnapshotQuery()}\n {queryType === GrafanaQueryType.Search && (\n \n )}\n \n );\n }\n}\n\nexport const QueryEditor = withTheme2(UnthemedQueryEditor);\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n file: css`\n width: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: ${theme.spacing(2)};\n border: 1px dashed ${theme.colors.border.medium};\n background-color: ${theme.colors.background.secondary};\n margin-top: ${theme.spacing(1)};\n `,\n };\n}\n","import { DataSourcePlugin } from '@grafana/data';\n\nimport { QueryEditor } from './components/QueryEditor';\nimport { GrafanaDatasource } from './datasource';\nimport { GrafanaQuery } from './types';\n\nexport const plugin = new DataSourcePlugin(GrafanaDatasource).setQueryEditor(\n QueryEditor\n);\n"],"names":["SearchEditor","value","onChange","json","setJSON","query","setQuery","handleSearchBlur","e","handleSearchEnterKey","onSaveSearchJSON","rawSearchJSON","searchQuery","ex","InlineFieldRow","InlineField","Input","CodeEditor","labelWidth","UnthemedQueryEditor","props","sel","onRunQuery","item","fields","v","tf","f","key","txt","buffer","err","file","removeFile","acceptedFiles","fileRejections","event","next","snapshot","df","dataframeJson","a","r","search","config","channelInfo","channelFields","channels","c","distinctFields","frame","n","ds","rsp","folders","channel","filter","currentChannel","formattedTime","Select","input","Alert","path","currentFolder","theme","styles","getStyles","fileSize","InlineLabel","FileDropzone","queryType","queryTypes","QueryEditor"],"sourceRoot":""}