Commit b712337a by David Committed by GitHub

Merge pull request #14693 from grafana/davkal/loki-single-query

Loki: change query row to be single field again
parents 75f9d173 32438c47
...@@ -3,22 +3,22 @@ import React from 'react'; ...@@ -3,22 +3,22 @@ import React from 'react';
const CHEAT_SHEET_ITEMS = [ const CHEAT_SHEET_ITEMS = [
{ {
title: 'See your logs', title: 'See your logs',
label: 'Start by selecting a log stream from the Log Labels selector.', label: 'Start by selecting a log stream from the Log labels selector.',
}, },
{ {
title: 'Logs From a Job', title: 'Logs from a "job"',
expression: '{job="default/prometheus"}', expression: '{job="default/prometheus"}',
label: 'Returns all log lines emitted by instances of this job.', label: 'Returns all log lines emitted by instances of this job.',
}, },
{ {
title: 'Combine Stream Selectors', title: 'Combine stream selectors',
expression: '{app="cassandra",namespace="prod"}', expression: '{app="cassandra",namespace="prod"}',
label: 'Returns all log lines from streams that have both labels.', label: 'Returns all log lines from streams that have both labels.',
}, },
{ {
title: 'Search For Text', title: 'Search for text',
expression: '{app="cassandra"} (duration|latency)\\s*(=|is|of)\\s*[\\d\\.]+', expression: '{app="cassandra"} (duration|latency)\\s*(=|is|of)\\s*[\\d\\.]+',
label: 'The right search field takes a regular expression to search for.', label: 'Add a regular expression after the selector to filter for.',
}, },
]; ];
......
...@@ -12,14 +12,18 @@ import BracesPlugin from 'app/features/explore/slate-plugins/braces'; ...@@ -12,14 +12,18 @@ import BracesPlugin from 'app/features/explore/slate-plugins/braces';
import RunnerPlugin from 'app/features/explore/slate-plugins/runner'; import RunnerPlugin from 'app/features/explore/slate-plugins/runner';
import QueryField, { TypeaheadInput, QueryFieldState } from 'app/features/explore/QueryField'; import QueryField, { TypeaheadInput, QueryFieldState } from 'app/features/explore/QueryField';
import { DataQuery } from 'app/types'; import { DataQuery } from 'app/types';
import { parseQuery, formatQuery } from '../query_utils';
const PRISM_SYNTAX = 'promql'; const PRISM_SYNTAX = 'promql';
const SEARCH_FIELD_STYLES = { function getChooserText(hasSytax, hasLogLabels) {
width: '66%', if (!hasSytax) {
marginLeft: 3, return 'Loading labels...';
}; }
if (!hasLogLabels) {
return '(No labels found)';
}
return 'Log labels';
}
export function willApplySuggestion(suggestion: string, { typeaheadContext, typeaheadText }: QueryFieldState): string { export function willApplySuggestion(suggestion: string, { typeaheadContext, typeaheadText }: QueryFieldState): string {
// Modify suggestion based on context // Modify suggestion based on context
...@@ -145,35 +149,12 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF ...@@ -145,35 +149,12 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF
}; };
onChangeQuery = (value: string, override?: boolean) => { onChangeQuery = (value: string, override?: boolean) => {
const enableSearchField = !this.modifiedQuery && value;
this.modifiedQuery = value;
// Send text change to parent
const { initialQuery, onQueryChange } = this.props;
if (onQueryChange) {
const search = this.modifiedSearch || parseQuery(initialQuery.expr).regexp;
const expr = formatQuery(value, search);
const query = {
...initialQuery,
expr,
};
onQueryChange(query, override);
}
// Enable the search field if we have a selector query
if (enableSearchField) {
this.forceUpdate();
}
};
onChangeSearch = (value: string, override?: boolean) => {
this.modifiedSearch = value;
// Send text change to parent // Send text change to parent
const { initialQuery, onQueryChange } = this.props; const { initialQuery, onQueryChange } = this.props;
if (onQueryChange) { if (onQueryChange) {
const selector = this.modifiedQuery || parseQuery(initialQuery.expr).query;
const expr = formatQuery(selector, value);
const query = { const query = {
...initialQuery, ...initialQuery,
expr, expr: value,
}; };
onQueryChange(query, override); onQueryChange(query, override);
} }
...@@ -223,10 +204,8 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF ...@@ -223,10 +204,8 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF
const { error, hint, initialQuery } = this.props; const { error, hint, initialQuery } = this.props;
const { logLabelOptions, syntaxLoaded } = this.state; const { logLabelOptions, syntaxLoaded } = this.state;
const cleanText = this.languageProvider ? this.languageProvider.cleanText : undefined; const cleanText = this.languageProvider ? this.languageProvider.cleanText : undefined;
const chooserText = syntaxLoaded ? 'Log labels' : 'Loading labels...'; const hasLogLabels = logLabelOptions && logLabelOptions.length > 0;
const parsedInitialQuery = parseQuery(initialQuery.expr); const chooserText = getChooserText(syntaxLoaded, hasLogLabels);
// Disable search field to make clear that we need a selector query first
const searchDisabled = !parsedInitialQuery.query && !this.modifiedQuery;
return ( return (
<div className="prom-query-field"> <div className="prom-query-field">
...@@ -241,11 +220,11 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF ...@@ -241,11 +220,11 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF
<QueryField <QueryField
additionalPlugins={this.plugins} additionalPlugins={this.plugins}
cleanText={cleanText} cleanText={cleanText}
initialQuery={parsedInitialQuery.query} initialQuery={initialQuery.expr}
onTypeahead={this.onTypeahead} onTypeahead={this.onTypeahead}
onWillApplySuggestion={willApplySuggestion} onWillApplySuggestion={willApplySuggestion}
onValueChanged={this.onChangeQuery} onValueChanged={this.onChangeQuery}
placeholder="Start with a Loki stream selector" placeholder="Enter a Loki query"
portalOrigin="loki" portalOrigin="loki"
syntaxLoaded={syntaxLoaded} syntaxLoaded={syntaxLoaded}
/> />
...@@ -261,16 +240,6 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF ...@@ -261,16 +240,6 @@ class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, LokiQueryF
</div> </div>
) : null} ) : null}
</div> </div>
<div className="prom-query-field-wrapper" style={SEARCH_FIELD_STYLES}>
<QueryField
additionalPlugins={this.pluginsSearch}
disabled={searchDisabled}
initialQuery={parsedInitialQuery.regexp}
onValueChanged={this.onChangeSearch}
placeholder="Search by regular expression"
portalOrigin="loki"
/>
</div>
</div> </div>
); );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment