/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
import { EuiBasicTableColumn, EuiButton, EuiEmptyPrompt, EuiLink } from '@elastic/eui';
import { ROUTES } from '../../../../utils/constants';
import React, { useCallback } from 'react';
import { DetectorItem } from '../../models/interfaces';
import { TableWidget } from './TableWidget';
import { WidgetContainer } from './WidgetContainer';
import { DetectorHit } from '../../../../../server/models/interfaces';
import { RouteComponentProps } from 'react-router-dom';
import { formatRuleType } from '../../../../utils/helpers';
type DetectorIdToHit = { [id: string]: DetectorHit };
const getColumns = (
detectorIdToHit: DetectorIdToHit,
showDetectorDetails: (hit: DetectorHit) => void
): EuiBasicTableColumn[] => [
{
name: 'Detector name',
render: (item: DetectorItem) => (
showDetectorDetails(detectorIdToHit[item.id])}>
{item.detectorName}
),
},
{
field: 'status',
name: 'Status',
sortable: false,
align: 'left',
},
{
field: 'logTypes',
name: 'Log types',
sortable: true,
align: 'left',
render: (logType: string) => formatRuleType(logType),
},
];
export interface DetectorsWidgetProps extends RouteComponentProps {
detectorHits: DetectorHit[];
loading?: boolean;
}
export const DetectorsWidget: React.FC = ({
detectorHits,
history,
loading = false,
}) => {
const detectors = detectorHits.map((detectorHit) => ({
detectorName: detectorHit._source.name,
id: detectorHit._id,
logTypes: detectorHit._source.detector_type.toLowerCase(),
status: detectorHit._source.enabled ? 'Active' : 'Inactive',
}));
const detectorIdToHit: DetectorIdToHit = {};
detectorHits.forEach((hit) => {
detectorIdToHit[hit._id] = hit;
});
const showDetectorDetails = useCallback((detectorHit: DetectorHit) => {
history.push({
pathname: `${ROUTES.DETECTOR_DETAILS}/${detectorHit._id}`,
state: { detectorHit },
});
}, []);
const widgetEmptyMessage =
detectors.length === 0 ? (
No security detectors.Create a detector to
generate findings.
}
actions={[
Create detector
,
]}
/>
) : undefined;
const actions = React.useMemo(
() => [
View all detectors,
Create detector,
],
[]
);
return (
);
};