Skip to content

Commit

Permalink
[8.7] Add date_nanos support to Time field (#151374) (#151724)
Browse files Browse the repository at this point in the history
# Backport

This will backport the following commits from `main` to `8.7`:
- [Add date_nanos support to Time field
(#151374)](#151374)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Ersin
Erdal","email":"[email protected]"},"sourceCommit":{"committedDate":"2023-02-21T15:25:09Z","message":"Add
date_nanos support to Time field (#151374)\n\nFixes: #145855
\r\n\r\n`Time field` in rule update/create forms shows only the fields
with\r\n`date` data type. This PR adds `date_nanos` type as
well.\r\n\r\n## To verify:\r\n\r\n- Create an index that has fields with
`date` and `date_nanos` types.\r\n```\r\nPUT test-index-date\r\n{\r\n
\"mappings\": {\r\n \"properties\": {\r\n \"date\": {\r\n \"type\":
\"date\"\r\n },\r\n \"timestamp\": {\r\n \"type\": \"date_nanos\"\r\n
}\r\n }\r\n }\r\n}\r\n```\r\n- Add data with `date` and `date_nanos`
data types\r\nNote: You can
use\r\nhttps://www.site24x7.com/tools/time-stamp-converter.html address
to\r\ngenerate date_nanos timestamps with a date you
desired.\r\n```\r\nPUT test-index-date/_bulk?refresh\r\n{ \"index\" : {
\"_id\" : \"1\" } }\r\n{ \"date\": \"2023-02-15T18:00:00.000Z\",
\"timestamp\": 1676480400000} \r\n{ \"index\" : { \"_id\" : \"2\" }
}\r\n{ \"date\": \"2023-02-15T18:00:00.000Z\", \"timestamp\":
1676480400000 } \r\n```\r\n- Open a Rule create form and select
`Elasticsearch query`\r\n- Select `Query DSL`\r\n- Click on `select an
index`\r\n- Type the above index name (test-index-date) in `Indices to
query`\r\ninput\r\n- Select `timestamp` from time field\r\n- Click on
`Test Query` button and expect to see `Query matched 2\r\ndocuments in
the last
5m.`","sha":"58204cf2a0fd2b921d5f5c3e138b725bce1c5229","branchLabelMapping":{"^v8.8.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:ResponseOps","v8.7.0","v8.8.0"],"number":151374,"url":"https://github.com/elastic/kibana/pull/151374","mergeCommit":{"message":"Add
date_nanos support to Time field (#151374)\n\nFixes: #145855
\r\n\r\n`Time field` in rule update/create forms shows only the fields
with\r\n`date` data type. This PR adds `date_nanos` type as
well.\r\n\r\n## To verify:\r\n\r\n- Create an index that has fields with
`date` and `date_nanos` types.\r\n```\r\nPUT test-index-date\r\n{\r\n
\"mappings\": {\r\n \"properties\": {\r\n \"date\": {\r\n \"type\":
\"date\"\r\n },\r\n \"timestamp\": {\r\n \"type\": \"date_nanos\"\r\n
}\r\n }\r\n }\r\n}\r\n```\r\n- Add data with `date` and `date_nanos`
data types\r\nNote: You can
use\r\nhttps://www.site24x7.com/tools/time-stamp-converter.html address
to\r\ngenerate date_nanos timestamps with a date you
desired.\r\n```\r\nPUT test-index-date/_bulk?refresh\r\n{ \"index\" : {
\"_id\" : \"1\" } }\r\n{ \"date\": \"2023-02-15T18:00:00.000Z\",
\"timestamp\": 1676480400000} \r\n{ \"index\" : { \"_id\" : \"2\" }
}\r\n{ \"date\": \"2023-02-15T18:00:00.000Z\", \"timestamp\":
1676480400000 } \r\n```\r\n- Open a Rule create form and select
`Elasticsearch query`\r\n- Select `Query DSL`\r\n- Click on `select an
index`\r\n- Type the above index name (test-index-date) in `Indices to
query`\r\ninput\r\n- Select `timestamp` from time field\r\n- Click on
`Test Query` button and expect to see `Query matched 2\r\ndocuments in
the last
5m.`","sha":"58204cf2a0fd2b921d5f5c3e138b725bce1c5229"}},"sourceBranch":"main","suggestedTargetBranches":["8.7"],"targetPullRequestStates":[{"branch":"8.7","label":"v8.7.0","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.8.0","labelRegex":"^v8.8.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/151374","number":151374,"mergeCommit":{"message":"Add
date_nanos support to Time field (#151374)\n\nFixes: #145855
\r\n\r\n`Time field` in rule update/create forms shows only the fields
with\r\n`date` data type. This PR adds `date_nanos` type as
well.\r\n\r\n## To verify:\r\n\r\n- Create an index that has fields with
`date` and `date_nanos` types.\r\n```\r\nPUT test-index-date\r\n{\r\n
\"mappings\": {\r\n \"properties\": {\r\n \"date\": {\r\n \"type\":
\"date\"\r\n },\r\n \"timestamp\": {\r\n \"type\": \"date_nanos\"\r\n
}\r\n }\r\n }\r\n}\r\n```\r\n- Add data with `date` and `date_nanos`
data types\r\nNote: You can
use\r\nhttps://www.site24x7.com/tools/time-stamp-converter.html address
to\r\ngenerate date_nanos timestamps with a date you
desired.\r\n```\r\nPUT test-index-date/_bulk?refresh\r\n{ \"index\" : {
\"_id\" : \"1\" } }\r\n{ \"date\": \"2023-02-15T18:00:00.000Z\",
\"timestamp\": 1676480400000} \r\n{ \"index\" : { \"_id\" : \"2\" }
}\r\n{ \"date\": \"2023-02-15T18:00:00.000Z\", \"timestamp\":
1676480400000 } \r\n```\r\n- Open a Rule create form and select
`Elasticsearch query`\r\n- Select `Query DSL`\r\n- Click on `select an
index`\r\n- Type the above index name (test-index-date) in `Indices to
query`\r\ninput\r\n- Select `timestamp` from time field\r\n- Click on
`Test Query` button and expect to see `Query matched 2\r\ndocuments in
the last 5m.`","sha":"58204cf2a0fd2b921d5f5c3e138b725bce1c5229"}}]}]
BACKPORT-->

Co-authored-by: Ersin Erdal <[email protected]>
  • Loading branch information
kibanamachine and ersin-erdal authored Feb 21, 2023
1 parent ab02303 commit b4c69c4
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'asc',
},
},
Expand Down Expand Up @@ -111,6 +112,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'asc',
},
},
Expand Down Expand Up @@ -160,6 +162,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'asc',
},
},
Expand Down Expand Up @@ -210,6 +213,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'asc',
},
},
Expand Down Expand Up @@ -272,6 +276,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'asc',
},
},
Expand Down Expand Up @@ -320,6 +325,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'desc',
},
},
Expand Down Expand Up @@ -368,6 +374,7 @@ describe('buildSortedEventsQuery', () => {
sort: [
{
timefield: {
format: 'strict_date_optional_time||epoch_millis',
order: 'asc',
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const buildSortedEventsQuery = ({
{
[sortField]: {
order: sortOrder ?? 'asc',
format: 'strict_date_optional_time||epoch_millis',
},
},
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ describe('fetchEsQuery', () => {
sort: [
{
'@timestamp': {
format: 'strict_date_optional_time||epoch_millis',
order: 'desc',
},
},
Expand Down Expand Up @@ -194,6 +195,7 @@ describe('fetchEsQuery', () => {
sort: [
{
'@timestamp': {
format: 'strict_date_optional_time||epoch_millis',
order: 'desc',
},
},
Expand Down Expand Up @@ -258,6 +260,7 @@ describe('fetchEsQuery', () => {
sort: [
{
'@timestamp': {
format: 'strict_date_optional_time||epoch_millis',
order: 'desc',
},
},
Expand Down Expand Up @@ -349,6 +352,7 @@ describe('fetchEsQuery', () => {
sort: [
{
'@timestamp': {
format: 'strict_date_optional_time||epoch_millis',
order: 'desc',
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,14 @@ export function updateSearchSource(

const searchSourceChild = searchSource.createChild();
searchSourceChild.setField('filter', filters as Filter[]);
searchSourceChild.setField('sort', [{ [timeFieldName]: SortDirection.desc }]);
searchSourceChild.setField('sort', [
{
[timeFieldName]: {
order: SortDirection.desc,
format: 'strict_date_optional_time||epoch_millis',
},
},
]);
searchSourceChild.setField(
'aggs',
buildAggregation({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@ describe('get_time_options', () => {
test('if getTimeFieldOptions return only date type fields', () => {
const timeOnlyTypeFields = getTimeFieldOptions([
{ type: 'date', name: 'order_date' },
{ type: 'date_nanos', name: 'order_date_nanos' },
{ type: 'number', name: 'sum' },
]);
expect(timeOnlyTypeFields).toMatchObject([{ text: 'order_date', value: 'order_date' }]);
expect(timeOnlyTypeFields).toMatchObject([
{ text: 'order_date', value: 'order_date' },
{ text: 'order_date_nanos', value: 'order_date_nanos' },
]);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const getTimeFieldOptions = (
const options: TimeFieldOptions[] = [];

fields.forEach((field: { type: string; name: string }) => {
if (field.type === 'date') {
if (field.type === 'date' || field.type === 'date_nanos') {
options.push({
text: field.name,
value: field.name,
Expand Down

0 comments on commit b4c69c4

Please sign in to comment.