Skip to content

Commit 30b2c8d

Browse files
authored
[7.10] [Security Solution] Fix incorrect time for dns histogram (#83532) (#84235)
* [Security Solution] Fix incorrect time for dns histogram (#83532) * getSuitableUnit * update dns histogram query * update dns query * update dns histogram query * fix type error * fix lint error * remove unused comments * fix histogram query size * revert change * fix unit test * fix dns request options * clean up * cleanup types * fix dependency * review * review * revert * restore docValueFields * fix unit test * cleanup * restore docValueFields for dns histogram * review * review * lint Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> # Conflicts: # x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx # x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/query.dns_network.dsl.ts * eslint
1 parent a042e17 commit 30b2c8d

File tree

31 files changed

+1102
-377
lines changed

31 files changed

+1102
-377
lines changed

x-pack/plugins/security_solution/common/search_strategy/security_solution/matrix_histogram/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export interface MatrixHistogramRequestOptions extends RequestBasicOptions {
3737
stackByField: string;
3838
threshold?: { field: string | undefined; value: number } | undefined;
3939
inspect?: Maybe<Inspect>;
40+
isPtrIncluded?: boolean;
4041
}
4142

4243
export interface MatrixHistogramStrategyResponse extends IEsSearchResponse {

x-pack/plugins/security_solution/public/common/components/charts/barchart.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ const checkIfAnyValidSeriesExist = (
4747
!checkIfAllValuesAreZero(data) &&
4848
data.some(checkIfAllTheDataInTheSeriesAreValid);
4949

50+
const yAccessors = ['y'];
51+
const splitSeriesAccessors = ['g'];
52+
5053
// Bar chart rotation: https://ela.st/chart-rotations
5154
export const BarChartBaseComponent = ({
5255
data,
@@ -86,9 +89,9 @@ export const BarChartBaseComponent = ({
8689
xScaleType={getOr(ScaleType.Linear, 'configs.series.xScaleType', chartConfigs)}
8790
yScaleType={getOr(ScaleType.Linear, 'configs.series.yScaleType', chartConfigs)}
8891
xAccessor="x"
89-
yAccessors={['y']}
92+
yAccessors={yAccessors}
9093
timeZone={timeZone}
91-
splitSeriesAccessors={['g']}
94+
splitSeriesAccessors={splitSeriesAccessors}
9295
data={series.value!}
9396
stackAccessors={get('configs.series.stackAccessors', chartConfigs)}
9497
color={series.color ? series.color : undefined}

x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const HistogramPanel = styled(Panel)<{ height?: number }>`
6464
export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> = ({
6565
chartHeight,
6666
defaultStackByOption,
67+
docValueFields,
6768
endDate,
6869
errorMessage,
6970
filterQuery,
@@ -72,6 +73,7 @@ export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> =
7273
hideHistogramIfEmpty = false,
7374
id,
7475
indexNames,
76+
isPtrIncluded,
7577
legendPosition,
7678
mapping,
7779
panelHeight = DEFAULT_PANEL_HEIGHT,
@@ -138,6 +140,8 @@ export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> =
138140
indexNames,
139141
startDate,
140142
stackByField: selectedStackByOption.value,
143+
isPtrIncluded,
144+
docValueFields,
141145
});
142146

143147
const titleWithStackByField = useMemo(

x-pack/plugins/security_solution/public/common/components/matrix_histogram/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { InputsModelId } from '../../store/inputs/constants';
1212
import { MatrixHistogramType } from '../../../../common/search_strategy/security_solution';
1313
import { UpdateDateRange } from '../charts/common';
1414
import { GlobalTimeArgs } from '../../containers/use_global_time';
15+
import { DocValueFields } from '../../../../common/search_strategy';
1516

1617
export type MatrixHistogramMappingTypes = Record<
1718
string,
@@ -57,6 +58,7 @@ interface MatrixHistogramBasicProps {
5758
}
5859

5960
export interface MatrixHistogramQueryProps {
61+
docValueFields?: DocValueFields[];
6062
endDate: string;
6163
errorMessage: string;
6264
indexNames: string[];
@@ -72,6 +74,7 @@ export interface MatrixHistogramQueryProps {
7274
histogramType: MatrixHistogramType;
7375
threshold?: { field: string | undefined; value: number } | undefined;
7476
skip?: boolean;
77+
isPtrIncluded?: boolean;
7578
}
7679

7780
export interface MatrixHistogramProps extends MatrixHistogramBasicProps {

x-pack/plugins/security_solution/public/common/containers/matrix_histogram/index.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import deepEqual from 'fast-deep-equal';
8-
import { getOr, noop } from 'lodash/fp';
8+
import { getOr, isEmpty, noop } from 'lodash/fp';
99
import { useCallback, useEffect, useRef, useState } from 'react';
1010

1111
import { MatrixHistogramQueryProps } from '../../components/matrix_histogram/types';
@@ -46,11 +46,13 @@ export interface UseMatrixHistogramArgs {
4646
}
4747

4848
export const useMatrixHistogram = ({
49+
docValueFields,
4950
endDate,
5051
errorMessage,
5152
filterQuery,
5253
histogramType,
5354
indexNames,
55+
isPtrIncluded,
5456
stackByField,
5557
startDate,
5658
threshold,
@@ -78,6 +80,8 @@ export const useMatrixHistogram = ({
7880
},
7981
stackByField,
8082
threshold,
83+
...(isPtrIncluded != null ? { isPtrIncluded } : {}),
84+
...(!isEmpty(docValueFields) ? { docValueFields } : {}),
8185
});
8286

8387
const [matrixHistogramResponse, setMatrixHistogramResponse] = useState<UseMatrixHistogramArgs>({
@@ -169,13 +173,25 @@ export const useMatrixHistogram = ({
169173
},
170174
stackByField,
171175
threshold,
176+
...(isPtrIncluded != null ? { isPtrIncluded } : {}),
177+
...(!isEmpty(docValueFields) ? { docValueFields } : {}),
172178
};
173179
if (!deepEqual(prevRequest, myRequest)) {
174180
return myRequest;
175181
}
176182
return prevRequest;
177183
});
178-
}, [indexNames, endDate, filterQuery, startDate, stackByField, histogramType, threshold]);
184+
}, [
185+
indexNames,
186+
endDate,
187+
filterQuery,
188+
startDate,
189+
stackByField,
190+
histogramType,
191+
threshold,
192+
isPtrIncluded,
193+
docValueFields,
194+
]);
179195

180196
useEffect(() => {
181197
if (!skip) {

x-pack/plugins/security_solution/public/network/containers/network_dns/histogram.ts

Lines changed: 0 additions & 65 deletions
This file was deleted.

x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,17 @@ import { inputsModel } from '../../../common/store';
1313
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
1414
import { useKibana } from '../../../common/lib/kibana';
1515
import { createFilter } from '../../../common/containers/helpers';
16-
import { NetworkDnsEdges, PageInfoPaginated } from '../../../../common/search_strategy';
1716
import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers';
1817
import { networkModel, networkSelectors } from '../../store';
1918
import {
19+
DocValueFields,
2020
NetworkQueries,
2121
NetworkDnsRequestOptions,
2222
NetworkDnsStrategyResponse,
2323
MatrixOverOrdinalHistogramData,
24-
} from '../../../../common/search_strategy/security_solution/network';
24+
NetworkDnsEdges,
25+
PageInfoPaginated,
26+
} from '../../../../common/search_strategy';
2527
import {
2628
AbortError,
2729
isCompleteResponse,
@@ -31,8 +33,6 @@ import * as i18n from './translations';
3133
import { getInspectResponse } from '../../../helpers';
3234
import { InspectResponse } from '../../../types';
3335

34-
export * from './histogram';
35-
3636
const ID = 'networkDnsQuery';
3737

3838
export interface NetworkDnsArgs {
@@ -50,6 +50,7 @@ export interface NetworkDnsArgs {
5050

5151
interface UseNetworkDns {
5252
id?: string;
53+
docValueFields: DocValueFields[];
5354
indexNames: string[];
5455
type: networkModel.NetworkType;
5556
filterQuery?: ESTermQuery | string;
@@ -59,6 +60,7 @@ interface UseNetworkDns {
5960
}
6061

6162
export const useNetworkDns = ({
63+
docValueFields,
6264
endDate,
6365
filterQuery,
6466
indexNames,
@@ -77,6 +79,7 @@ export const useNetworkDns = ({
7779
!skip
7880
? {
7981
defaultIndex: indexNames,
82+
docValueFields: docValueFields ?? [],
8083
factoryQueryType: NetworkQueries.dns,
8184
filterQuery: createFilter(filterQuery),
8285
isPtrIncluded,
@@ -193,6 +196,7 @@ export const useNetworkDns = ({
193196
const myRequest = {
194197
...(prevRequest ?? {}),
195198
defaultIndex: indexNames,
199+
docValueFields: docValueFields ?? [],
196200
isPtrIncluded,
197201
factoryQueryType: NetworkQueries.dns,
198202
filterQuery: createFilter(filterQuery),
@@ -209,7 +213,18 @@ export const useNetworkDns = ({
209213
}
210214
return prevRequest;
211215
});
212-
}, [activePage, indexNames, endDate, filterQuery, limit, startDate, sort, skip, isPtrIncluded]);
216+
}, [
217+
activePage,
218+
indexNames,
219+
endDate,
220+
filterQuery,
221+
limit,
222+
startDate,
223+
sort,
224+
skip,
225+
isPtrIncluded,
226+
docValueFields,
227+
]);
213228

214229
useEffect(() => {
215230
networkDnsSearch(networkDnsRequest);

x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import React, { useEffect, useCallback, useMemo } from 'react';
88
import { getOr } from 'lodash/fp';
99

1010
import { NetworkDnsTable } from '../../components/network_dns_table';
11-
import { useNetworkDns, HISTOGRAM_ID } from '../../containers/network_dns';
11+
import { useNetworkDns } from '../../containers/network_dns';
1212
import { manageQuery } from '../../../common/components/page/manage_query';
1313

1414
import { NetworkComponentQueryProps } from './types';
@@ -20,6 +20,10 @@ import {
2020
import * as i18n from '../translations';
2121
import { MatrixHistogram } from '../../../common/components/matrix_histogram';
2222
import { MatrixHistogramType } from '../../../../common/search_strategy/security_solution';
23+
import { networkSelectors } from '../../store';
24+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
25+
26+
const HISTOGRAM_ID = 'networkDnsHistogramQuery';
2327

2428
const NetworkDnsTableManage = manageQuery(NetworkDnsTable);
2529

@@ -43,6 +47,7 @@ export const histogramConfigs: Omit<MatrixHistogramConfigs, 'title'> = {
4347

4448
const DnsQueryTabBodyComponent: React.FC<NetworkComponentQueryProps> = ({
4549
deleteQuery,
50+
docValueFields,
4651
endDate,
4752
filterQuery,
4853
indexNames,
@@ -51,6 +56,9 @@ const DnsQueryTabBodyComponent: React.FC<NetworkComponentQueryProps> = ({
5156
setQuery,
5257
type,
5358
}) => {
59+
const getNetworkDnsSelector = networkSelectors.dnsSelector();
60+
const { isPtrIncluded } = useShallowEqualSelector(getNetworkDnsSelector);
61+
5462
useEffect(() => {
5563
return () => {
5664
if (deleteQuery) {
@@ -63,6 +71,7 @@ const DnsQueryTabBodyComponent: React.FC<NetworkComponentQueryProps> = ({
6371
loading,
6472
{ totalCount, networkDns, pageInfo, loadPage, id, inspect, isInspected, refetch },
6573
] = useNetworkDns({
74+
docValueFields: docValueFields ?? [],
6675
endDate,
6776
filterQuery,
6877
indexNames,
@@ -87,9 +96,11 @@ const DnsQueryTabBodyComponent: React.FC<NetworkComponentQueryProps> = ({
8796
return (
8897
<>
8998
<MatrixHistogram
99+
id={HISTOGRAM_ID}
100+
isPtrIncluded={isPtrIncluded}
101+
docValueFields={docValueFields}
90102
endDate={endDate}
91103
filterQuery={filterQuery}
92-
id={HISTOGRAM_ID}
93104
indexNames={indexNames}
94105
setQuery={setQuery}
95106
showLegend={true}

x-pack/plugins/security_solution/public/network/pages/navigation/network_routes.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { UpdateDateRange } from '../../../common/components/charts/common';
2727
export const NetworkRoutes = React.memo<NetworkRoutesProps>(
2828
({
2929
networkPagePath,
30+
docValueFields,
3031
type,
3132
to,
3233
filterQuery,
@@ -107,7 +108,7 @@ export const NetworkRoutes = React.memo<NetworkRoutesProps>(
107108
return (
108109
<Switch>
109110
<Route path={`/:tabName(${NetworkRouteType.dns})`}>
110-
<DnsQueryTabBody {...tabProps} />
111+
<DnsQueryTabBody {...tabProps} docValueFields={docValueFields} />
111112
</Route>
112113
<Route path={`/:tabName(${NetworkRouteType.flows})`}>
113114
<>

x-pack/plugins/security_solution/public/network/pages/navigation/types.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { GlobalTimeArgs } from '../../../common/containers/use_global_time';
1414

1515
import { SetAbsoluteRangeDatePicker } from '../types';
1616
import { NarrowDateRange } from '../../../common/components/ml/types';
17+
import { DocValueFields } from '../../../common/containers/source';
1718

1819
interface QueryTabBodyProps extends Pick<GlobalTimeArgs, 'setQuery' | 'deleteQuery'> {
1920
skip: boolean;
@@ -25,7 +26,9 @@ interface QueryTabBodyProps extends Pick<GlobalTimeArgs, 'setQuery' | 'deleteQue
2526
indexNames: string[];
2627
}
2728

28-
export type NetworkComponentQueryProps = QueryTabBodyProps;
29+
export type NetworkComponentQueryProps = QueryTabBodyProps & {
30+
docValueFields?: DocValueFields[];
31+
};
2932

3033
export type IPsQueryTabBodyProps = QueryTabBodyProps & {
3134
indexPattern: IIndexPattern;
@@ -42,6 +45,7 @@ export type HttpQueryTabBodyProps = QueryTabBodyProps & {
4245
};
4346

4447
export type NetworkRoutesProps = GlobalTimeArgs & {
48+
docValueFields: DocValueFields[];
4549
networkPagePath: string;
4650
type: networkModel.NetworkType;
4751
filterQuery?: string | ESTermQuery;

0 commit comments

Comments
 (0)