mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Security Solution] Cleanup network page inconsistencies (#133900)
This commit is contained in:
parent
517395148a
commit
2657221748
49 changed files with 249 additions and 459 deletions
|
@ -7,7 +7,7 @@
|
|||
|
||||
import type { IEsSearchResponse } from '@kbn/data-plugin/common';
|
||||
import { CursorType, Inspect, Maybe, PageInfoPaginated, SortField } from '../../../common';
|
||||
import { FlowTarget } from '../common';
|
||||
import { FlowTargetSourceDest } from '../common';
|
||||
import { RequestOptionsPaginated } from '../..';
|
||||
|
||||
export enum NetworkUsersFields {
|
||||
|
@ -18,7 +18,7 @@ export enum NetworkUsersFields {
|
|||
export interface NetworkUsersRequestOptions extends RequestOptionsPaginated {
|
||||
ip: string;
|
||||
sort: SortField<NetworkUsersFields>;
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
}
|
||||
|
||||
export interface NetworkUsersStrategyResponse extends IEsSearchResponse {
|
||||
|
|
|
@ -21,7 +21,7 @@ import {
|
|||
success,
|
||||
success_count as successCount,
|
||||
} from '../../detection_engine/schemas/common/schemas';
|
||||
import { FlowTarget } from '../../search_strategy/security_solution/network';
|
||||
import { FlowTargetSourceDest } from '../../search_strategy/security_solution/network';
|
||||
import { errorSchema } from '../../detection_engine/schemas/response/error_schema';
|
||||
import { Direction, Maybe } from '../../search_strategy';
|
||||
|
||||
|
@ -526,7 +526,7 @@ export type TimelineExpandedNetworkType =
|
|||
panelView?: 'networkDetail';
|
||||
params?: {
|
||||
ip: string;
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
};
|
||||
}
|
||||
| EmptyObject;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { FlowTarget } from '../../../../../common/search_strategy';
|
||||
import { FlowTarget, FlowTargetSourceDest } from '../../../../../common/search_strategy';
|
||||
import { CriteriaFields } from '../types';
|
||||
import { networkToCriteria } from './network_to_criteria';
|
||||
|
||||
|
@ -17,7 +17,7 @@ describe('network_to_criteria', () => {
|
|||
fieldValue: '127.0.0.1',
|
||||
},
|
||||
];
|
||||
expect(networkToCriteria('127.0.0.1', FlowTarget.source)).toEqual(expectedCriteria);
|
||||
expect(networkToCriteria('127.0.0.1', FlowTargetSourceDest.source)).toEqual(expectedCriteria);
|
||||
});
|
||||
|
||||
test('converts a network to a criteria of destination if given a destination', () => {
|
||||
|
@ -27,10 +27,14 @@ describe('network_to_criteria', () => {
|
|||
fieldValue: '127.0.0.1',
|
||||
},
|
||||
];
|
||||
expect(networkToCriteria('127.0.0.1', FlowTarget.destination)).toEqual(expectedCriteria);
|
||||
expect(networkToCriteria('127.0.0.1', FlowTargetSourceDest.destination)).toEqual(
|
||||
expectedCriteria
|
||||
);
|
||||
});
|
||||
|
||||
test('returns an empty array if the Flow Type is anything else', () => {
|
||||
expect(networkToCriteria('127.0.0.1', FlowTarget.server)).toEqual([]);
|
||||
expect(
|
||||
networkToCriteria('127.0.0.1', FlowTarget.server as unknown as FlowTargetSourceDest)
|
||||
).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,13 +5,16 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { FlowTarget } from '../../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
|
||||
import { CriteriaFields } from '../types';
|
||||
|
||||
export const networkToCriteria = (ip: string, flowTarget: FlowTarget): CriteriaFields[] => {
|
||||
if (flowTarget === FlowTarget.source) {
|
||||
export const networkToCriteria = (
|
||||
ip: string,
|
||||
flowTarget: FlowTargetSourceDest
|
||||
): CriteriaFields[] => {
|
||||
if (flowTarget === FlowTargetSourceDest.source) {
|
||||
return [{ fieldName: 'source.ip', fieldValue: ip }];
|
||||
} else if (flowTarget === FlowTarget.destination) {
|
||||
} else if (flowTarget === FlowTargetSourceDest.destination) {
|
||||
return [{ fieldName: 'destination.ip', fieldValue: ip }];
|
||||
} else {
|
||||
return [];
|
||||
|
|
|
@ -11,7 +11,7 @@ import { UpdateDateRange } from '../../../components/charts/common';
|
|||
import { GlobalTimeArgs } from '../../use_global_time';
|
||||
import { HostsType } from '../../../../hosts/store/model';
|
||||
import { NetworkType } from '../../../../network/store/model';
|
||||
import { FlowTarget } from '../../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
|
||||
import { UsersType } from '../../../../users/store/model';
|
||||
|
||||
interface QueryTabBodyProps {
|
||||
|
@ -25,7 +25,7 @@ export type AnomaliesQueryTabBodyProps = QueryTabBodyProps & {
|
|||
AnomaliesTableComponent: React.NamedExoticComponent<any>;
|
||||
deleteQuery?: ({ id }: { id: string }) => void;
|
||||
endDate: GlobalTimeArgs['to'];
|
||||
flowTarget?: FlowTarget;
|
||||
flowTarget?: FlowTargetSourceDest;
|
||||
indexNames: string[];
|
||||
narrowDateRange: NarrowDateRange;
|
||||
setQuery: GlobalTimeArgs['setQuery'];
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import deepmerge from 'deepmerge';
|
||||
|
||||
import { MlSummaryJob } from '@kbn/ml-plugin/public';
|
||||
import { FlowTarget } from '../../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
|
||||
import { ESTermQuery } from '../../../../../common/typed_json';
|
||||
import { createFilter } from '../../helpers';
|
||||
|
||||
|
@ -17,7 +17,7 @@ export const getAnomaliesFilterQuery = (
|
|||
anomaliesFilterQuery: object = {},
|
||||
securityJobs: MlSummaryJob[] = [],
|
||||
anomalyScore: number,
|
||||
flowTarget?: FlowTarget,
|
||||
flowTarget?: FlowTargetSourceDest,
|
||||
ip?: string
|
||||
): string => {
|
||||
const securityJobIds = securityJobs
|
||||
|
|
|
@ -24,7 +24,7 @@ import { IpOverview } from '.';
|
|||
import { mockData } from './mock';
|
||||
import { mockAnomalies } from '../../../common/components/ml/mock';
|
||||
import { NarrowDateRange } from '../../../common/components/ml/types';
|
||||
import { FlowTarget } from '../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
describe('IP Overview Component', () => {
|
||||
const state: State = mockGlobalState;
|
||||
|
@ -41,7 +41,7 @@ describe('IP Overview Component', () => {
|
|||
anomaliesData: mockAnomalies,
|
||||
data: mockData.IpOverview,
|
||||
endDate: '2019-06-18T06:00:00.000Z',
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
loading: false,
|
||||
id: 'ipOverview',
|
||||
ip: '10.10.10.10',
|
||||
|
@ -51,7 +51,7 @@ describe('IP Overview Component', () => {
|
|||
startDate: '2019-06-15T06:00:00.000Z',
|
||||
type: networkModel.NetworkType.details,
|
||||
updateFlowTargetAction: jest.fn() as unknown as ActionCreator<{
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
}>,
|
||||
};
|
||||
|
||||
|
|
|
@ -11,7 +11,10 @@ import React from 'react';
|
|||
import { DEFAULT_DARK_MODE } from '../../../../common/constants';
|
||||
import { DescriptionList } from '../../../../common/utility_types';
|
||||
import { useUiSetting$ } from '../../../common/lib/kibana';
|
||||
import { FlowTarget, NetworkDetailsStrategyResponse } from '../../../../common/search_strategy';
|
||||
import {
|
||||
FlowTargetSourceDest,
|
||||
NetworkDetailsStrategyResponse,
|
||||
} from '../../../../common/search_strategy';
|
||||
import { networkModel } from '../../store';
|
||||
import { getEmptyTagValue } from '../../../common/components/empty_value';
|
||||
|
||||
|
@ -39,7 +42,7 @@ export interface IpOverviewProps {
|
|||
contextID?: string; // used to provide unique draggable context when viewing in the side panel
|
||||
data: NetworkDetailsStrategyResponse['networkDetails'];
|
||||
endDate: string;
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
id: string;
|
||||
ip: string;
|
||||
isDraggable?: boolean;
|
||||
|
|
|
@ -7,7 +7,11 @@
|
|||
|
||||
import { EuiSuperSelect } from '@elastic/eui';
|
||||
import React from 'react';
|
||||
import { FlowTarget, FlowDirection } from '../../../../common/search_strategy';
|
||||
import {
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
FlowDirection,
|
||||
} from '../../../../common/search_strategy';
|
||||
|
||||
import * as i18n from './translations';
|
||||
|
||||
|
@ -41,10 +45,10 @@ const toggleTargetOptions = (id: string, displayText: string[]) => [
|
|||
interface OwnProps {
|
||||
id: string;
|
||||
isLoading: boolean;
|
||||
selectedTarget: FlowTarget;
|
||||
selectedTarget: FlowTarget | FlowTargetSourceDest;
|
||||
displayTextOverride?: string[];
|
||||
selectedDirection?: FlowDirection;
|
||||
updateFlowTargetAction: (flowTarget: FlowTarget) => void;
|
||||
updateFlowTargetAction: (flowTarget: FlowTarget | FlowTargetSourceDest) => void;
|
||||
}
|
||||
|
||||
export type FlowTargetSelectProps = OwnProps;
|
||||
|
|
|
@ -15,7 +15,11 @@ import * as i18nIp from '../details/translations';
|
|||
|
||||
import { FlowTargetSelect } from '../flow_controls/flow_target_select';
|
||||
import { IpOverviewId } from '../../../timelines/components/field_renderers/field_renderers';
|
||||
import { FlowTarget, FlowDirection } from '../../../../common/search_strategy';
|
||||
import {
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
FlowDirection,
|
||||
} from '../../../../common/search_strategy';
|
||||
|
||||
const SelectTypeItem = styled(EuiFlexItem)`
|
||||
min-width: 180px;
|
||||
|
@ -24,13 +28,13 @@ const SelectTypeItem = styled(EuiFlexItem)`
|
|||
SelectTypeItem.displayName = 'SelectTypeItem';
|
||||
|
||||
interface Props {
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTarget | FlowTargetSourceDest;
|
||||
}
|
||||
|
||||
const getUpdatedFlowTargetPath = (
|
||||
location: Location,
|
||||
currentFlowTarget: FlowTarget,
|
||||
newFlowTarget: FlowTarget
|
||||
currentFlowTarget: FlowTarget | FlowTargetSourceDest,
|
||||
newFlowTarget: FlowTarget | FlowTargetSourceDest
|
||||
) => {
|
||||
const newPathame = location.pathname.replace(currentFlowTarget, newFlowTarget);
|
||||
|
||||
|
@ -42,7 +46,7 @@ export const FlowTargetSelectConnectedComponent: React.FC<Props> = ({ flowTarget
|
|||
const location = useLocation();
|
||||
|
||||
const updateNetworkDetailsFlowTarget = useCallback(
|
||||
(newFlowTarget: FlowTarget) => {
|
||||
(newFlowTarget: FlowTarget | FlowTargetSourceDest) => {
|
||||
const newPath = getUpdatedFlowTargetPath(location, flowTarget, newFlowTarget);
|
||||
history.push(newPath);
|
||||
},
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { FlowTarget, NetworkUsersItem } from '../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest, NetworkUsersItem } from '../../../../common/search_strategy';
|
||||
import { defaultToEmptyTag } from '../../../common/components/empty_value';
|
||||
import { Columns } from '../../../common/components/paginated_table';
|
||||
|
||||
|
@ -23,7 +23,10 @@ export type UsersColumns = [
|
|||
Columns<NetworkUsersItem['count']>
|
||||
];
|
||||
|
||||
export const getUsersColumns = (flowTarget: FlowTarget, tableId: string): UsersColumns => [
|
||||
export const getUsersColumns = (
|
||||
flowTarget: FlowTargetSourceDest,
|
||||
tableId: string
|
||||
): UsersColumns => [
|
||||
{
|
||||
field: 'node.user.name',
|
||||
name: i18n.USER_NAME,
|
||||
|
|
|
@ -24,7 +24,7 @@ import { networkModel } from '../../store';
|
|||
|
||||
import { UsersTable } from '.';
|
||||
import { mockUsersData } from './mock';
|
||||
import { FlowTarget } from '../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
jest.mock('../../../common/lib/kibana');
|
||||
|
||||
|
@ -42,7 +42,7 @@ describe('Users Table Component', () => {
|
|||
|
||||
const defaultProps = {
|
||||
data: mockUsersData.edges,
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
fakeTotalCount: getOr(50, 'fakeTotalCount', mockUsersData.pageInfo),
|
||||
id: 'user',
|
||||
isInspect: false,
|
||||
|
|
|
@ -14,7 +14,7 @@ import { assertUnreachable } from '../../../../common/utility_types';
|
|||
import { networkActions, networkModel, networkSelectors } from '../../store';
|
||||
import {
|
||||
Direction,
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
NetworkUsersEdges,
|
||||
NetworkUsersFields,
|
||||
SortField,
|
||||
|
@ -32,7 +32,7 @@ const tableType = networkModel.NetworkDetailsTableType.users;
|
|||
|
||||
interface UsersTableProps {
|
||||
data: NetworkUsersEdges[];
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
fakeTotalCount: number;
|
||||
id: string;
|
||||
isInspect: boolean;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { act, renderHook } from '@testing-library/react-hooks';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { useNetworkDns } from '.';
|
||||
import { ID, useNetworkDns } from '.';
|
||||
import { NetworkType } from '../../store/model';
|
||||
|
||||
describe('useNetworkDns', () => {
|
||||
|
@ -17,6 +17,7 @@ describe('useNetworkDns', () => {
|
|||
docValueFields: [],
|
||||
startDate: '2020-07-07T08:20:18.966Z',
|
||||
endDate: '2020-07-08T08:20:18.966Z',
|
||||
id: `${ID}-${NetworkType.page}`,
|
||||
indexNames: ['cool'],
|
||||
type: NetworkType.page,
|
||||
skip: false,
|
||||
|
|
|
@ -48,7 +48,7 @@ export interface NetworkDnsArgs {
|
|||
}
|
||||
|
||||
interface UseNetworkDns {
|
||||
id?: string;
|
||||
id: string;
|
||||
docValueFields: DocValueFields[];
|
||||
indexNames: string[];
|
||||
type: networkModel.NetworkType;
|
||||
|
@ -62,6 +62,7 @@ export const useNetworkDns = ({
|
|||
docValueFields,
|
||||
endDate,
|
||||
filterQuery,
|
||||
id,
|
||||
indexNames,
|
||||
skip,
|
||||
startDate,
|
||||
|
@ -96,7 +97,7 @@ export const useNetworkDns = ({
|
|||
const [networkDnsResponse, setNetworkDnsResponse] = useState<NetworkDnsArgs>({
|
||||
networkDns: [],
|
||||
histogram: [],
|
||||
id: ID,
|
||||
id,
|
||||
inspect: {
|
||||
dsl: [],
|
||||
response: [],
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { act, renderHook } from '@testing-library/react-hooks';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { useNetworkHttp } from '.';
|
||||
import { ID, useNetworkHttp } from '.';
|
||||
import { NetworkType } from '../../store/model';
|
||||
|
||||
describe('useNetworkHttp', () => {
|
||||
|
@ -17,6 +17,7 @@ describe('useNetworkHttp', () => {
|
|||
docValueFields: [],
|
||||
startDate: '2020-07-07T08:20:18.966Z',
|
||||
endDate: '2020-07-08T08:20:18.966Z',
|
||||
id: `${ID}-${NetworkType.page}`,
|
||||
indexNames: ['cool'],
|
||||
type: NetworkType.page,
|
||||
skip: false,
|
||||
|
|
|
@ -46,7 +46,7 @@ export interface NetworkHttpArgs {
|
|||
}
|
||||
|
||||
interface UseNetworkHttp {
|
||||
id?: string;
|
||||
id: string;
|
||||
ip?: string;
|
||||
indexNames: string[];
|
||||
type: networkModel.NetworkType;
|
||||
|
@ -59,7 +59,7 @@ interface UseNetworkHttp {
|
|||
export const useNetworkHttp = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
id = ID,
|
||||
id,
|
||||
indexNames,
|
||||
ip,
|
||||
skip,
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { act, renderHook } from '@testing-library/react-hooks';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { useNetworkTopCountries } from '.';
|
||||
import { ID, useNetworkTopCountries } from '.';
|
||||
import { NetworkType } from '../../store/model';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
|
@ -19,6 +19,7 @@ describe('useNetworkTopCountries', () => {
|
|||
flowTarget: FlowTargetSourceDest.source,
|
||||
startDate: '2020-07-07T08:20:18.966Z',
|
||||
endDate: '2020-07-08T08:20:18.966Z',
|
||||
id: `${ID}-${NetworkType.page}`,
|
||||
indexNames: ['cool'],
|
||||
type: NetworkType.page,
|
||||
skip: false,
|
||||
|
|
|
@ -38,27 +38,29 @@ export interface NetworkTopCountriesArgs {
|
|||
inspect: InspectResponse;
|
||||
isInspected: boolean;
|
||||
loadPage: (newActivePage: number) => void;
|
||||
networkTopCountries: NetworkTopCountriesEdges[];
|
||||
pageInfo: PageInfoPaginated;
|
||||
refetch: inputsModel.Refetch;
|
||||
networkTopCountries: NetworkTopCountriesEdges[];
|
||||
totalCount: number;
|
||||
}
|
||||
|
||||
interface UseNetworkTopCountries {
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
ip?: string;
|
||||
indexNames: string[];
|
||||
type: networkModel.NetworkType;
|
||||
filterQuery?: ESTermQuery | string;
|
||||
endDate: string;
|
||||
startDate: string;
|
||||
filterQuery?: ESTermQuery | string;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
id: string;
|
||||
indexNames: string[];
|
||||
ip?: string;
|
||||
skip: boolean;
|
||||
startDate: string;
|
||||
type: networkModel.NetworkType;
|
||||
}
|
||||
|
||||
export const useNetworkTopCountries = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
id,
|
||||
indexNames,
|
||||
ip,
|
||||
skip,
|
||||
|
@ -74,7 +76,6 @@ export const useNetworkTopCountries = ({
|
|||
const abortCtrl = useRef(new AbortController());
|
||||
const searchSubscription$ = useRef(new Subscription());
|
||||
const [loading, setLoading] = useState(false);
|
||||
const queryId = useMemo(() => `${ID}-${flowTarget}`, [flowTarget]);
|
||||
|
||||
const [networkTopCountriesRequest, setHostRequest] =
|
||||
useState<NetworkTopCountriesRequestOptions | null>(null);
|
||||
|
@ -99,7 +100,7 @@ export const useNetworkTopCountries = ({
|
|||
const [networkTopCountriesResponse, setNetworkTopCountriesResponse] =
|
||||
useState<NetworkTopCountriesArgs>({
|
||||
networkTopCountries: [],
|
||||
id: queryId,
|
||||
id,
|
||||
inspect: {
|
||||
dsl: [],
|
||||
response: [],
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { act, renderHook } from '@testing-library/react-hooks';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { useNetworkTopNFlow } from '.';
|
||||
import { ID, useNetworkTopNFlow } from '.';
|
||||
import { NetworkType } from '../../store/model';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
|
@ -19,6 +19,7 @@ describe('useNetworkTopNFlow', () => {
|
|||
flowTarget: FlowTargetSourceDest.source,
|
||||
startDate: '2020-07-07T08:20:18.966Z',
|
||||
endDate: '2020-07-08T08:20:18.966Z',
|
||||
id: `${ID}-${NetworkType.page}`,
|
||||
indexNames: ['cool'],
|
||||
type: NetworkType.page,
|
||||
skip: false,
|
||||
|
|
|
@ -46,6 +46,7 @@ export interface NetworkTopNFlowArgs {
|
|||
|
||||
interface UseNetworkTopNFlow {
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
id: string;
|
||||
ip?: string;
|
||||
indexNames: string[];
|
||||
type: networkModel.NetworkType;
|
||||
|
@ -59,6 +60,7 @@ export const useNetworkTopNFlow = ({
|
|||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
id,
|
||||
indexNames,
|
||||
ip,
|
||||
skip,
|
||||
|
@ -96,7 +98,7 @@ export const useNetworkTopNFlow = ({
|
|||
|
||||
const [networkTopNFlowResponse, setNetworkTopNFlowResponse] = useState<NetworkTopNFlowArgs>({
|
||||
networkTopNFlow: [],
|
||||
id: `${ID}-${flowTarget}`,
|
||||
id,
|
||||
inspect: {
|
||||
dsl: [],
|
||||
response: [],
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { act, renderHook } from '@testing-library/react-hooks';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { useNetworkTls } from '.';
|
||||
import { ID, useNetworkTls } from '.';
|
||||
import { NetworkType } from '../../store/model';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
|
@ -19,6 +19,7 @@ describe('useNetworkTls', () => {
|
|||
flowTarget: FlowTargetSourceDest.source,
|
||||
startDate: '2020-07-07T08:20:18.966Z',
|
||||
endDate: '2020-07-08T08:20:18.966Z',
|
||||
id: `${ID}-${NetworkType.page}`,
|
||||
indexNames: ['cool'],
|
||||
ip: '1.1.1.1',
|
||||
type: NetworkType.page,
|
||||
|
|
|
@ -51,14 +51,14 @@ interface UseNetworkTls {
|
|||
endDate: string;
|
||||
startDate: string;
|
||||
skip: boolean;
|
||||
id?: string;
|
||||
id: string;
|
||||
}
|
||||
|
||||
export const useNetworkTls = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
id = ID,
|
||||
id,
|
||||
indexNames,
|
||||
ip,
|
||||
skip,
|
||||
|
|
|
@ -7,17 +7,18 @@
|
|||
|
||||
import { act, renderHook } from '@testing-library/react-hooks';
|
||||
import { TestProviders } from '../../../common/mock';
|
||||
import { useNetworkUsers } from '.';
|
||||
import { ID, useNetworkUsers } from '.';
|
||||
import { NetworkType } from '../../store/model';
|
||||
import { FlowTarget } from '../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
describe('useNetworkUsers', () => {
|
||||
it('skip = true will cancel any running request', () => {
|
||||
const abortSpy = jest.spyOn(AbortController.prototype, 'abort');
|
||||
const localProps = {
|
||||
docValueFields: [],
|
||||
id: `${ID}-${NetworkType.page}`,
|
||||
ip: '1.1.1.1',
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
startDate: '2020-07-07T08:20:18.966Z',
|
||||
endDate: '2020-07-08T08:20:18.966Z',
|
||||
indexNames: ['cool'],
|
||||
|
|
|
@ -20,7 +20,7 @@ import { createFilter } from '../../../common/containers/helpers';
|
|||
import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers';
|
||||
import { networkSelectors } from '../../store';
|
||||
import {
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
NetworkQueries,
|
||||
NetworkUsersRequestOptions,
|
||||
NetworkUsersStrategyResponse,
|
||||
|
@ -46,12 +46,12 @@ export interface NetworkUsersArgs {
|
|||
}
|
||||
|
||||
interface UseNetworkUsers {
|
||||
id?: string;
|
||||
id: string;
|
||||
filterQuery?: ESTermQuery | string;
|
||||
endDate: string;
|
||||
startDate: string;
|
||||
skip: boolean;
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
ip: string;
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ export const useNetworkUsers = ({
|
|||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
id = ID,
|
||||
id,
|
||||
ip,
|
||||
skip,
|
||||
startDate,
|
||||
|
|
|
@ -21,7 +21,7 @@ import {
|
|||
import { useMountAppended } from '../../../common/utils/use_mount_appended';
|
||||
import { createStore, State } from '../../../common/store';
|
||||
import { NetworkDetails } from '.';
|
||||
import { FlowTarget } from '../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy';
|
||||
|
||||
jest.mock('@elastic/eui', () => {
|
||||
const original = jest.requireActual('@elastic/eui');
|
||||
|
@ -117,7 +117,7 @@ describe('Network Details', () => {
|
|||
const ip = '123.456.78.90';
|
||||
(useParams as jest.Mock).mockReturnValue({
|
||||
detailName: ip,
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
});
|
||||
const wrapper = mount(
|
||||
<TestProviders store={store}>
|
||||
|
@ -137,7 +137,7 @@ describe('Network Details', () => {
|
|||
});
|
||||
(useParams as jest.Mock).mockReturnValue({
|
||||
detailName: ip,
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
});
|
||||
const wrapper = mount(
|
||||
<TestProviders store={store}>
|
||||
|
|
|
@ -11,12 +11,15 @@ import { useDispatch } from 'react-redux';
|
|||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import { getEsQueryConfig } from '@kbn/data-plugin/common';
|
||||
import { useDeepEqualSelector } from '../../../common/hooks/use_selector';
|
||||
import {
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
LastEventIndexKey,
|
||||
} from '../../../../common/search_strategy';
|
||||
CountriesQueryTabBody,
|
||||
HttpQueryTabBody,
|
||||
IPsQueryTabBody,
|
||||
TlsQueryTabBody,
|
||||
UsersQueryTabBody,
|
||||
} from '../navigation';
|
||||
import { useDeepEqualSelector } from '../../../common/hooks/use_selector';
|
||||
import { FlowTargetSourceDest, LastEventIndexKey } from '../../../../common/search_strategy';
|
||||
import { useGlobalTime } from '../../../common/containers/use_global_time';
|
||||
import { FiltersGlobal } from '../../../common/components/filters_global';
|
||||
import { HeaderPage } from '../../../common/components/header_page';
|
||||
|
@ -39,11 +42,6 @@ import { inputsSelectors } from '../../../common/store';
|
|||
import { setAbsoluteRangeDatePicker } from '../../../common/store/inputs/actions';
|
||||
import { setNetworkDetailsTablesActivePageToZero } from '../../store/actions';
|
||||
import { SpyRoute } from '../../../common/utils/route/spy_routes';
|
||||
import { NetworkHttpQueryTable } from './network_http_query_table';
|
||||
import { NetworkTopCountriesQueryTable } from './network_top_countries_query_table';
|
||||
import { NetworkTopNFlowQueryTable } from './network_top_n_flow_query_table';
|
||||
import { TlsQueryTable } from './tls_query_table';
|
||||
import { UsersQueryTable } from './users_query_table';
|
||||
import { AnomaliesQueryTabBody } from '../../../common/containers/anomalies/anomalies_query_tab_body';
|
||||
import { networkModel } from '../../store';
|
||||
import { SecurityPageName } from '../../../app/types';
|
||||
|
@ -59,7 +57,7 @@ const NetworkDetailsComponent: React.FC = () => {
|
|||
const { to, from, setQuery, isInitializing } = useGlobalTime();
|
||||
const { detailName, flowTarget } = useParams<{
|
||||
detailName: string;
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
}>();
|
||||
const getGlobalQuerySelector = useMemo(() => inputsSelectors.globalQuerySelector(), []);
|
||||
const getGlobalFiltersQuerySelector = useMemo(
|
||||
|
@ -176,32 +174,32 @@ const NetworkDetailsComponent: React.FC = () => {
|
|||
|
||||
<ConditionalFlexGroup direction="column">
|
||||
<EuiFlexItem>
|
||||
<NetworkTopNFlowQueryTable
|
||||
<IPsQueryTabBody
|
||||
endDate={to}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={FlowTargetSourceDest.source}
|
||||
indexNames={selectedPatterns}
|
||||
indexPattern={indexPattern}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
setQuery={setQuery}
|
||||
indexPattern={indexPattern}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
|
||||
<EuiFlexItem>
|
||||
<NetworkTopNFlowQueryTable
|
||||
<IPsQueryTabBody
|
||||
endDate={to}
|
||||
flowTarget={FlowTargetSourceDest.destination}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={FlowTargetSourceDest.destination}
|
||||
indexNames={selectedPatterns}
|
||||
indexPattern={indexPattern}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
setQuery={setQuery}
|
||||
indexPattern={indexPattern}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
</ConditionalFlexGroup>
|
||||
|
@ -210,69 +208,69 @@ const NetworkDetailsComponent: React.FC = () => {
|
|||
|
||||
<ConditionalFlexGroup direction="column">
|
||||
<EuiFlexItem>
|
||||
<NetworkTopCountriesQueryTable
|
||||
<CountriesQueryTabBody
|
||||
endDate={to}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={FlowTargetSourceDest.source}
|
||||
indexNames={selectedPatterns}
|
||||
indexPattern={indexPattern}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
setQuery={setQuery}
|
||||
indexPattern={indexPattern}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
|
||||
<EuiFlexItem>
|
||||
<NetworkTopCountriesQueryTable
|
||||
<CountriesQueryTabBody
|
||||
endDate={to}
|
||||
flowTarget={FlowTargetSourceDest.destination}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={FlowTargetSourceDest.destination}
|
||||
indexNames={selectedPatterns}
|
||||
indexPattern={indexPattern}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
setQuery={setQuery}
|
||||
indexPattern={indexPattern}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
</ConditionalFlexGroup>
|
||||
|
||||
<EuiSpacer />
|
||||
|
||||
<UsersQueryTable
|
||||
<UsersQueryTabBody
|
||||
endDate={to}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={flowTarget}
|
||||
indexNames={selectedPatterns}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
setQuery={setQuery}
|
||||
/>
|
||||
|
||||
<EuiSpacer />
|
||||
|
||||
<NetworkHttpQueryTable
|
||||
<HttpQueryTabBody
|
||||
endDate={to}
|
||||
filterQuery={filterQuery}
|
||||
indexNames={selectedPatterns}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
setQuery={setQuery}
|
||||
/>
|
||||
|
||||
<EuiSpacer />
|
||||
|
||||
<TlsQueryTable
|
||||
<TlsQueryTabBody
|
||||
endDate={to}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={flowTarget as unknown as FlowTargetSourceDest}
|
||||
flowTarget={flowTarget}
|
||||
indexNames={selectedPatterns}
|
||||
ip={ip}
|
||||
setQuery={setQuery}
|
||||
|
@ -284,18 +282,18 @@ const NetworkDetailsComponent: React.FC = () => {
|
|||
<EuiSpacer />
|
||||
|
||||
<AnomaliesQueryTabBody
|
||||
filterQuery={filterQuery}
|
||||
setQuery={setQuery}
|
||||
startDate={from}
|
||||
AnomaliesTableComponent={AnomaliesNetworkTable}
|
||||
endDate={to}
|
||||
skip={shouldSkip}
|
||||
filterQuery={filterQuery}
|
||||
flowTarget={flowTarget}
|
||||
hideHistogramIfEmpty={true}
|
||||
indexNames={selectedPatterns}
|
||||
ip={ip}
|
||||
type={type}
|
||||
flowTarget={flowTarget}
|
||||
narrowDateRange={narrowDateRange}
|
||||
hideHistogramIfEmpty={true}
|
||||
AnomaliesTableComponent={AnomaliesNetworkTable}
|
||||
setQuery={setQuery}
|
||||
skip={shouldSkip}
|
||||
startDate={from}
|
||||
type={type}
|
||||
/>
|
||||
</SecuritySolutionPageWrapper>
|
||||
</>
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { getOr } from 'lodash/fp';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
import { OwnProps } from './types';
|
||||
import { useNetworkHttp, ID } from '../../containers/network_http';
|
||||
import { NetworkHttpTable } from '../../components/network_http_table';
|
||||
import { useQueryToggle } from '../../../common/containers/query_toggle';
|
||||
|
||||
const NetworkHttpTableManage = manageQuery(NetworkHttpTable);
|
||||
|
||||
export const NetworkHttpQueryTable = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
indexNames,
|
||||
ip,
|
||||
setQuery,
|
||||
skip,
|
||||
startDate,
|
||||
type,
|
||||
}: OwnProps) => {
|
||||
const { toggleStatus } = useQueryToggle(ID);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
}, [skip, toggleStatus]);
|
||||
const [
|
||||
loading,
|
||||
{ id, inspect, isInspected, loadPage, networkHttp, pageInfo, refetch, totalCount },
|
||||
] = useNetworkHttp({
|
||||
endDate,
|
||||
filterQuery,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
<NetworkHttpTableManage
|
||||
data={networkHttp}
|
||||
fakeTotalCount={getOr(50, 'fakeTotalCount', pageInfo)}
|
||||
id={id}
|
||||
inspect={inspect}
|
||||
isInspect={isInspected}
|
||||
loading={loading}
|
||||
loadPage={loadPage}
|
||||
refetch={refetch}
|
||||
setQuery={setQuery}
|
||||
setQuerySkip={setQuerySkip}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
totalCount={totalCount}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
NetworkHttpQueryTable.displayName = 'NetworkHttpQueryTable';
|
|
@ -1,70 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { getOr } from 'lodash/fp';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
import { NetworkWithIndexComponentsQueryTableProps } from './types';
|
||||
import { useNetworkTopCountries, ID } from '../../containers/network_top_countries';
|
||||
import { NetworkTopCountriesTable } from '../../components/network_top_countries_table';
|
||||
import { useQueryToggle } from '../../../common/containers/query_toggle';
|
||||
|
||||
const NetworkTopCountriesTableManage = manageQuery(NetworkTopCountriesTable);
|
||||
|
||||
export const NetworkTopCountriesQueryTable = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
indexNames,
|
||||
ip,
|
||||
setQuery,
|
||||
skip,
|
||||
startDate,
|
||||
type,
|
||||
indexPattern,
|
||||
}: NetworkWithIndexComponentsQueryTableProps) => {
|
||||
const { toggleStatus } = useQueryToggle(`${ID}-${flowTarget}`);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
}, [skip, toggleStatus]);
|
||||
const [
|
||||
loading,
|
||||
{ id, inspect, isInspected, loadPage, networkTopCountries, pageInfo, refetch, totalCount },
|
||||
] = useNetworkTopCountries({
|
||||
endDate,
|
||||
flowTarget,
|
||||
filterQuery,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
<NetworkTopCountriesTableManage
|
||||
data={networkTopCountries}
|
||||
fakeTotalCount={getOr(50, 'fakeTotalCount', pageInfo)}
|
||||
flowTargeted={flowTarget}
|
||||
id={id}
|
||||
indexPattern={indexPattern}
|
||||
inspect={inspect}
|
||||
isInspect={isInspected}
|
||||
loading={loading}
|
||||
loadPage={loadPage}
|
||||
refetch={refetch}
|
||||
setQuery={setQuery}
|
||||
setQuerySkip={setQuerySkip}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
totalCount={totalCount}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
NetworkTopCountriesQueryTable.displayName = 'NetworkTopCountriesQueryTable';
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { getOr } from 'lodash/fp';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
import { NetworkTopNFlowTable } from '../../components/network_top_n_flow_table';
|
||||
import { useNetworkTopNFlow, ID } from '../../containers/network_top_n_flow';
|
||||
import { NetworkWithIndexComponentsQueryTableProps } from './types';
|
||||
import { useQueryToggle } from '../../../common/containers/query_toggle';
|
||||
|
||||
const NetworkTopNFlowTableManage = manageQuery(NetworkTopNFlowTable);
|
||||
|
||||
export const NetworkTopNFlowQueryTable = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
ip,
|
||||
indexNames,
|
||||
setQuery,
|
||||
skip,
|
||||
startDate,
|
||||
type,
|
||||
}: NetworkWithIndexComponentsQueryTableProps) => {
|
||||
const { toggleStatus } = useQueryToggle(`${ID}-${flowTarget}`);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
}, [skip, toggleStatus]);
|
||||
const [
|
||||
loading,
|
||||
{ id, inspect, isInspected, loadPage, networkTopNFlow, pageInfo, refetch, totalCount },
|
||||
] = useNetworkTopNFlow({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
<NetworkTopNFlowTableManage
|
||||
data={networkTopNFlow}
|
||||
fakeTotalCount={getOr(50, 'fakeTotalCount', pageInfo)}
|
||||
flowTargeted={flowTarget}
|
||||
id={id}
|
||||
inspect={inspect}
|
||||
isInspect={isInspected}
|
||||
loading={loading}
|
||||
loadPage={loadPage}
|
||||
refetch={refetch}
|
||||
setQuery={setQuery}
|
||||
setQuerySkip={setQuerySkip}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
totalCount={totalCount}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
NetworkTopNFlowQueryTable.displayName = 'NetworkTopNFlowQueryTable';
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { getOr } from 'lodash/fp';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
import { TlsTable } from '../../components/tls_table';
|
||||
import { ID, useNetworkTls } from '../../containers/tls';
|
||||
import { TlsQueryTableComponentProps } from './types';
|
||||
import { useQueryToggle } from '../../../common/containers/query_toggle';
|
||||
|
||||
const TlsTableManage = manageQuery(TlsTable);
|
||||
|
||||
export const TlsQueryTable = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
indexNames,
|
||||
ip,
|
||||
setQuery,
|
||||
skip,
|
||||
startDate,
|
||||
type,
|
||||
}: TlsQueryTableComponentProps) => {
|
||||
const { toggleStatus } = useQueryToggle(ID);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
}, [skip, toggleStatus]);
|
||||
const [loading, { id, inspect, isInspected, tls, totalCount, pageInfo, loadPage, refetch }] =
|
||||
useNetworkTls({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
<TlsTableManage
|
||||
data={tls}
|
||||
id={id}
|
||||
inspect={inspect}
|
||||
isInspect={isInspected}
|
||||
fakeTotalCount={getOr(50, 'fakeTotalCount', pageInfo)}
|
||||
loading={loading}
|
||||
loadPage={loadPage}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
refetch={refetch}
|
||||
setQuery={setQuery}
|
||||
setQuerySkip={setQuerySkip}
|
||||
totalCount={totalCount}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
TlsQueryTable.displayName = 'TlsQueryTable';
|
|
@ -10,7 +10,6 @@ import { getOr } from 'lodash/fp';
|
|||
|
||||
import { NetworkTopCountriesTable } from '../../components/network_top_countries_table';
|
||||
import { useNetworkTopCountries, ID } from '../../containers/network_top_countries';
|
||||
import { networkModel } from '../../store';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
|
||||
import { IPsQueryTabBodyProps as CountriesQueryTabBodyProps } from './types';
|
||||
|
@ -21,14 +20,17 @@ const NetworkTopCountriesTableManage = manageQuery(NetworkTopCountriesTable);
|
|||
export const CountriesQueryTabBody = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
indexNames,
|
||||
indexPattern,
|
||||
ip,
|
||||
setQuery,
|
||||
skip,
|
||||
startDate,
|
||||
setQuery,
|
||||
indexPattern,
|
||||
flowTarget,
|
||||
type,
|
||||
}: CountriesQueryTabBodyProps) => {
|
||||
const { toggleStatus } = useQueryToggle(`${ID}-${flowTarget}`);
|
||||
const queryId = `${ID}-${flowTarget}-${type}`;
|
||||
const { toggleStatus } = useQueryToggle(queryId);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
|
@ -40,10 +42,12 @@ export const CountriesQueryTabBody = ({
|
|||
endDate,
|
||||
flowTarget,
|
||||
filterQuery,
|
||||
id: queryId,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type: networkModel.NetworkType.page,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
|
@ -62,7 +66,7 @@ export const CountriesQueryTabBody = ({
|
|||
setQuerySkip={setQuerySkip}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
totalCount={totalCount}
|
||||
type={networkModel.NetworkType.page}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
MatrixHistogramOption,
|
||||
MatrixHistogramConfigs,
|
||||
} from '../../../common/components/matrix_histogram/types';
|
||||
import * as i18n from '../translations';
|
||||
import * as i18n from './translations';
|
||||
import { MatrixHistogram } from '../../../common/components/matrix_histogram';
|
||||
import { MatrixHistogramType } from '../../../../common/search_strategy/security_solution';
|
||||
import { networkSelectors } from '../../store';
|
||||
|
@ -72,8 +72,8 @@ const DnsQueryTabBodyComponent: React.FC<NetworkComponentQueryProps> = ({
|
|||
}
|
||||
};
|
||||
}, [deleteQuery]);
|
||||
|
||||
const { toggleStatus } = useQueryToggle(ID);
|
||||
const queryId = `${ID}-${type}`;
|
||||
const { toggleStatus } = useQueryToggle(queryId);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
|
@ -85,6 +85,7 @@ const DnsQueryTabBodyComponent: React.FC<NetworkComponentQueryProps> = ({
|
|||
docValueFields: docValueFields ?? [],
|
||||
endDate,
|
||||
filterQuery,
|
||||
id: queryId,
|
||||
indexNames,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
|
|
|
@ -10,7 +10,6 @@ import { getOr } from 'lodash/fp';
|
|||
|
||||
import { NetworkHttpTable } from '../../components/network_http_table';
|
||||
import { ID, useNetworkHttp } from '../../containers/network_http';
|
||||
import { networkModel } from '../../store';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
|
||||
import { HttpQueryTabBodyProps } from './types';
|
||||
|
@ -25,8 +24,10 @@ export const HttpQueryTabBody = ({
|
|||
skip,
|
||||
startDate,
|
||||
setQuery,
|
||||
type,
|
||||
}: HttpQueryTabBodyProps) => {
|
||||
const { toggleStatus } = useQueryToggle(ID);
|
||||
const queryId = `${ID}-${type}`;
|
||||
const { toggleStatus } = useQueryToggle(queryId);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
|
@ -37,10 +38,11 @@ export const HttpQueryTabBody = ({
|
|||
] = useNetworkHttp({
|
||||
endDate,
|
||||
filterQuery,
|
||||
id: queryId,
|
||||
indexNames,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type: networkModel.NetworkType.page,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
|
@ -57,7 +59,7 @@ export const HttpQueryTabBody = ({
|
|||
setQuerySkip={setQuerySkip}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
totalCount={totalCount}
|
||||
type={networkModel.NetworkType.page}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -9,3 +9,10 @@ export * from './network_routes';
|
|||
export * from './network_routes_loading';
|
||||
export * from './nav_tabs';
|
||||
export * from './utils';
|
||||
export * from './alerts_query_tab_body';
|
||||
export * from './countries_query_tab_body';
|
||||
export * from './dns_query_tab_body';
|
||||
export * from './http_query_tab_body';
|
||||
export * from './ips_query_tab_body';
|
||||
export * from './tls_query_tab_body';
|
||||
export * from './users_query_tab_body';
|
||||
|
|
|
@ -10,7 +10,6 @@ import { getOr } from 'lodash/fp';
|
|||
|
||||
import { NetworkTopNFlowTable } from '../../components/network_top_n_flow_table';
|
||||
import { ID, useNetworkTopNFlow } from '../../containers/network_top_n_flow';
|
||||
import { networkModel } from '../../store';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
|
||||
import { IPsQueryTabBodyProps } from './types';
|
||||
|
@ -21,13 +20,16 @@ const NetworkTopNFlowTableManage = manageQuery(NetworkTopNFlowTable);
|
|||
export const IPsQueryTabBody = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
indexNames,
|
||||
ip,
|
||||
setQuery,
|
||||
skip,
|
||||
startDate,
|
||||
setQuery,
|
||||
flowTarget,
|
||||
type,
|
||||
}: IPsQueryTabBodyProps) => {
|
||||
const { toggleStatus } = useQueryToggle(`${ID}-${flowTarget}`);
|
||||
const queryId = `${ID}-${flowTarget}-${type}`;
|
||||
const { toggleStatus } = useQueryToggle(queryId);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
|
@ -39,10 +41,12 @@ export const IPsQueryTabBody = ({
|
|||
endDate,
|
||||
flowTarget,
|
||||
filterQuery,
|
||||
id: queryId,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
type: networkModel.NetworkType.page,
|
||||
type,
|
||||
});
|
||||
|
||||
return (
|
||||
|
@ -60,7 +64,7 @@ export const IPsQueryTabBody = ({
|
|||
setQuerySkip={setQuerySkip}
|
||||
showMorePagesIndicator={getOr(false, 'showMorePagesIndicator', pageInfo)}
|
||||
totalCount={totalCount}
|
||||
type={networkModel.NetworkType.page}
|
||||
type={type}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -13,17 +13,19 @@ import { EuiFlexItem, EuiSpacer } from '@elastic/eui';
|
|||
import { FlowTargetSourceDest } from '../../../../common/search_strategy/security_solution/network';
|
||||
import { scoreIntervalToDateTime } from '../../../common/components/ml/score/score_interval_to_datetime';
|
||||
|
||||
import { IPsQueryTabBody } from './ips_query_tab_body';
|
||||
import { CountriesQueryTabBody } from './countries_query_tab_body';
|
||||
import { HttpQueryTabBody } from './http_query_tab_body';
|
||||
import {
|
||||
CountriesQueryTabBody,
|
||||
DnsQueryTabBody,
|
||||
HttpQueryTabBody,
|
||||
IPsQueryTabBody,
|
||||
NetworkAlertsQueryTabBody,
|
||||
TlsQueryTabBody,
|
||||
} from '.';
|
||||
import { AnomaliesQueryTabBody } from '../../../common/containers/anomalies/anomalies_query_tab_body';
|
||||
import { AnomaliesNetworkTable } from '../../../common/components/ml/tables/anomalies_network_table';
|
||||
import { DnsQueryTabBody } from './dns_query_tab_body';
|
||||
import { ConditionalFlexGroup } from './conditional_flex_group';
|
||||
import { NetworkRoutesProps, NetworkRouteType } from './types';
|
||||
import { TlsQueryTabBody } from './tls_query_tab_body';
|
||||
import { Anomaly } from '../../../common/components/ml/types';
|
||||
import { NetworkAlertsQueryTabBody } from './alerts_query_tab_body';
|
||||
import { UpdateDateRange } from '../../../common/components/charts/common';
|
||||
import { NETWORK_PATH } from '../../../../common/constants';
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@ import { getOr } from 'lodash/fp';
|
|||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
import { useNetworkTls, ID } from '../../containers/tls';
|
||||
import { TlsTable } from '../../components/tls_table';
|
||||
import { TlsQueryTabBodyProps } from './types';
|
||||
import { FTQueryTabBodyProps } from './types';
|
||||
import { useQueryToggle } from '../../../common/containers/query_toggle';
|
||||
|
||||
const TlsTableManage = manageQuery(TlsTable);
|
||||
|
||||
const TlsQueryTabBodyComponent: React.FC<TlsQueryTabBodyProps> = ({
|
||||
const TlsQueryTabBodyComponent: React.FC<FTQueryTabBodyProps> = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
|
@ -26,7 +26,8 @@ const TlsQueryTabBodyComponent: React.FC<TlsQueryTabBodyProps> = ({
|
|||
startDate,
|
||||
type,
|
||||
}) => {
|
||||
const { toggleStatus } = useQueryToggle(ID);
|
||||
const queryId = `${ID}-${type}`;
|
||||
const { toggleStatus } = useQueryToggle(queryId);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
|
@ -36,6 +37,7 @@ const TlsQueryTabBodyComponent: React.FC<TlsQueryTabBodyProps> = ({
|
|||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
id: queryId,
|
||||
indexNames,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
import { i18n } from '@kbn/i18n';
|
||||
export const ERROR_FETCHING_DNS_DATA = i18n.translate(
|
||||
'xpack.securitySolution.hosts.navigation.dns.histogram.errorFetchingDnsData',
|
||||
{
|
||||
defaultMessage: 'Failed to query DNS data',
|
||||
}
|
||||
);
|
||||
|
||||
export const DOMAINS_COUNT_BY = (groupByField: string) =>
|
||||
i18n.translate('xpack.securitySolution.network.dns.stackByUniqueSubdomain', {
|
||||
values: { groupByField },
|
||||
defaultMessage: 'Top domains by {groupByField}',
|
||||
});
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
import type { DataViewBase } from '@kbn/es-query';
|
||||
import { NarrowDateRange } from '../../../common/components/ml/types';
|
||||
import { ESTermQuery } from '../../../../common/typed_json';
|
||||
|
||||
import { NavTab } from '../../../common/components/navigation/types';
|
||||
|
@ -14,17 +15,17 @@ import { networkModel } from '../../store';
|
|||
import { GlobalTimeArgs } from '../../../common/containers/use_global_time';
|
||||
|
||||
import { SetAbsoluteRangeDatePicker } from '../types';
|
||||
import { NarrowDateRange } from '../../../common/components/ml/types';
|
||||
import { DocValueFields } from '../../../common/containers/source';
|
||||
|
||||
interface QueryTabBodyProps extends Pick<GlobalTimeArgs, 'setQuery' | 'deleteQuery'> {
|
||||
skip: boolean;
|
||||
type: networkModel.NetworkType;
|
||||
startDate: string;
|
||||
endDate: string;
|
||||
filterQuery?: string | ESTermQuery;
|
||||
narrowDateRange?: NarrowDateRange;
|
||||
indexNames: string[];
|
||||
ip?: string;
|
||||
narrowDateRange?: NarrowDateRange;
|
||||
skip: boolean;
|
||||
startDate: string;
|
||||
type: networkModel.NetworkType;
|
||||
}
|
||||
|
||||
export type NetworkComponentQueryProps = QueryTabBodyProps & {
|
||||
|
@ -32,18 +33,19 @@ export type NetworkComponentQueryProps = QueryTabBodyProps & {
|
|||
};
|
||||
|
||||
export type IPsQueryTabBodyProps = QueryTabBodyProps & {
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
indexPattern: DataViewBase;
|
||||
};
|
||||
|
||||
export type FTQueryTabBodyProps = QueryTabBodyProps & {
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
};
|
||||
|
||||
export type TlsQueryTabBodyProps = QueryTabBodyProps & {
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
ip?: string;
|
||||
export type IPQueryTabBodyProps = FTQueryTabBodyProps & {
|
||||
ip: string;
|
||||
};
|
||||
|
||||
export type HttpQueryTabBodyProps = QueryTabBodyProps & {
|
||||
ip?: string;
|
||||
};
|
||||
export type HttpQueryTabBodyProps = QueryTabBodyProps;
|
||||
|
||||
export type NetworkRoutesProps = GlobalTimeArgs & {
|
||||
docValueFields: DocValueFields[];
|
||||
|
@ -54,6 +56,15 @@ export type NetworkRoutesProps = GlobalTimeArgs & {
|
|||
setAbsoluteRangeDatePicker: SetAbsoluteRangeDatePicker;
|
||||
};
|
||||
|
||||
export enum NetworkRouteType {
|
||||
flows = 'flows',
|
||||
dns = 'dns',
|
||||
anomalies = 'anomalies',
|
||||
tls = 'tls',
|
||||
http = 'http',
|
||||
alerts = 'external-alerts',
|
||||
}
|
||||
|
||||
export type KeyNetworkNavTabWithoutMlPermission = NetworkRouteType.dns &
|
||||
NetworkRouteType.flows &
|
||||
NetworkRouteType.http &
|
||||
|
@ -67,15 +78,6 @@ type KeyNetworkNavTab = KeyNetworkNavTabWithoutMlPermission | KeyNetworkNavTabWi
|
|||
|
||||
export type NetworkNavTab = Record<KeyNetworkNavTab, NavTab>;
|
||||
|
||||
export enum NetworkRouteType {
|
||||
flows = 'flows',
|
||||
dns = 'dns',
|
||||
anomalies = 'anomalies',
|
||||
tls = 'tls',
|
||||
http = 'http',
|
||||
alerts = 'external-alerts',
|
||||
}
|
||||
|
||||
export type GetNetworkRoutePath = (
|
||||
capabilitiesFetched: boolean,
|
||||
hasMlUserPermission: boolean
|
||||
|
|
|
@ -9,13 +9,13 @@ import React, { useEffect, useState } from 'react';
|
|||
import { getOr } from 'lodash/fp';
|
||||
import { manageQuery } from '../../../common/components/page/manage_query';
|
||||
import { useNetworkUsers, ID } from '../../containers/users';
|
||||
import { NetworkComponentsQueryProps } from './types';
|
||||
import { IPQueryTabBodyProps } from './types';
|
||||
import { UsersTable } from '../../components/users_table';
|
||||
import { useQueryToggle } from '../../../common/containers/query_toggle';
|
||||
|
||||
const UsersTableManage = manageQuery(UsersTable);
|
||||
|
||||
export const UsersQueryTable = ({
|
||||
export const UsersQueryTabBody = ({
|
||||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
|
@ -24,8 +24,9 @@ export const UsersQueryTable = ({
|
|||
skip,
|
||||
startDate,
|
||||
type,
|
||||
}: NetworkComponentsQueryProps) => {
|
||||
const { toggleStatus } = useQueryToggle(ID);
|
||||
}: IPQueryTabBodyProps) => {
|
||||
const queryId = `${ID}-${type}`;
|
||||
const { toggleStatus } = useQueryToggle(queryId);
|
||||
const [querySkip, setQuerySkip] = useState(skip || !toggleStatus);
|
||||
useEffect(() => {
|
||||
setQuerySkip(skip || !toggleStatus);
|
||||
|
@ -37,6 +38,7 @@ export const UsersQueryTable = ({
|
|||
endDate,
|
||||
filterQuery,
|
||||
flowTarget,
|
||||
id: queryId,
|
||||
ip,
|
||||
skip: querySkip,
|
||||
startDate,
|
||||
|
@ -62,4 +64,4 @@ export const UsersQueryTable = ({
|
|||
);
|
||||
};
|
||||
|
||||
UsersQueryTable.displayName = 'UsersQueryTable';
|
||||
UsersQueryTabBody.displayName = 'UsersQueryTable';
|
|
@ -29,13 +29,6 @@ export const NAVIGATION_DNS_TITLE = i18n.translate(
|
|||
}
|
||||
);
|
||||
|
||||
export const ERROR_FETCHING_DNS_DATA = i18n.translate(
|
||||
'xpack.securitySolution.hosts.navigation.dns.histogram.errorFetchingDnsData',
|
||||
{
|
||||
defaultMessage: 'Failed to query DNS data',
|
||||
}
|
||||
);
|
||||
|
||||
export const NAVIGATION_TLS_TITLE = i18n.translate(
|
||||
'xpack.securitySolution.network.navigation.tlsTitle',
|
||||
{
|
||||
|
@ -63,9 +56,3 @@ export const NAVIGATION_ALERTS_TITLE = i18n.translate(
|
|||
defaultMessage: 'External alerts',
|
||||
}
|
||||
);
|
||||
|
||||
export const DOMAINS_COUNT_BY = (groupByField: string) =>
|
||||
i18n.translate('xpack.securitySolution.network.dns.stackByUniqueSubdomain', {
|
||||
values: { groupByField },
|
||||
defaultMessage: 'Top domains by {groupByField}',
|
||||
});
|
||||
|
|
|
@ -15,6 +15,7 @@ import { HostEcs } from '../../../../common/ecs/host';
|
|||
import {
|
||||
AutonomousSystem,
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
NetworkDetailsStrategyResponse,
|
||||
} from '../../../../common/search_strategy';
|
||||
import { escapeDataProviderId } from '../../../common/components/drag_and_drop/helpers';
|
||||
|
@ -75,7 +76,7 @@ export const dateRenderer = (timestamp?: string | null): React.ReactElement => (
|
|||
|
||||
export const autonomousSystemRenderer = (
|
||||
as: AutonomousSystem,
|
||||
flowTarget: FlowTarget,
|
||||
flowTarget: FlowTarget | FlowTargetSourceDest,
|
||||
contextID?: string,
|
||||
isDraggable?: boolean
|
||||
): React.ReactElement =>
|
||||
|
|
|
@ -12,7 +12,7 @@ import deepEqual from 'fast-deep-equal';
|
|||
|
||||
import { EuiButtonEmpty, EuiButtonIcon } from '@elastic/eui';
|
||||
import { StatefulEventContext } from '@kbn/timelines-plugin/public';
|
||||
import { FlowTarget } from '../../../../common/search_strategy/security_solution/network';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy/security_solution/network';
|
||||
import {
|
||||
DragEffects,
|
||||
DraggableWrapper,
|
||||
|
@ -198,9 +198,9 @@ const AddressLinksItemComponent: React.FC<AddressLinksItemProps> = ({
|
|||
panelView: 'networkDetail',
|
||||
params: {
|
||||
ip: address,
|
||||
flowTarget: fieldName.includes(FlowTarget.destination)
|
||||
? FlowTarget.destination
|
||||
: FlowTarget.source,
|
||||
flowTarget: fieldName.includes(FlowTargetSourceDest.destination)
|
||||
? FlowTargetSourceDest.destination
|
||||
: FlowTargetSourceDest.source,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ import {
|
|||
TimelineId,
|
||||
TimelineTabs,
|
||||
} from '../../../../common/types/timeline';
|
||||
import { FlowTarget } from '../../../../common/search_strategy/security_solution/network';
|
||||
import { FlowTargetSourceDest } from '../../../../common/search_strategy/security_solution/network';
|
||||
import { EventDetailsPanel } from './event_details';
|
||||
import { useKibana } from '../../../common/lib/kibana';
|
||||
import { mockCasesContext } from '@kbn/cases-plugin/public/mocks/mock_cases_context';
|
||||
|
@ -66,7 +66,7 @@ describe('Details Panel Component', () => {
|
|||
panelView: 'networkDetail',
|
||||
params: {
|
||||
ip: 'woohoo!',
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -12,7 +12,7 @@ import React, { useCallback, useMemo } from 'react';
|
|||
import { useDispatch } from 'react-redux';
|
||||
import { getEsQueryConfig } from '@kbn/data-plugin/common';
|
||||
import { useInvalidFilterQuery } from '../../../../common/hooks/use_invalid_filter_query';
|
||||
import { FlowTarget } from '../../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
|
||||
import { NetworkDetailsLink } from '../../../../common/components/links';
|
||||
import { IpOverview } from '../../../../network/components/details';
|
||||
import { useDeepEqualSelector } from '../../../../common/hooks/use_selector';
|
||||
|
@ -30,7 +30,7 @@ import { useAnomaliesTableData } from '../../../../common/components/ml/anomaly/
|
|||
import { LandingCards } from '../../../../common/components/landing_cards';
|
||||
|
||||
interface ExpandableNetworkProps {
|
||||
expandedNetwork: { ip: string; flowTarget: FlowTarget };
|
||||
expandedNetwork: { ip: string; flowTarget: FlowTargetSourceDest };
|
||||
}
|
||||
|
||||
const StyledTitle = styled.h4`
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import React from 'react';
|
||||
import styled from 'styled-components';
|
||||
import { FlowTarget } from '../../../../../common/search_strategy';
|
||||
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
|
||||
import {
|
||||
ExpandableNetworkDetailsTitle,
|
||||
ExpandableNetworkDetailsPageLink,
|
||||
|
@ -59,7 +59,7 @@ const StyledPanelContent = styled.div`
|
|||
|
||||
interface NetworkDetailsProps {
|
||||
contextID: string;
|
||||
expandedNetwork: { ip: string; flowTarget: FlowTarget };
|
||||
expandedNetwork: { ip: string; flowTarget: FlowTargetSourceDest };
|
||||
handleOnNetworkClosed: () => void;
|
||||
isFlyoutView?: boolean;
|
||||
isDraggable?: boolean;
|
||||
|
|
|
@ -9,7 +9,7 @@ import type { IEsSearchResponse } from '@kbn/data-plugin/common';
|
|||
|
||||
import {
|
||||
Direction,
|
||||
FlowTarget,
|
||||
FlowTargetSourceDest,
|
||||
NetworkQueries,
|
||||
NetworkUsersFields,
|
||||
NetworkUsersRequestOptions,
|
||||
|
@ -28,7 +28,7 @@ export const mockOptions: NetworkUsersRequestOptions = {
|
|||
],
|
||||
factoryQueryType: NetworkQueries.users,
|
||||
filterQuery: '{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[]}}',
|
||||
flowTarget: FlowTarget.source,
|
||||
flowTarget: FlowTargetSourceDest.source,
|
||||
ip: '10.142.0.7',
|
||||
pagination: { activePage: 0, cursorStart: 0, fakePossibleCount: 50, querySize: 10 },
|
||||
sort: { field: NetworkUsersFields.name, direction: Direction.asc },
|
||||
|
|
|
@ -503,20 +503,16 @@ export type TimelineExpandedUserType =
|
|||
};
|
||||
}
|
||||
| EmptyObject;
|
||||
|
||||
enum FlowTarget {
|
||||
client = 'client',
|
||||
enum FlowTargetSourceDest {
|
||||
destination = 'destination',
|
||||
server = 'server',
|
||||
source = 'source',
|
||||
}
|
||||
|
||||
export type TimelineExpandedNetworkType =
|
||||
| {
|
||||
panelView?: 'networkDetail';
|
||||
params?: {
|
||||
ip: string;
|
||||
flowTarget: FlowTarget;
|
||||
flowTarget: FlowTargetSourceDest;
|
||||
};
|
||||
}
|
||||
| EmptyObject;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue