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:
kay delaney 2019-06-12 14:14:39 +01:00 committed by GitHub
parent 2a47c315df
commit 0a3af385e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 0 deletions

View File

@ -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);
});
});
});

View File

@ -19,6 +19,19 @@ export interface State {
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> {
templateSrv: TemplateSrv = new TemplateSrv();
state: State = { measurements: [], measurement: null, field: null };
@ -77,6 +90,11 @@ export class InfluxLogsQueryField extends React.PureComponent<Props, State> {
);
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() {