Skip to content

Commit

Permalink
Changed Explorer Data Grid useage of timestamp (#1479)
Browse files Browse the repository at this point in the history
* add support to use timestamp from set default

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* update data grid test and snap

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* direct query now sets default timestamp using same logic

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* small linting complaints

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* appeasing lint pt2

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* implement i18n for column names

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* using timestamp prop

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* add test with different user timestamp

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* remove console log

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

* direct search to use i18n translate

Signed-off-by: Paul Sebastian <paulstn@amazon.com>

---------

Signed-off-by: Paul Sebastian <paulstn@amazon.com>
  • Loading branch information
paulstn authored Mar 11, 2024
1 parent 41214c2 commit d17cad3
Show file tree
Hide file tree
Showing 6 changed files with 688 additions and 36 deletions.
2 changes: 1 addition & 1 deletion common/constants/explorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ export const TYPE_TAB_MAPPING = {
};

export const DEFAULT_EMPTY_EXPLORER_FIELDS = [
{ name: 'timestamp', type: 'timestamp' },
// timestamp field will be a default but is added after finding what it is
{ name: '_source', type: 'string' },
];

Expand Down
2 changes: 2 additions & 0 deletions common/constants/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,3 +265,5 @@ export const DIRECT_DUMMY_QUERY = 'select 1';
export const DEFAULT_START_TIME = 'now-15m';
export const QUERY_ASSIST_START_TIME = 'now-40y';
export const QUERY_ASSIST_END_TIME = 'now';

export const TIMESTAMP_DATETIME_TYPES = ['date', 'date_nanos'];
58 changes: 54 additions & 4 deletions public/components/common/search/direct_search.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,25 @@ import {
EuiPopoverFooter,
EuiToolTip,
} from '@elastic/eui';
import { isEqual } from 'lodash';
import { isEmpty, isEqual } from 'lodash';
import React, { useEffect, useState } from 'react';
import { batch, useDispatch, useSelector } from 'react-redux';
import { ASYNC_POLLING_INTERVAL, QUERY_LANGUAGE } from '../../../../common/constants/data_sources';
import { APP_ANALYTICS_TAB_ID_REGEX, RAW_QUERY } from '../../../../common/constants/explorer';
import { PPL_NEWLINE_REGEX, PPL_SPAN_REGEX } from '../../../../common/constants/shared';
import { DirectQueryLoadingStatus, DirectQueryRequest } from '../../../../common/types/explorer';
import {
APP_ANALYTICS_TAB_ID_REGEX,
RAW_QUERY,
SELECTED_TIMESTAMP,
} from '../../../../common/constants/explorer';
import {
PPL_NEWLINE_REGEX,
PPL_SPAN_REGEX,
TIMESTAMP_DATETIME_TYPES,
} from '../../../../common/constants/shared';
import {
DirectQueryLoadingStatus,
DirectQueryRequest,
IDefaultTimestampState,
} from '../../../../common/types/explorer';
import { uiSettingsService } from '../../../../common/utils';
import { getAsyncSessionId, setAsyncSessionId } from '../../../../common/utils/query_session_utils';
import { get as getObjValue } from '../../../../common/utils/shared';
Expand All @@ -42,6 +54,7 @@ import { formatError } from '../../event_analytics/utils';
import { usePolling } from '../../hooks/use_polling';
import { PPLReferenceFlyout } from '../helpers';
import { Autocomplete } from './autocomplete';
import { i18n } from '@osd/i18n';
export interface IQueryBarProps {
query: string;
tempQuery: string;
Expand Down Expand Up @@ -250,6 +263,33 @@ export const DirectSearch = (props: any) => {
});
};

const getDirectQueryTimestamp = (schema: Array<{ name: string; type: string }>) => {
const timestamp: IDefaultTimestampState = {
hasSchemaConflict: false, // schema conflict bool used for OS index w/ different mappings, not needed here
default_timestamp: '',
message: i18n.translate(`discover.events.directQuery.noTimeStampFoundMessage`, {
defaultMessage: 'Index does not contain a valid time field.',
}),
};

for (let i = 0; i < schema.length; i++) {
const fieldMapping = schema[i];
if (!isEmpty(fieldMapping)) {
const fieldName = fieldMapping.name;
const fieldType = fieldMapping.type;
const isValidTimeType = TIMESTAMP_DATETIME_TYPES.some((dateTimeType) =>
isEqual(fieldType, dateTimeType)
);
if (isValidTimeType && isEmpty(timestamp.default_timestamp)) {
timestamp.default_timestamp = fieldName;
timestamp.message = '';
break;
}
}
}
return timestamp;
};

useEffect(() => {
// cancel direct query
if (!pollingResult) return;
Expand All @@ -258,6 +298,16 @@ export const DirectSearch = (props: any) => {

if (status === DirectQueryLoadingStatus.SUCCESS || datarows) {
stopPollingWithStatus(status);
// find the timestamp from results
const derivedTimestamp = getDirectQueryTimestamp(pollingResult.schema);
dispatch(
changeQuery({
tabId,
query: {
[SELECTED_TIMESTAMP]: derivedTimestamp.default_timestamp,
},
})
);
// update page with data
dispatchOnGettingHis(pollingResult, '');
} else if (status === DirectQueryLoadingStatus.FAILED) {
Expand Down
Loading

0 comments on commit d17cad3

Please sign in to comment.