From d6ebb2680e76669ddd824a80eaadcebd554cfcae Mon Sep 17 00:00:00 2001 From: Linus Pahl Date: Thu, 21 Mar 2024 16:12:11 +0100 Subject: [PATCH] Improve reusability of event definition wizard. (#18731) * Unify event definition type. * Remove redundant event definition type. * Create component for event definition form buttons. * Make event definition form controls pluggable. * Fixing linter hint. * Default to first step when in security mode * Fix duplicate in event definition form (#18722) * register event definition export globally - EventDefinitionsBindings, EventNotificationsBindings, FieldValueProvidersBindings * fix types * Fix search query being erased while typing * fix test * fix types * Make initial step configurable. * Only set URL query param `step` when necessary. * Refactor from controls. * Update props: * Reimplement `onChange` in `FilterForm` to fix problem with params. * make embryonic only constrained to FilterForm * Fixing linter hints. --------- Co-authored-by: Simon Huang Co-authored-by: Ousmane SAMBA Co-authored-by: Ousmane Samba --- .../src/@types/graylog-web-plugin/index.d.ts | 19 ++- .../EventConditionForm.tsx | 7 +- .../EventDefinitionForm.tsx | 143 +++++++----------- .../EventDefinitionFormContainer.test.tsx | 14 +- .../EventDefinitionFormContainer.tsx | 66 +++++--- .../EventDefinitionFormControls.tsx | 58 +++++++ .../EventDefinitionSummary.tsx | 4 - .../event-definition-form/FieldsForm.tsx | 3 - .../{index.js => bindings.ts} | 6 +- .../event-definition-types/FilterForm.tsx | 23 +-- .../{index.js => bindings.js} | 5 +- .../event-definitions-types.ts | 75 ++++++--- .../EventDefinitionsContainer.tsx | 1 - .../EventNotificationFormContainer.jsx | 4 - .../{index.js => bindings.ts} | 6 +- .../EventNotificationsContainer.tsx | 3 - .../events/events/EventsContainer.jsx | 2 - .../events/hooks/useEventDefinition.tsx | 2 +- .../hooks/useAlertAndEventDefinitionData.tsx | 2 +- .../src/hooks/useEventDefinition.tsx | 2 +- graylog2-web-interface/src/index.tsx | 6 + .../src/logic/alerts/types.ts | 56 ------- .../src/pages/CreateEventDefinitionPage.tsx | 9 +- .../src/pages/EditEventDefinitionPage.tsx | 24 ++- .../src/pages/ShowEventNotificationPage.tsx | 1 - .../logic/views/UseCreateViewForEvent.ts | 3 +- .../views/UseCreateViewForEventDefinition.ts | 2 +- .../test/fixtures/eventDefinition.ts | 2 + .../mocking/EventAndEventDefinitions_mock.ts | 3 +- 29 files changed, 307 insertions(+), 244 deletions(-) create mode 100644 graylog2-web-interface/src/components/event-definitions/event-definition-form/EventDefinitionFormControls.tsx rename graylog2-web-interface/src/components/event-definitions/event-definition-form/field-value-providers/{index.js => bindings.ts} (93%) rename graylog2-web-interface/src/components/event-definitions/event-definition-types/{index.js => bindings.js} (91%) rename graylog2-web-interface/src/components/event-notifications/event-notification-types/{index.js => bindings.ts} (95%) delete mode 100644 graylog2-web-interface/src/logic/alerts/types.ts diff --git a/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts b/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts index 4c8e1040b5..59250ef87f 100644 --- a/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts +++ b/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts @@ -137,13 +137,30 @@ type DataTiering = { }>, } +type FieldValueProvider = { + type: string, + displayName: string, + formComponent: React.ComponentType, + summaryComponent: React.ComponentType, + defaultConfig: { + template?: string, + table_name?: string, + key_field?: string, + }, + requiredFields: { + template?: string, + table_name?: string, + key_field?: string, + }, +} declare module 'graylog-web-plugin/plugin' { interface PluginExports { navigation?: Array; dataTiering?: Array defaultNavigation?: Array; navigationItems?: Array; - globalNotifications?: Array + globalNotifications?: Array; + fieldValueProviders?:Array; // Global context providers allow to fetch and process data once // and provide the result for all components in your plugin. globalContextProviders?: Array>>, diff --git a/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx b/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx index b44647e5bf..a838034e27 100644 --- a/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx +++ b/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx @@ -25,10 +25,10 @@ import { Select } from 'components/common'; import { Clearfix, Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap'; import { HelpPanel } from 'components/event-definitions/common/HelpPanel'; import type User from 'logic/users/User'; -import { getPathnameWithoutId } from 'util/URLUtils'; import useSendTelemetry from 'logic/telemetry/useSendTelemetry'; import useLocation from 'routing/useLocation'; import { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants'; +import { getPathnameWithoutId } from 'util/URLUtils'; import styles from './EventConditionForm.css'; @@ -143,9 +143,10 @@ const EventConditionForm = ({ action, entityTypes, eventDefinition, validation, Configure how Graylog should create Events of this kind. You can later use those Events as input on other Conditions, making it possible to build powerful Conditions based on others.

- - Condition Type + + Condition Type