Skip to content

Commit

Permalink
[ES|QL] Only log requests to Inspector on request complete (#191232)
Browse files Browse the repository at this point in the history
## Summary

Requires #191520.
Resolves #188266.

Prior to this PR, when polling on an async ES|QL request, we would log
the response to every polling request. This PR only logs when the
request is complete.

Before:


![image](https://github.com/user-attachments/assets/fe9a763d-ef43-4f46-a096-0e08e1805f47)

After:


![image](https://github.com/user-attachments/assets/5d59f016-8b0e-4a3f-b044-17b5de97739f)


### Checklist

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
([build](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6823))
  • Loading branch information
lukasolson authored Aug 29, 2024
1 parent ec0230b commit c71c0df
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/plugins/data/common/search/expressions/esql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ import { buildEsQuery, type Filter } from '@kbn/es-query';
import type { ESQLSearchParams, ESQLSearchResponse } from '@kbn/es-types';
import { getEsQueryConfig } from '../../es_query';
import { getTime } from '../../query';
import { ESQL_ASYNC_SEARCH_STRATEGY, ESQL_TABLE_TYPE, KibanaContext } from '..';
import {
ESQL_ASYNC_SEARCH_STRATEGY,
ESQL_TABLE_TYPE,
isRunningResponse,
type KibanaContext,
} from '..';
import { UiSettingsCommon } from '../..';

declare global {
Expand Down Expand Up @@ -251,7 +256,9 @@ export const getEsqlFn = ({ getStartDependencies }: EsqlFnArguments) => {
return throwError(() => error);
}),
tap({
next({ rawResponse, requestParams }) {
next(response) {
if (isRunningResponse(response)) return;
const { rawResponse, requestParams } = response;
logInspectorRequest()
.stats({
hits: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export class RequestSelector extends Component<RequestSelectorProps> {
}
>
<EuiBadge
data-test-subj="inspectorRequestTotalTime"
color={selectedRequest.status === RequestStatus.OK ? 'success' : 'danger'}
iconType={selectedRequest.status === RequestStatus.OK ? 'check' : 'cross'}
>
Expand Down
25 changes: 25 additions & 0 deletions test/functional/apps/discover/esql/_esql_view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,31 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(requestNames).to.contain('Visualization');
});
});

describe('with slow queries', () => {
it('should show only one entry in inspector for table/visualization', async function () {
await PageObjects.discover.selectTextBaseLang();
const testQuery = `from kibana_sample_data_flights | limit 10`;
await monacoEditor.setCodeEditorValue(testQuery);

await browser.execute(() => {
window.ELASTIC_ESQL_DELAY_SECONDS = 5;
});
await testSubjects.click('querySubmitButton');
await PageObjects.header.waitUntilLoadingHasFinished();
await browser.execute(() => {
window.ELASTIC_ESQL_DELAY_SECONDS = undefined;
});

await inspector.open();
const requestNames = (await inspector.getRequestNames()).split(',');
const requestTotalTime = await inspector.getRequestTotalTime();
expect(requestTotalTime).to.be.greaterThan(5000);
expect(requestNames.length).to.be(2);
expect(requestNames).to.contain('Table');
expect(requestNames).to.contain('Visualization');
});
});
});

describe('query history', () => {
Expand Down
5 changes: 5 additions & 0 deletions test/functional/services/inspector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -328,4 +328,9 @@ export class InspectorService extends FtrService {

return value === comboBoxOptions;
}

public async getRequestTotalTime() {
const [ms] = (await this.testSubjects.getVisibleText('inspectorRequestTotalTime')).split('ms');
return parseFloat(ms);
}
}

0 comments on commit c71c0df

Please sign in to comment.