Skip to content

Commit a02af13

Browse files
authored
[SIEM] Phase I - Add saved query in SIEM solution (#47306)
* Add Search Bar components Integration of the Search Bar component in host and network page Fix state URL with new Search Bar * update unit test * Fix URL state to match Discover + Fix ML to match with new url state + fix cypress test * fix behavior when save as new query * savedQuery - do not try to update date picker when there is no timefilter * fix refresh * some merge issue + fix back to active page to zero * review I * hack to remove lag * fix type
1 parent d1d4468 commit a02af13

File tree

121 files changed

+2506
-2687
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+2506
-2687
lines changed

src/legacy/core_plugins/data/public/query/query_bar/components/query_bar_top_row.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import React, { useState, useEffect } from 'react';
2424

2525
import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiLink, EuiSuperDatePicker } from '@elastic/eui';
2626
// @ts-ignore
27-
import { EuiSuperUpdateButton } from '@elastic/eui';
27+
import { EuiSuperUpdateButton, OnRefreshProps } from '@elastic/eui';
2828
import { FormattedMessage, InjectedIntl, injectI18n } from '@kbn/i18n/react';
2929
import { Toast } from 'src/core/public';
3030
import { TimeRange } from 'src/plugins/data/public';
@@ -41,10 +41,12 @@ interface Props {
4141
query?: Query;
4242
onSubmit: (payload: { dateRange: TimeRange; query?: Query }) => void;
4343
onChange: (payload: { dateRange: TimeRange; query?: Query }) => void;
44+
onRefresh?: (payload: { dateRange: TimeRange }) => void;
4445
disableAutoFocus?: boolean;
4546
screenTitle?: string;
4647
indexPatterns?: Array<IndexPattern | string>;
4748
intl: InjectedIntl;
49+
isLoading?: boolean;
4850
prepend?: React.ReactNode;
4951
showQueryInput?: boolean;
5052
showDatePicker?: boolean;
@@ -125,6 +127,18 @@ function QueryBarTopRowUI(props: Props) {
125127
}
126128
}
127129

130+
function onRefresh({ start, end }: OnRefreshProps) {
131+
const retVal = {
132+
dateRange: {
133+
from: start,
134+
to: end,
135+
},
136+
};
137+
if (props.onRefresh) {
138+
props.onRefresh(retVal);
139+
}
140+
}
141+
128142
function onSubmit({ query, dateRange }: { query?: Query; dateRange: TimeRange }) {
129143
handleLuceneSyntaxWarning();
130144

@@ -175,6 +189,7 @@ function QueryBarTopRowUI(props: Props) {
175189
<EuiSuperUpdateButton
176190
needsUpdate={props.isDirty}
177191
isDisabled={isDateRangeInvalid}
192+
isLoading={props.isLoading}
178193
onClick={onClickSubmitButton}
179194
data-test-subj="querySubmitButton"
180195
/>
@@ -227,6 +242,7 @@ function QueryBarTopRowUI(props: Props) {
227242
isPaused={props.isRefreshPaused}
228243
refreshInterval={props.refreshInterval}
229244
onTimeChange={onTimeChange}
245+
onRefresh={onRefresh}
230246
onRefreshChange={props.onRefreshChange}
231247
showUpdateButton={false}
232248
recentlyUsedRanges={recentlyUsedRanges}

src/legacy/core_plugins/data/public/search/search_bar/components/create_search_bar.tsx

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
* under the License.
1818
*/
1919

20-
import React from 'react';
20+
import React, { useState, useEffect } from 'react';
21+
import { Subscription } from 'rxjs';
2122
import { Filter } from '@kbn/es-query';
2223
import { CoreStart } from 'src/core/public';
2324
import { DataPublicPluginStart } from 'src/plugins/data/public';
@@ -64,8 +65,48 @@ export function createSearchBar({
6465
// App name should come from the core application service.
6566
// Until it's available, we'll ask the user to provide it for the pre-wired component.
6667
return (props: StatetfulSearchBarProps) => {
68+
const tfRefreshInterval = timefilter.timefilter.getRefreshInterval();
69+
const fmFilters = filterManager.getFilters();
70+
const [refreshInterval, setRefreshInterval] = useState(tfRefreshInterval.value);
71+
const [refreshPaused, setRefreshPaused] = useState(tfRefreshInterval.pause);
72+
73+
const [filters, setFilters] = useState(fmFilters);
74+
75+
// We do not really need to keep track of the time
76+
// since this is just for initialization
6777
const timeRange = timefilter.timefilter.getTime();
68-
const refreshInterval = timefilter.timefilter.getRefreshInterval();
78+
79+
useEffect(() => {
80+
let isSubscribed = true;
81+
const subscriptions = new Subscription();
82+
subscriptions.add(
83+
timefilter.timefilter.getRefreshIntervalUpdate$().subscribe({
84+
next: () => {
85+
if (isSubscribed) {
86+
const newRefreshInterval = timefilter.timefilter.getRefreshInterval();
87+
setRefreshInterval(newRefreshInterval.value);
88+
setRefreshPaused(newRefreshInterval.pause);
89+
}
90+
},
91+
})
92+
);
93+
94+
subscriptions.add(
95+
filterManager.getUpdates$().subscribe({
96+
next: () => {
97+
if (isSubscribed) {
98+
const newFilters = filterManager.getFilters();
99+
setFilters(newFilters);
100+
}
101+
},
102+
})
103+
);
104+
105+
return () => {
106+
isSubscribed = false;
107+
subscriptions.unsubscribe();
108+
};
109+
}, []);
69110

70111
return (
71112
<KibanaContextProvider
@@ -80,9 +121,9 @@ export function createSearchBar({
80121
timeHistory={timefilter.history}
81122
dateRangeFrom={timeRange.from}
82123
dateRangeTo={timeRange.to}
83-
refreshInterval={refreshInterval.value}
84-
isRefreshPaused={refreshInterval.pause}
85-
filters={filterManager.getFilters()}
124+
refreshInterval={refreshInterval}
125+
isRefreshPaused={refreshPaused}
126+
filters={filters}
86127
onFiltersUpdated={defaultFiltersUpdated(filterManager)}
87128
onRefreshChange={defaultOnRefreshChange(timefilter)}
88129
{...props}

src/legacy/core_plugins/data/public/search/search_bar/components/search_bar.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ interface SearchBarInjectedDeps {
5858

5959
export interface SearchBarOwnProps {
6060
indexPatterns?: IndexPattern[];
61+
isLoading?: boolean;
6162
customSubmitButton?: React.ReactNode;
6263
screenTitle?: string;
6364

@@ -79,6 +80,8 @@ export interface SearchBarOwnProps {
7980
onSavedQueryUpdated?: (savedQuery: SavedQuery) => void;
8081
// User has cleared the active query, your app should clear the entire query bar
8182
onClearSavedQuery?: () => void;
83+
84+
onRefresh?: (payload: { dateRange: TimeRange }) => void;
8285
}
8386

8487
export type SearchBarProps = SearchBarOwnProps & SearchBarInjectedDeps;
@@ -377,6 +380,7 @@ class SearchBarUI extends Component<SearchBarProps, State> {
377380
screenTitle={this.props.screenTitle}
378381
onSubmit={this.onQueryBarSubmit}
379382
indexPatterns={this.props.indexPatterns}
383+
isLoading={this.props.isLoading}
380384
prepend={this.props.showFilterBar ? savedQueryManagement : undefined}
381385
showDatePicker={this.props.showDatePicker}
382386
dateRangeFrom={this.state.dateRangeFrom}
@@ -385,6 +389,7 @@ class SearchBarUI extends Component<SearchBarProps, State> {
385389
refreshInterval={this.props.refreshInterval}
386390
showAutoRefreshOnly={this.props.showAutoRefreshOnly}
387391
showQueryInput={this.props.showQueryInput}
392+
onRefresh={this.props.onRefresh}
388393
onRefreshChange={this.props.onRefreshChange}
389394
onChange={this.onQueryBarChange}
390395
isDirty={this.isDirty()}

src/legacy/core_plugins/data/public/search/search_bar/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { Query } from '../../query/query_bar';
2323

2424
export * from './components';
2525

26-
type SavedQueryTimeFilter = TimeRange & {
26+
export type SavedQueryTimeFilter = TimeRange & {
2727
refreshInterval: RefreshInterval;
2828
};
2929

x-pack/legacy/plugins/siem/cypress/integration/lib/ml_conditional_links/index.ts

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
/*
88
* These links are for different test scenarios that try and capture different drill downs into
99
* ml-network and ml-hosts and are of the flavor of testing:
10-
* A filter being null: (filterQuery:!n)
11-
* A filter being set with single values: filterQuery:(expression:%27process.name%20:%20%22conhost.exe%22%27,kind:kuery)
12-
* A filter being set with multiple values: filterQuery:(expression:%27process.name%20:%20%22conhost.exe,sc.exe%22%27,kind:kuery)
13-
* A filter containing variables not replaced: filterQuery:(expression:%27process.name%20:%20%$process.name$%22%27,kind:kuery)
10+
* A filter being null: (query:!n)
11+
* A filter being set with single values: query=(query:%27process.name%20:%20%22conhost.exe%22%27,language:kuery)
12+
* A filter being set with multiple values: query=(query:%27process.name%20:%20%22conhost.exe,sc.exe%22%27,language:kuery)
13+
* A filter containing variables not replaced: query=(query:%27process.name%20:%20%$process.name$%22%27,language:kuery)
1414
*
1515
* In different combination with:
1616
* network not being set: $ip$
@@ -23,54 +23,54 @@
2323
* host having multiple values: suricata-iowa,siem-windows
2424
*/
2525

26-
// Single IP with a null for the filterQuery:
27-
export const mlNetworkSingleIpNullFilterQuery =
28-
"/app/siem#/ml-network/ip/127.0.0.1?kqlQuery=(filterQuery:!n,queryLocation:network.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
26+
// Single IP with a null for the Query:
27+
export const mlNetworkSingleIpNullKqlQuery =
28+
"/app/siem#/ml-network/ip/127.0.0.1?query=!n&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
2929

30-
// Single IP with a value for the filterQuery:
31-
export const mlNetworkSingleIpFilterQuery =
32-
"/app/siem#/ml-network/ip/127.0.0.1?kqlQuery=(filterQuery:(expression:'process.name%20:%20%22conhost.exe,sc.exe%22',kind:kuery),queryLocation:network.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
30+
// Single IP with a value for the Query:
31+
export const mlNetworkSingleIpKqlQuery =
32+
"/app/siem#/ml-network/ip/127.0.0.1?query=(language:kuery,query:'process.name%20:%20%22conhost.exe,sc.exe%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
3333

34-
// Multiple IPs with a null for the filterQuery:
35-
export const mlNetworkMultipleIpNullFilterQuery =
36-
"/app/siem#/ml-network/ip/127.0.0.1,127.0.0.2?kqlQuery=(filterQuery:!n,queryLocation:network.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
34+
// Multiple IPs with a null for the Query:
35+
export const mlNetworkMultipleIpNullKqlQuery =
36+
"/app/siem#/ml-network/ip/127.0.0.1,127.0.0.2?query=!n&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
3737

38-
// Multiple IPs with a value for the filterQuery:
39-
export const mlNetworkMultipleIpFilterQuery =
40-
"/app/siem#/ml-network/ip/127.0.0.1,127.0.0.2?kqlQuery=(filterQuery:(expression:'process.name%20:%20%22conhost.exe,sc.exe%22',kind:kuery),queryLocation:network.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
38+
// Multiple IPs with a value for the Query:
39+
export const mlNetworkMultipleIpKqlQuery =
40+
"/app/siem#/ml-network/ip/127.0.0.1,127.0.0.2?query=(language:kuery,query:'process.name%20:%20%22conhost.exe,sc.exe%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
4141

42-
// $ip$ with a null filterQuery:
43-
export const mlNetworkNullFilterQuery =
44-
"/app/siem#/ml-network/ip/$ip$?kqlQuery=(filterQuery:!n,queryLocation:network.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
42+
// $ip$ with a null Query:
43+
export const mlNetworkNullKqlQuery =
44+
"/app/siem#/ml-network/ip/$ip$?query=!n&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
4545

46-
// $ip$ with a value for the filterQuery:
47-
export const mlNetworkFilterQuery =
48-
"/app/siem#/ml-network/ip/$ip$?kqlQuery=(filterQuery:(expression:'process.name%20:%20%22conhost.exe,sc.exe%22',kind:kuery),queryLocation:network.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
46+
// $ip$ with a value for the Query:
47+
export const mlNetworkKqlQuery =
48+
"/app/siem#/ml-network/ip/$ip$?query=(language:kuery,query:'process.name%20:%20%22conhost.exe,sc.exe%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-28T11:00:00.000Z',kind:absolute,to:'2019-08-28T13:59:59.999Z')))";
4949

50-
// Single host name with a null for the filterQuery:
51-
export const mlHostSingleHostNullFilterQuery =
52-
"/app/siem#/ml-hosts/siem-windows?_g=()&kqlQuery=(filterQuery:!n,queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
50+
// Single host name with a null for the Query:
51+
export const mlHostSingleHostNullKqlQuery =
52+
"/app/siem#/ml-hosts/siem-windows?_g=()&query=!n&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
5353

54-
// Single host name with a variable in the filterQuery
55-
export const mlHostSingleHostFilterQueryVariable =
56-
"/app/siem#/ml-hosts/siem-windows?_g=()&kqlQuery=(filterQuery:(expression:'process.name%20:%20%22$process.name$%22',kind:kuery),queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
54+
// Single host name with a variable in the Query:
55+
export const mlHostSingleHostKqlQueryVariable =
56+
"/app/siem#/ml-hosts/siem-windows?_g=()&query=(language:kuery,query:'process.name%20:%20%22$process.name$%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
5757

58-
// Single host name with a value for filterQuery:
59-
export const mlHostSingleHostFilterQuery =
60-
"/app/siem#/ml-hosts/siem-windows?_g=()&kqlQuery=(filterQuery:(expression:'process.name%20:%20%22conhost.exe,sc.exe%22',kind:kuery),queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
58+
// Single host name with a value for Query:
59+
export const mlHostSingleHostKqlQuery =
60+
"/app/siem#/ml-hosts/siem-windows?_g=()&query=(language:kuery,query:'process.name%20:%20%22conhost.exe,sc.exe%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
6161

62-
// Multiple host names with null for filterQuery
63-
export const mlHostMultiHostNullFilterQuery =
64-
"/app/siem#/ml-hosts/siem-windows,siem-suricata?_g=()&kqlQuery=(filterQuery:!n,queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
62+
// Multiple host names with null for Query:
63+
export const mlHostMultiHostNullKqlQuery =
64+
"/app/siem#/ml-hosts/siem-windows,siem-suricata?_g=()&query=!n&&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
6565

66-
// Multiple host names with a value for filterQuery
67-
export const mlHostMultiHostFilterQuery =
68-
"/app/siem#/ml-hosts/siem-windows,siem-suricata?_g=()&kqlQuery=(filterQuery:(expression:'process.name%20:%20%22conhost.exe,sc.exe%22',kind:kuery),queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
66+
// Multiple host names with a value for Query:
67+
export const mlHostMultiHostKqlQuery =
68+
"/app/siem#/ml-hosts/siem-windows,siem-suricata?_g=()&query=(language:kuery,query:'process.name%20:%20%22conhost.exe,sc.exe%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
6969

7070
// Undefined/null host name with a null for the KQL:
71-
export const mlHostVariableHostNullFilterQuery =
72-
"/app/siem#/ml-hosts/$host.name$?_g=()&kqlQuery=(filterQuery:!n,queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
71+
export const mlHostVariableHostNullKqlQuery =
72+
"/app/siem#/ml-hosts/$host.name$?_g=()&query=!n&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
7373

74-
// Undefined/null host name but with a value for filterQuery
75-
export const mlHostVariableHostFilterQuery =
76-
"/app/siem#/ml-hosts/$host.name$?_g=()&kqlQuery=(filterQuery:(expression:'process.name%20:%20%22conhost.exe,sc.exe%22',kind:kuery),queryLocation:hosts.details,type:details)&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";
74+
// Undefined/null host name but with a value for Query:
75+
export const mlHostVariableHostKqlQuery =
76+
"/app/siem#/ml-hosts/$host.name$?_g=()&query=(language:kuery,query:'process.name%20:%20%22conhost.exe,sc.exe%22')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')),timeline:(linkTo:!(global),timerange:(from:'2019-06-06T06:00:00.000Z',kind:absolute,to:'2019-06-07T05:59:59.999Z')))";

0 commit comments

Comments
 (0)