Skip to content

Commit 8d8db9c

Browse files
[Security Solution] Fix DNS Network table query
1 parent 074ef6f commit 8d8db9c

5 files changed

Lines changed: 33 additions & 25 deletions

File tree

x-pack/plugins/security_solution/public/common/components/paginated_table/helpers.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import { PaginationInputPaginated } from '../../../graphql/types';
88

99
export const generateTablePaginationOptions = (
1010
activePage: number,
11-
limit: number
11+
limit: number,
12+
isBucketSort?: boolean
1213
): PaginationInputPaginated => {
1314
const cursorStart = activePage * limit;
1415
return {
1516
activePage,
1617
cursorStart,
1718
fakePossibleCount: 4 <= activePage && activePage > 0 ? limit * (activePage + 2) : limit * 5,
18-
querySize: limit + cursorStart,
19+
querySize: isBucketSort ? limit : limit + cursorStart,
1920
};
2021
};

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export const useNetworkDns = ({
8080
factoryQueryType: NetworkQueries.dns,
8181
filterQuery: createFilter(filterQuery),
8282
isPtrIncluded,
83-
pagination: generateTablePaginationOptions(activePage, limit),
83+
pagination: generateTablePaginationOptions(activePage, limit, true),
8484
sort,
8585
timerange: {
8686
interval: '12h',
@@ -196,7 +196,7 @@ export const useNetworkDns = ({
196196
isPtrIncluded,
197197
factoryQueryType: NetworkQueries.dns,
198198
filterQuery: createFilter(filterQuery),
199-
pagination: generateTablePaginationOptions(activePage, limit),
199+
pagination: generateTablePaginationOptions(activePage, limit, true),
200200
sort,
201201
timerange: {
202202
interval: '12h',

x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,10 @@ export const networkDns: SecuritySolutionFactory<NetworkQueries.dns> = {
3333
options: NetworkDnsRequestOptions,
3434
response: IEsSearchResponse<unknown>
3535
): Promise<NetworkDnsStrategyResponse> => {
36-
const { activePage, cursorStart, fakePossibleCount, querySize } = options.pagination;
36+
const { activePage, fakePossibleCount } = options.pagination;
3737
const totalCount = getOr(0, 'aggregations.dns_count.value', response.rawResponse);
38-
const networkDnsEdges: NetworkDnsEdges[] = getDnsEdges(response);
38+
const edges: NetworkDnsEdges[] = getDnsEdges(response);
3939
const fakeTotalCount = fakePossibleCount <= totalCount ? fakePossibleCount : totalCount;
40-
const edges = networkDnsEdges.splice(cursorStart, querySize - cursorStart);
4140
const inspect = {
4241
dsl: [inspectStringifyObject(buildDnsQuery(options))],
4342
};

x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network/dns/query.dns_network.dsl.ts

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,30 @@ import {
1515
} from '../../../../../../common/search_strategy';
1616
import { createQueryFilterClauses } from '../../../../../utils/build_query';
1717

18+
const HUGE_QUERY_SIZE = 1000000;
19+
1820
type QueryOrder =
19-
| { _count: Direction }
20-
| { _key: Direction }
21-
| { unique_domains: Direction }
22-
| { dns_bytes_in: Direction }
23-
| { dns_bytes_out: Direction };
21+
| { _count: { order: Direction } }
22+
| { _key: { order: Direction } }
23+
| { unique_domains: { order: Direction } }
24+
| { dns_bytes_in: { order: Direction } }
25+
| { dns_bytes_out: { order: Direction } };
2426

2527
const getQueryOrder = (sort: SortField<NetworkDnsFields>): QueryOrder => {
2628
switch (sort.field) {
2729
case NetworkDnsFields.queryCount:
28-
return { _count: sort.direction };
30+
return {
31+
_count: {
32+
order: sort.direction,
33+
},
34+
};
2935
case NetworkDnsFields.dnsName:
30-
return { _key: sort.direction };
36+
return { _key: { order: sort.direction } };
3137
case NetworkDnsFields.uniqueDomains:
32-
return { unique_domains: sort.direction };
38+
return { unique_domains: { order: sort.direction } };
3339
case NetworkDnsFields.dnsBytesIn:
34-
return { dns_bytes_in: sort.direction };
40+
return { dns_bytes_in: { order: sort.direction } };
3541
case NetworkDnsFields.dnsBytesOut:
36-
return { dns_bytes_out: sort.direction };
3742
}
3843
assertUnreachable(sort.field);
3944
};
@@ -67,7 +72,7 @@ export const buildDnsQuery = ({
6772
filterQuery,
6873
isPtrIncluded,
6974
sort,
70-
pagination: { querySize },
75+
pagination: { cursorStart, querySize },
7176
stackByField = 'dns.question.registered_domain',
7277
timerange: { from, to },
7378
}: NetworkDnsRequestOptions) => {
@@ -95,12 +100,16 @@ export const buildDnsQuery = ({
95100
dns_name_query_count: {
96101
terms: {
97102
field: stackByField,
98-
size: querySize,
99-
order: {
100-
...getQueryOrder(sort),
101-
},
103+
size: HUGE_QUERY_SIZE,
102104
},
103105
aggs: {
106+
bucket_sort: {
107+
bucket_sort: {
108+
sort: [getQueryOrder(sort), { _key: { order: 'asc' } }],
109+
from: cursorStart,
110+
size: querySize,
111+
},
112+
},
104113
unique_domains: {
105114
cardinality: {
106115
field: 'dns.question.name',

x-pack/test/api_integration/apis/security_solution/network_dns.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ export default function ({ getService }: FtrProviderContext) {
1818
const esArchiver = getService('esArchiver');
1919
const supertest = getService('supertest');
2020

21-
// Failing: See https://github.com/elastic/kibana/issues/82207
22-
describe.skip('Network DNS', () => {
21+
describe('Network DNS', () => {
2322
describe('With packetbeat', () => {
2423
before(() => esArchiver.load('packetbeat/dns'));
2524
after(() => esArchiver.unload('packetbeat/dns'));
@@ -59,7 +58,7 @@ export default function ({ getService }: FtrProviderContext) {
5958
expect(networkDns.edges.length).to.be(10);
6059
expect(networkDns.totalCount).to.be(44);
6160
expect(networkDns.edges.map((i: NetworkDnsEdges) => i.node.dnsName).join(',')).to.be(
62-
'aaplimg.com,adgrx.com,akadns.net,akamaiedge.net,amazonaws.com,cbsistatic.com,cdn-apple.com,connman.net,crowbird.com,d1oxlq5h9kq8q5.cloudfront.net'
61+
'aaplimg.com,adgrx.com,akadns.net,akamaiedge.net,amazonaws.com,cbsistatic.com,cdn-apple.com,connman.net,d1oxlq5h9kq8q5.cloudfront.net,d3epxf4t8a32oh.cloudfront.net'
6362
);
6463
expect(networkDns.pageInfo.fakeTotalCount).to.equal(30);
6564
});

0 commit comments

Comments
 (0)