Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[frontend/backend] File indexing advanced configuration (#1483) #4882

Merged
merged 23 commits into from
Nov 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
87c2326
[backend/frontend] Implement reset file indexing
marieflorescontact Nov 10, 2023
275ce24
[frontend] formatting and code cleaning
SouadHadjiat Nov 13, 2023
267fd4b
[back/frontend] Get manager_settings
marieflorescontact Nov 13, 2023
63db730
[frontend] Create parent component FileIndexingConfigurationAndMonito…
marieflorescontact Nov 14, 2023
35e9766
[frontend] Get settings from ManagerConfiguration
marieflorescontact Nov 14, 2023
66d9754
[backend/frontend] save manager configuration setting
SouadHadjiat Nov 14, 2023
b2b30ab
[backend/frontend] Get metrics by mimeType
marieflorescontact Nov 15, 2023
96fd4f8
[frontend] Fix deepscan
marieflorescontact Nov 16, 2023
572bc90
[frontend] File indexing configuration
marieflorescontact Nov 16, 2023
620fb74
[backend/frontend] fix performance issues with loadFile and add entit…
SouadHadjiat Nov 17, 2023
377b6bb
[backend/frontend] fix build
SouadHadjiat Nov 20, 2023
383343a
[backend/frontend] display again files metrics by mime type
SouadHadjiat Nov 20, 2023
9b15674
[backend] add uploaded_at to mapping
SouadHadjiat Nov 20, 2023
2325431
[frontend] WIP: File indexing configuration
marieflorescontact Nov 17, 2023
6c83fc2
[frontend] progess bar
marieflorescontact Nov 20, 2023
9c829a9
[frontend] Improve styling
marieflorescontact Nov 20, 2023
936cae9
[frontend] add restrict to entity types
SouadHadjiat Nov 21, 2023
f0d9a44
[frontend] add max file size in form
SouadHadjiat Nov 21, 2023
e570bc2
[backend] fix tests
SouadHadjiat Nov 21, 2023
ff70c41
[backend] fix filesMetrics query : add includedPaths
SouadHadjiat Nov 21, 2023
fcb23fd
[backend/frontend] code cleanup and style improvements
SouadHadjiat Nov 22, 2023
6bc47d8
[frontend] fix after rebase
SouadHadjiat Nov 22, 2023
0fe126e
[frontend] add managerConfiguration item icon for activity audit
SouadHadjiat Nov 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions opencti-platform/opencti-front/src/components/ItemIcon.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
ReviewsOutlined,
RouterOutlined,
SettingsOutlined,
SettingsApplicationsOutlined,
ShortTextOutlined,
SourceOutlined,
SpeakerNotesOutlined,
Expand Down Expand Up @@ -349,6 +350,10 @@ const iconSelector = (type, variant, fontSize, color, isReversed) => {
return (
<NotificationsOutlined style={style} fontSize={fontSize} role="img" />
);
case 'managerconfiguration':
return (
<SettingsApplicationsOutlined style={style} fontSize={fontSize} role="img" />
);
case 'observable':
case 'stix-cyber-observable':
case 'autonomous-system':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -963,7 +963,7 @@ const Settings = () => {
<Paper classes={{ root: classes.paper }} variant="outlined">
<List style={{ marginTop: -20 }}>
{modules.map((module) => {
const isEeModule = ['ACTIVITY_MANAGER', 'PLAYBOOK_MANAGER'].includes(module.id);
const isEeModule = ['ACTIVITY_MANAGER', 'PLAYBOOK_MANAGER', 'FILE_INDEX_MANAGER'].includes(module.id);
let status = module.enable;
if (!isEnterpriseEdition && isEeModule) {
status = 'ee';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,25 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*/

import React, { FunctionComponent, useEffect } from 'react';
import Grid from '@mui/material/Grid';
import { graphql, PreloadedQuery, usePreloadedQuery, useQueryLoader } from 'react-relay';
import FileIndexingRequirements
from '@components/settings/file_indexing/FileIndexingRequirements';
import FileIndexingConfiguration from '@components/settings/file_indexing/FileIndexingConfiguration';
import FileIndexingMonitoring
from '@components/settings/file_indexing/FileIndexingMonitoring';
import {
FileIndexingConfigurationQuery,
} from '@components/settings/file_indexing/__generated__/FileIndexingConfigurationQuery.graphql';
import FileIndexingRequirements from '@components/settings/file_indexing/FileIndexingRequirements';
import FileIndexingConfigurationAndMonitoring from '@components/settings/file_indexing/FileIndexingConfigurationAndMonitoring';
import EnterpriseEdition from '@components/common/entreprise_edition/EnterpriseEdition';
import useEnterpriseEdition from '../../../../utils/hooks/useEnterpriseEdition';
import useAuth from '../../../../utils/hooks/useAuth';
import { FILE_INDEX_MANAGER } from '../../../../utils/platformModulesHelper';
import Loader, { LoaderVariant } from '../../../../components/Loader';
import { FileIndexingConfigurationQuery } from './__generated__/FileIndexingConfigurationQuery.graphql';

const fileIndexingConfigurationQuery = graphql`
query FileIndexingConfigurationQuery($managerId: String!, $mimeTypes: [String!], $maxFileSize: Float, $excludedPaths: [String!]) {
query FileIndexingConfigurationQuery($managerId: String!) {
managerConfigurationByManagerId(managerId: $managerId) {
id
manager_id
manager_running
last_run_start_date
last_run_end_date
}
filesMetrics(mimeTypes: $mimeTypes, maxFileSize: $maxFileSize, excludedPaths: $excludedPaths) {
globalCount
globalSize
manager_setting
}
}
`;
Expand All @@ -55,12 +46,19 @@ export const fileIndexingConfigurationFieldPatch = graphql`
id
manager_id
manager_running
manager_setting
}
}
`;

export const fileIndexingResetMutation = graphql`
mutation FileIndexingResetMutation {
resetFileIndexing
}
`;

interface FileIndexingComponentProps {
queryRef: PreloadedQuery<FileIndexingConfigurationQuery>
queryRef: PreloadedQuery<FileIndexingConfigurationQuery>;
}

const FileIndexingComponent: FunctionComponent<FileIndexingComponentProps> = ({
Expand All @@ -70,66 +68,43 @@ const FileIndexingComponent: FunctionComponent<FileIndexingComponentProps> = ({
const { platformModuleHelpers } = useAuth();
const isModuleWarning = platformModuleHelpers.isModuleWarning(FILE_INDEX_MANAGER);

const { filesMetrics, managerConfigurationByManagerId } = usePreloadedQuery<FileIndexingConfigurationQuery>(fileIndexingConfigurationQuery, queryRef);
const isStarted = managerConfigurationByManagerId?.manager_running || false;
const managerConfigurationId = managerConfigurationByManagerId?.id;
const totalFiles = filesMetrics?.globalCount;
const dataToIndex = filesMetrics?.globalSize;
const { managerConfigurationByManagerId } = usePreloadedQuery<FileIndexingConfigurationQuery>(fileIndexingConfigurationQuery, queryRef);

return (
<div>
{!isEnterpriseEdition && (
<EnterpriseEdition feature={'File indexing'} />
)}
<FileIndexingRequirements
isModuleWarning={isModuleWarning}
/>
{isEnterpriseEdition && !isModuleWarning && managerConfigurationByManagerId && (
<Grid container={true} spacing={3}>
<Grid item={true} xs={6} style={{ marginTop: 30 }}>
<FileIndexingConfiguration
totalFiles={totalFiles}
dataToIndex={dataToIndex}
/>
</Grid>
<Grid item={true} xs={6} style={{ marginTop: 30 }}>
<FileIndexingMonitoring
totalFiles={totalFiles}
isStarted={isStarted}
managerConfigurationId={managerConfigurationId}
/>
</Grid>
</Grid>
)}
{isModuleWarning && (
<FileIndexingRequirements
isModuleWarning={isModuleWarning}
/>
)}
{isEnterpriseEdition && !isModuleWarning && managerConfigurationByManagerId && (
<FileIndexingConfigurationAndMonitoring managerConfiguration={managerConfigurationByManagerId} />
)}
</div>
);
};

const FileIndexing = () => {
const [queryRef, loadQuery] = useQueryLoader<FileIndexingConfigurationQuery>(fileIndexingConfigurationQuery);
// TODO MVP2 : get from configuration
const defaultMimeTypes = ['application/pdf', 'text/plain', 'text/csv', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
const queryArgs = {
managerId: FILE_INDEX_MANAGER,
mimeTypes: defaultMimeTypes,
maxFileSize: 5242880,
excludedPaths: ['import/global'],
};
useEffect(() => {
loadQuery(queryArgs, { fetchPolicy: 'store-and-network' });
}, []);
return (
<>
{queryRef ? (
<React.Suspense fallback={<Loader variant={LoaderVariant.container} />}>
<FileIndexingComponent
queryRef={queryRef}
/>
</React.Suspense>
) : (
<Loader variant={LoaderVariant.container} />
)}
</>
<>
{queryRef ? (
<React.Suspense fallback={<Loader variant={LoaderVariant.container} />}>
<FileIndexingComponent queryRef={queryRef} />
</React.Suspense>
) : (
<Loader variant={LoaderVariant.container} />
)}
</>
);
};
export default FileIndexing;