mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Explore: Runs query when measurement/field and pairs are selected in logs mode for influx (#17523)
* Explore: Runs query when measurement/field and pairs are select in logs mode for influx Closes #17500 * Explore: Modifies logic determining when to auto-run query during influx logs mode Also adds test to validate this logic
This commit is contained in:
@@ -0,0 +1,53 @@
|
|||||||
|
import { pairsAreValid } from './InfluxLogsQueryField';
|
||||||
|
|
||||||
|
describe('pairsAreValid()', () => {
|
||||||
|
describe('when all pairs are fully defined', () => {
|
||||||
|
it('should return true', () => {
|
||||||
|
const pairs = [
|
||||||
|
{
|
||||||
|
key: 'a',
|
||||||
|
operator: '=',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'b',
|
||||||
|
operator: '!=',
|
||||||
|
value: '2',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
expect(pairsAreValid(pairs as any)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when no pairs are defined at all', () => {
|
||||||
|
it('should return true', () => {
|
||||||
|
expect(pairsAreValid([])).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when pairs are undefined', () => {
|
||||||
|
it('should return true', () => {
|
||||||
|
expect(pairsAreValid(undefined)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when one or more pairs are only partially defined', () => {
|
||||||
|
it('should return false', () => {
|
||||||
|
const pairs = [
|
||||||
|
{
|
||||||
|
key: 'a',
|
||||||
|
operator: undefined,
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'b',
|
||||||
|
operator: '!=',
|
||||||
|
value: '2',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
expect(pairsAreValid(pairs as any)).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -19,6 +19,19 @@ export interface State {
|
|||||||
field: string;
|
field: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper function for determining if a collection of pairs are valid
|
||||||
|
// where a valid pair is either fully defined, or not defined at all, but not partially defined
|
||||||
|
export function pairsAreValid(pairs: KeyValuePair[]) {
|
||||||
|
return (
|
||||||
|
!pairs ||
|
||||||
|
pairs.every(pair => {
|
||||||
|
const allDefined = !!(pair.key && pair.operator && pair.value);
|
||||||
|
const allEmpty = pair.key === undefined && pair.operator === undefined && pair.value === undefined;
|
||||||
|
return allDefined || allEmpty;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export class InfluxLogsQueryField extends React.PureComponent<Props, State> {
|
export class InfluxLogsQueryField extends React.PureComponent<Props, State> {
|
||||||
templateSrv: TemplateSrv = new TemplateSrv();
|
templateSrv: TemplateSrv = new TemplateSrv();
|
||||||
state: State = { measurements: [], measurement: null, field: null };
|
state: State = { measurements: [], measurement: null, field: null };
|
||||||
@@ -77,6 +90,11 @@ export class InfluxLogsQueryField extends React.PureComponent<Props, State> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
this.props.onChange(queryModel.target);
|
this.props.onChange(queryModel.target);
|
||||||
|
|
||||||
|
// Only run the query if measurement & field are set, and there are no invalid pairs
|
||||||
|
if (measurement && field && pairsAreValid(pairs)) {
|
||||||
|
this.props.onRunQuery();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|||||||
Reference in New Issue
Block a user