Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions public/components/event_analytics/explorer/explorer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,6 @@ export const Explorer = ({
<EuiHorizontalRule margin="xs" />
<LogPatterns
selectedIntervalUnit={selectedIntervalRef.current}
setTempQuery={setTempQuery}
handleTimeRangePickerRefresh={handleTimeRangePickerRefresh}
/>
</>
Expand Down Expand Up @@ -727,7 +726,7 @@ export const Explorer = ({
if (availability !== true) {
await updateQueryInStore(tempQuery);
}
await fetchData();
await fetchData(startTime, endTime);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you create an issue/discussion point regarding this change? I think with this change all instances of fetchdata will be called with startTime/endTime, so we can remove the dependency on startTime/endTime from the query in redux - or vice versa. In my opinion it is bad to have two references/sources of truth to anything (timerange/patterns, etc.), so either we should remove it from the redux query if it is not being used, or only rely on time from query in redux - not both @mengweieric thoughts?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed with an issue to track and document this and to have a consistent way of set time range in both app and explorer sides. We may want to remove explicit start/end time dependency for explorer and instead, dispatch timerange to app query state. This only does the trick to make it work but would potentially cause more issues and bugs

},
[tempQuery, query]
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiLink, EuiText } from '@elastic/eui';
import React, { useContext, useState } from 'react';
import React, { useContext, useEffect, useState } from 'react';
import { connect, useDispatch } from 'react-redux';
import {
FILTERED_PATTERN,
Expand All @@ -25,15 +25,13 @@ export interface LogPatternProps {
text: string;
value: string;
};
setTempQuery: () => string;
handleTimeRangePickerRefresh: (flag: boolean) => {};
patterns: PatternTableData[];
query: IQuery;
}

const EventPatterns = ({
selectedIntervalUnit,
setTempQuery,
handleTimeRangePickerRefresh,
patterns,
query,
Expand All @@ -49,21 +47,35 @@ const EventPatterns = ({
requestParams: { tabId },
});

// refresh patterns on opening page
useEffect(() => {
getPatterns(selectedIntervalUnit?.value?.replace(/^auto_/, '') || 'y');
}, []);

const onPatternSelection = async (pattern: string) => {
if (query[FILTERED_PATTERN] === pattern) {
return;
}
dispatch(
// await here allows react to render update properly and display it.
// it forces the query to be changed before running it, without await the visual wont update.
await dispatch(

@derek-ho derek-ho Jun 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a comment here on why this works and also remove the commented out tempQuery and its comment to reduce tech debt going forward? Why did await work on a dispatch call even though the IDE is saying it has no effect, why do we not need to worry about tempquery anymore, etc.?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changeQuery({
tabId,
query: {
[FILTERED_PATTERN]: pattern,
},
})
);
// workaround to refresh callback and trigger fetch data
await setTempQuery(query[RAW_QUERY]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment here about the tempquery - can we remove it all together? If it is necessary can we consolidate it into the query in redux instead of having a separate useState variable?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed tempQuery from log patterns, It is still used in explorer to handle query searches and changes.

await handleTimeRangePickerRefresh(true);
handleTimeRangePickerRefresh(true);
// after rendering the patterns visual, we want the pattern to be reset for future searches
await dispatch(
changeQuery({
tabId,
query: {
[FILTERED_PATTERN]: '',
},
})
);
};

const showToastError = (errorMsg: string) => {
Expand Down
17 changes: 6 additions & 11 deletions public/services/data_fetchers/ppl/ppl_data_fetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export class PPLDataFetcher extends DataFetcherBase implements IDataFetcher {
} = this.searchContext;
const { dispatch, changeQuery } = this.storeContext;

await this.processTimestamp(query, appBaseQuery);
await this.processTimestamp(query);
if (isEmpty(this.timestamp)) return;

const curStartTime = startingTime || this.query[SELECTED_DATE_RANGE][0];
Expand All @@ -103,7 +103,7 @@ export class PPLDataFetcher extends DataFetcherBase implements IDataFetcher {
);

// update UI with new query state
await this.updateQueryState(this.query[RAW_QUERY], finalQuery, this.timestamp, appBaseQuery);
await this.updateQueryState(this.query[RAW_QUERY], finalQuery, this.timestamp);
// calculate proper time interval for count distribution
if (!selectedInterval.current || selectedInterval.current.text === 'Auto') {
findAutoInterval(curStartTime, curEndTime);
Expand Down Expand Up @@ -158,8 +158,8 @@ export class PPLDataFetcher extends DataFetcherBase implements IDataFetcher {
}
}

async processTimestamp(query: IQuery, appBaseQuery: string) {
if (query[SELECTED_TIMESTAMP] && appBaseQuery === '') {
async processTimestamp(query: IQuery) {
if (query[SELECTED_TIMESTAMP]) {
this.timestamp = query[SELECTED_TIMESTAMP];
} else {
await this.setTimestamp(this.queryIndex);
Expand All @@ -175,12 +175,7 @@ export class PPLDataFetcher extends DataFetcherBase implements IDataFetcher {
return await timestampUtils.getTimestamp(indexPattern);
}

async updateQueryState(
rawQuery: string,
finalQuery: string,
curTimestamp: string,
appBaseQuery: string
) {
async updateQueryState(rawQuery: string, finalQuery: string, curTimestamp: string) {
const { batch, dispatch, changeQuery, changeVizConfig } = this.storeContext;
const { query } = this.searchParams;
const {
Expand All @@ -197,7 +192,7 @@ export class PPLDataFetcher extends DataFetcherBase implements IDataFetcher {
tabId,
query: {
finalQuery,
[RAW_QUERY]: buildRawQuery(query, appBaseQuery),
[RAW_QUERY]: query.rawQuery,
[SELECTED_TIMESTAMP]: curTimestamp,
},
})
Expand Down