Skip to content

Commit d80e8ca

Browse files
[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 <[email protected]>
1 parent 5ec6fe3 commit d80e8ca

File tree

31 files changed

+1103
-378
lines changed

31 files changed

+1103
-378
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';
@@ -43,11 +43,13 @@ export interface UseMatrixHistogramArgs {
4343
}
4444

4545
export const useMatrixHistogram = ({
46+
docValueFields,
4647
endDate,
4748
errorMessage,
4849
filterQuery,
4950
histogramType,
5051
indexNames,
52+
isPtrIncluded,
5153
stackByField,
5254
startDate,
5355
threshold,
@@ -76,6 +78,8 @@ export const useMatrixHistogram = ({
7678
},
7779
stackByField,
7880
threshold,
81+
...(isPtrIncluded != null ? { isPtrIncluded } : {}),
82+
...(!isEmpty(docValueFields) ? { docValueFields } : {}),
7983
});
8084

8185
const [matrixHistogramResponse, setMatrixHistogramResponse] = useState<UseMatrixHistogramArgs>({
@@ -167,13 +171,25 @@ export const useMatrixHistogram = ({
167171
},
168172
stackByField,
169173
threshold,
174+
...(isPtrIncluded != null ? { isPtrIncluded } : {}),
175+
...(!isEmpty(docValueFields) ? { docValueFields } : {}),
170176
};
171177
if (!deepEqual(prevRequest, myRequest)) {
172178
return myRequest;
173179
}
174180
return prevRequest;
175181
});
176-
}, [indexNames, endDate, filterQuery, startDate, stackByField, histogramType, threshold]);
182+
}, [
183+
indexNames,
184+
endDate,
185+
filterQuery,
186+
startDate,
187+
stackByField,
188+
histogramType,
189+
threshold,
190+
isPtrIncluded,
191+
docValueFields,
192+
]);
177193

178194
useEffect(() => {
179195
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,23 +13,23 @@ 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 { isCompleteResponse, isErrorResponse } from '../../../../../../../src/plugins/data/common';
2628
import { AbortError } from '../../../../../../../src/plugins/kibana_utils/common';
2729
import * as i18n from './translations';
2830
import { getInspectResponse } from '../../../helpers';
2931
import { InspectResponse } from '../../../types';
3032

31-
export * from './histogram';
32-
3333
const ID = 'networkDnsQuery';
3434

3535
export interface NetworkDnsArgs {
@@ -47,6 +47,7 @@ export interface NetworkDnsArgs {
4747

4848
interface UseNetworkDns {
4949
id?: string;
50+
docValueFields: DocValueFields[];
5051
indexNames: string[];
5152
type: networkModel.NetworkType;
5253
filterQuery?: ESTermQuery | string;
@@ -56,6 +57,7 @@ interface UseNetworkDns {
5657
}
5758

5859
export const useNetworkDns = ({
60+
docValueFields,
5961
endDate,
6062
filterQuery,
6163
indexNames,
@@ -74,6 +76,7 @@ export const useNetworkDns = ({
7476
!skip
7577
? {
7678
defaultIndex: indexNames,
79+
docValueFields: docValueFields ?? [],
7780
factoryQueryType: NetworkQueries.dns,
7881
filterQuery: createFilter(filterQuery),
7982
isPtrIncluded,
@@ -190,6 +193,7 @@ export const useNetworkDns = ({
190193
const myRequest = {
191194
...(prevRequest ?? {}),
192195
defaultIndex: indexNames,
196+
docValueFields: docValueFields ?? [],
193197
isPtrIncluded,
194198
factoryQueryType: NetworkQueries.dns,
195199
filterQuery: createFilter(filterQuery),
@@ -206,7 +210,18 @@ export const useNetworkDns = ({
206210
}
207211
return prevRequest;
208212
});
209-
}, [activePage, indexNames, endDate, filterQuery, limit, startDate, sort, skip, isPtrIncluded]);
213+
}, [
214+
activePage,
215+
indexNames,
216+
endDate,
217+
filterQuery,
218+
limit,
219+
startDate,
220+
sort,
221+
skip,
222+
isPtrIncluded,
223+
docValueFields,
224+
]);
210225

211226
useEffect(() => {
212227
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)